|
Как ускорить программное выполнение СКД с набором данных - объект? | ☑ | ||
|---|---|---|---|---|
|
0
shulkin
26.11.13
✎
11:36
|
1С 8.2 УФ.
Делаю отчет по реализации по двум базам. Предварительно выгребаю данные по реализации в таблицу значений "Реализация". В СКД источником данных является набор данных - объект. В настройки СКД добавляю отбор из сохраненных пользовательских настроек. Применив отбор нужно получить результат в виде новой таблицы значений. Вопрос в том, КАК УСКОРИТЬ ВЫПОЛНЕНИЕ, ЧТО ВЛИЯЕТ, КАКИЕ ЕСТЬ СПОСОБЫ ОПТИМИЗАЦИИ КОМАНДЫ "ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести();", потому что при замере производительности именно на этой строке отчет выполняется очень-очень долго. Например, что бы отобрать данные за 10 дней необходимо примерно 2 минуты. А отчет необходимо применять за период - год. Кусок кода: ЭтотОтчет = РеквизитФормыВЗначение("Отчет"); СхемаКомпоновкиДанных = ЭтотОтчет.ПолучитьМакет("СхемаКомпоновкиДанныхДляОтбора"); Реализация = ПолучитьИзВременногоХранилища(Отчет.ХранилищеРеализации).Скопировать(); Сообщить("Скопировал таблицу из хранилища "+ Формат(ТекущаяДата(), "ДЛФ=T")); Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.Основной.Настройки; НастройкиЭлементы = Настройки.Отбор.Элементы; НастройкиЭлементы.Очистить(); ОтборЭлементы = НастройкиКомпоновкиДанных.Отбор.Элементы; Для каждого ТекЭлемент Из ОтборЭлементы Цикл ЭлементОтбора = НастройкиЭлементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ВидСравнения = ТекЭлемент.ВидСравнения; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СокрЛП(ТекЭлемент.ЛевоеЗначение)); ЭлементОтбора.ПравоеЗначение = ТекЭлемент.ПравоеЗначение; КонецЦикла; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("Реализация", Реализация); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, , ); Сообщить("Инициализировал в "+ Формат(ТекущаяДата(), "ДЛФ=T")); НоваяРеализация = Новый ТаблицаЗначений; ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.УстановитьОбъект(НоваяРеализация); ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести(ПроцессорКомпоновкиДанных); Сообщить("Отобрал в "+ Формат(ТекущаяДата(), "ДЛФ=T")); |
| Форум | Правила | Описание | Секции | Поиск |