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