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

Кусок кода:

ЭтотОтчет = РеквизитФормыВЗначение("Отчет");
СхемаКомпоновкиДанных = ЭтотОтчет.ПолучитьМакет("СхемаКомпоновкиДанныхДляОтбора");
    
Реализация = ПолучитьИзВременногоХранилища(Отчет.ХранилищеРеализации).Скопировать();
    
Сообщить("Скопировал таблицу из хранилища "+ Формат(ТекущаяДата(), "ДЛФ=T"));
        
Настройки = СхемаКомпоновкиДанных.ВариантыНастроек.Основной.Настройки;
НастройкиЭлементы = Настройки.Отбор.Элементы;
НастройкиЭлементы.Очистить();
    ОтборЭлементы = НастройкиКомпоновкиДанных.Отбор.Элементы;
    Для каждого ТекЭлемент Из ОтборЭлементы Цикл
        ЭлементОтбора = НастройкиЭлементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        ЭлементОтбора.ВидСравнения = ТекЭлемент.ВидСравнения;
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(СокрЛП(ТекЭлемент.ЛевоеЗначение));
        ЭлементОтбора.ПравоеЗначение = ТекЭлемент.ПравоеЗначение;
    КонецЦикла;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));

ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("Реализация", Реализация);
    
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, , );            
    
Сообщить("Инициализировал в "+ Формат(ТекущаяДата(), "ДЛФ=T"));
    
НоваяРеализация = Новый ТаблицаЗначений;
        
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.УстановитьОбъект(НоваяРеализация);
    ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести(ПроцессорКомпоновкиДанных);

Сообщить("Отобрал в "+ Формат(ТекущаяДата(), "ДЛФ=T"));
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn