Помогите оптимизировать код , Динамическое добавление колонок
22.08.14, 7:48
Общительный
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0
Запрос.Текст="ВЫБРАТЬ | ПродажиТочекТовары.ДисконтКл КАК ДисконтКл, | ПродажиТочекТовары.Сумма + ПродажиТочекТовары.Скидка КАК Сумма, | НАЧАЛОПЕРИОДА(ПродажиТочекТовары.Ссылка.Дата, МЕСЯЦ) КАК Период, | ПродажиТочекТовары.Время КАК Время |ИЗ | Документ.ПродажиТочек.Товары КАК ПродажиТочекТовары |ГДЕ | ПродажиТочекТовары.ДисконтКл <> ЗНАЧЕНИЕ(Справочник.ДисконтКлиенты.ПустаяСсылка) | И ПродажиТочекТовары.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо | И ПродажиТочекТовары.Ссылка.Проведен = ИСТИНА | |УПОРЯДОЧИТЬ ПО | ПродажиТочекТовары.ДисконтКл.КартНом |ИТОГИ | СУММА(Сумма), | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Время) |ПО | ОБЩИЕ, | ДисконтКл, | Период"; Таб=Новый ТабличныйДокумент; Макет=ПолучитьМакет("ПоМес"); ОШап=Макет.ПолучитьОбласть("Шапка"); ОШЗ=Макет.ПолучитьОбласть("Шап|Заг"); ОШМ=Макет.ПолучитьОбласть("Шап|Мес"); ОСЗ=Макет.ПолучитьОбласть("Строка|Заг"); ОСМ=Макет.ПолучитьОбласть("Строка|Мес"); ОШап.Параметры.Заполнить(Новый Структура("ДатаС, ДатаПо", формат(ДатаС, "ДЛФ=Д"), формат(ДатаПо, "ДЛФ=Д"))); Таб.Вывести(ОШап); ОСтр=Макет.ПолучитьОбласть("Строка"); ОДно=Макет.ПолучитьОбласть("Дно"); Таб.Вывести(ОШЗ); ПериодВыб=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период"); Пока ПериодВыб.Следующий() Цикл ОШМ.Параметры.Мес=ПериодВыб.Период; Таб.Присоединить(ОШМ); КонецЦикла; ПериодВыб.Сбросить(); ОбщВыб=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие"); Кол=0; Сум=0; Пока ОбщВыб.Следующий() Цикл ДискКлВыб=ОбщВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл"); Пока ДискКлВыб.Следующий() Цикл Состояние("Обрабатываю карту "+ДискКлВыб.ДисконтКл.КартНом); ОСЗ.Параметры.Карт=ДискКлВыб.ДисконтКл.КартНом; Таб.Вывести(ОСЗ); Пока ПериодВыб.Следующий() Цикл Кол=0; Сум=0; ОбработкаПрерыванияПользователя(); ДисВыб=ПериодВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл"); Пока ДисВыб.НайтиСледующий(Новый Структура("ДисконтКл", ДискКлВыб.ДисконтКл)) Цикл Кол=ДисВыб.Время; Сум=ДисВыб.Сумма; КонецЦикла; ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум)); Таб.Присоединить(ОСМ); КонецЦикла; ПериодВыб.Сбросить(); КонецЦикла; КонецЦикла;
В таком варианте код работает, но очень медленно. Кто может подсказать какие – то варианты по оптимизации.
22.08.14, 10:23
Общительный
Группа: Пользователи
Сообщений: 33
Спасибо сказали: 1 раз
Рейтинг: 0
Решение:
Пока ОбщВыб.Следующий() Цикл ДискКлВыб=ОбщВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ДисконтКл"); ВсегоКарт=ДискКлВыб.Количество(); ТекКарт=0; Пока ДискКлВыб.Следующий() Цикл ТекКарт=ТекКарт+1; Состояние("Обрабатываю "+ОКР(ТекКарт*100/ВсегоКарт)+"% карт"); ОСЗ.Параметры.Карт=ДискКлВыб.ДисконтКл.КартНом; Таб.Вывести(ОСЗ); //ПВыб=ДискКлВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период"); //Пока ПВыб.Следующий() Цикл // Кол=ПВыб.Время; // Сум=ПВыб.Сумма; // ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум)); // Таб.Присоединить(ОСМ); //КонецЦикла; Пока ПериодВыб.Следующий() Цикл Кол=0; Сум=0; ОбработкаПрерыванияПользователя(); ДисВыб=ДискКлВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Период"); Пока ДисВыб.НайтиСледующий(Новый Структура("Период", ПериодВыб.Период)) Цикл Кол=ДисВыб.Время; Сум=ДисВыб.Сумма; КонецЦикла; ОСМ.Параметры.Заполнить(Новый Структура("Кол,Сум",Кол,Сум)); Таб.Присоединить(ОСМ); КонецЦикла; ПериодВыб.Сбросить(); КонецЦикла; КонецЦикла;
22.08.14, 19:26
Почти ветеран
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0
Цитата(Zlyukka @ 22.08.14, 13:41)
А вы с регистрами не путаете? Если нет, то более подробный пример условия. И СКД не всегда подходит.
Именно, перепутал
а что говорит замер производительности? На что больше времени уходит?
Не нашли ответа на свой вопрос?
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!