Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Помогите оптимизировать код , Динамическое добавление колонок          
Zlyukka Подменю пользователя
сообщение 22.08.14, 7:48
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0



Запрос.Текст="ВЫБРАТЬ
                 |    ПродажиТочекТовары.ДисконтКл КАК ДисконтКл,
                 |    ПродажиТочекТовары.Сумма + ПродажиТочекТовары.Скидка КАК Сумма,
                 |    НАЧАЛОПЕРИОДА(ПродажиТочекТовары.Ссылка.Дата, МЕСЯЦ) КАК Период,
                 |    ПродажиТочекТовары.Время КАК Время
                 |ИЗ
                 |    Документ.ПродажиТочек.Товары КАК ПродажиТочекТовары
                 |ГДЕ
                 |    ПродажиТочекТовары.ДисконтКл <> ЗНАЧЕНИЕ(Справочник.ДисконтКлиенты.ПустаяСсылка)
                 |    И ПродажиТочекТовары.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо
                 |    И ПродажиТочекТовары.Ссылка.Проведен = ИСТИНА
                 |
                 |УПОРЯДОЧИТЬ ПО
                 |    ПродажиТочекТовары.ДисконтКл.КартНом
                 |ИТОГИ
                 |    СУММА(Сумма),
                 |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Время)
                 |ПО
                 |    ОБЩИЕ,
                 |    ДисконтКл,
                 |    Период";
    Таб=Новый ТабличныйДокумент;
    Макет=ПолучитьМакет("ПоМес");
    ОШап=Макет.ПолучитьОбласть("Шапка");
    ОШЗ=Макет.ПолучитьОбласть("Шап|Заг");
    ОШМ=Макет.ПолучитьОбласть("Шап|Мес");    
    ОСЗ=Макет.ПолучитьОбласть("Строка|Заг");
    ОСМ=Макет.ПолучитьОбласть("Строка|Мес");
    ОШап.Параметры.Заполнить(Новый Структура("ДатаС, ДатаПо", формат(ДатаС, "ДЛФ=Д"), формат(ДатаПо, "ДЛФ=Д")));
    Таб.Вывести(ОШап);
    ОСтр=Макет.ПолучитьОбласть("Строка");
    ОДно=Макет.ПолучитьОбласть("Дно");
    Таб.Вывести(ОШЗ);
    ПериодВыб=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");    
    Пока ПериодВыб.Следующий() Цикл
        ОШМ.Параметры.Мес=ПериодВыб.Период;
        Таб.Присоединить(ОШМ);
    КонецЦикла;
    ПериодВыб.Сбросить();
    ОбщВыб=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие");
    Кол=0;
    Сум=0;
    Пока ОбщВыб.Следующий() Цикл
        ДискКлВыб=ОбщВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл");            
        Пока ДискКлВыб.Следующий() Цикл
            Состояние("Обрабатываю карту "+ДискКлВыб.ДисконтКл.КартНом);
            ОСЗ.Параметры.Карт=ДискКлВыб.ДисконтКл.КартНом;
            Таб.Вывести(ОСЗ);            
            Пока ПериодВыб.Следующий() Цикл    
                Кол=0;
                Сум=0;
                ОбработкаПрерыванияПользователя();
                ДисВыб=ПериодВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл");
                Пока ДисВыб.НайтиСледующий(Новый Структура("ДисконтКл", ДискКлВыб.ДисконтКл)) Цикл
                    Кол=ДисВыб.Время;
                    Сум=ДисВыб.Сумма;
                КонецЦикла;
                ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум));
                Таб.Присоединить(ОСМ);                
            КонецЦикла;         
            ПериодВыб.Сбросить();
        КонецЦикла;
    КонецЦикла;


В таком варианте код работает, но очень медленно. Кто может подсказать какие – то варианты по оптимизации.

logist Подменю пользователя
сообщение 22.08.14, 8:13
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Сделать отчет на СКД не предлагать?


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Zlyukka Подменю пользователя
сообщение 22.08.14, 8:20
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(logist @ 22.08.14, 8:13) *
Сделать отчет на СКД не предлагать?

Ненуна

logist Подменю пользователя
сообщение 22.08.14, 8:22
Сообщение #4

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Zlyukka @ 22.08.14, 8:20) *
Ненуна

В таком случае тут вряд ли можно что-то оптимизировать. Разве что данные брать не из документа а из регистра (если он есть и делает нужные движения)


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Zlyukka Подменю пользователя
сообщение 22.08.14, 8:32
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(logist @ 22.08.14, 8:22) *
В таком случае тут вряд ли можно что-то оптимизировать. Разве что данные брать не из документа а из регистра (если он есть и делает нужные движения)

Да тормозит не столько запрос , сколько вывод в цикле когда перебирает данные.

logist Подменю пользователя
сообщение 22.08.14, 8:33
Сообщение #6

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(Zlyukka @ 22.08.14, 8:32) *
сколько вывод в цикле когда перебирает данные.

На этот вопрос я уже ответил выше wink.gif


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Zlyukka Подменю пользователя
сообщение 22.08.14, 10:23
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0

Решение:
Пока ОбщВыб.Следующий() Цикл
        ДискКлВыб=ОбщВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл");
        ВсегоКарт=ДискКлВыб.Количество();
        ТекКарт=0;
        Пока ДискКлВыб.Следующий() Цикл
            ТекКарт=ТекКарт+1;
            Состояние("Обрабатываю "+ОКР(ТекКарт*100/ВсегоКарт)+"% карт");
            ОСЗ.Параметры.Карт=ДискКлВыб.ДисконтКл.КартНом;
            Таб.Вывести(ОСЗ);
            //ПВыб=ДискКлВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
            //Пока ПВыб.Следующий() Цикл                   
            //    Кол=ПВыб.Время;
            //    Сум=ПВыб.Сумма;                            
            //    ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум));
            //    Таб.Присоединить(ОСМ);
            //КонецЦикла;
            
            Пока ПериодВыб.Следующий() Цикл    
                Кол=0;
                Сум=0;
                ОбработкаПрерыванияПользователя();
                ДисВыб=ДискКлВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период");
                Пока ДисВыб.НайтиСледующий(Новый Структура("Период", ПериодВыб.Период)) Цикл
                    Кол=ДисВыб.Время;
                    Сум=ДисВыб.Сумма;
                КонецЦикла;
                ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум));
                Таб.Присоединить(ОСМ);                
            КонецЦикла;         
            ПериодВыб.Сбросить();
        КонецЦикла;
    КонецЦикла;

zetovich Подменю пользователя
сообщение 22.08.14, 12:33
Сообщение #8

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

Условие нужно пихать в
"|ИЗ
| Документ.ПродажиТочек.Товары(<сюда>) КАК ПродажиТочекТовары"
а то у Вас сначала выбирается все а потом накладывается условие, а нужно выбирать уже с условием.

а вообще, да СКД пора бы учить...
п.с. универсальный отчет в конце концов..

Сообщение отредактировал zetovich - 22.08.14, 12:34

Zlyukka Подменю пользователя
сообщение 22.08.14, 12:41
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0

Цитата(zetovich @ 22.08.14, 12:33) *
Условие нужно пихать в
"|ИЗ
| Документ.ПродажиТочек.Товары(<сюда>) КАК ПродажиТочекТовары"
а то у Вас сначала выбирается все а потом накладывается условие, а нужно выбирать уже с условием.

а вообще, да СКД пора бы учить...
п.с. универсальный отчет в конце концов..

А вы с регистрами не путаете? Если нет, то более подробный пример условия. И СКД не всегда подходит.

zetovich Подменю пользователя
сообщение 22.08.14, 19:26
Сообщение #10

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

Цитата(Zlyukka @ 22.08.14, 13:41) *
А вы с регистрами не путаете? Если нет, то более подробный пример условия. И СКД не всегда подходит.

Именно, перепутал smile.gif
а что говорит замер производительности? На что больше времени уходит?

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 7:09
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!