Имя: Пароль:
1C
1С v8
Отчет СКД в УП выполняется за 6 секунд, в ОП за 1 секунду.
0 dj_serega
 
16.12.13
13:19
База на MS SQL.

Есть набор данных Партии.
Если выполнять запрос через форму обычного приложения, результат выводится через 1 секунду.
Если выполнять через управляемую форму, на построение запроса требуется больше 6 секунд.

Запрос, как по мне, элементарный. Стек вызовов на УП показал шесть запросов в базу. Каждый больше секунды.
В условиях нет отборов, так как записей в регистре около 30ти.

Текст запроса:

ВЫБРАТЬ
ПартииТоваровНаСкладахОстаткиИОбороты.Склад КАК Склад,
ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования КАК ДокументПартии
{ВЫБРАТЬ
Склад,
Номенклатура,
ДокументПартии}
ИЗ
РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты
{ГДЕ
ПартииТоваровНаСкладахОстаткиИОбороты.Склад,
ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования}

Как такое может быть?

Какое-то СКД в управляемом приложении неуправляемое ;(
1 Hmster
 
16.12.13
13:21
возможно делается через фоновое задание.
Проверь по журналу
2 dj_serega
 
16.12.13
13:22
(1) что именно делается через фоновое задание?
3 Ёпрст
 
16.12.13
13:24
Это, условия в параметры ВТ не хочешь вложить ?
4 dj_serega
 
16.12.13
13:24
(2) Фоновое задание выполяет чтото за 3 секунды ;(
5 banco
 
16.12.13
13:29
6 dj_serega
 
16.12.13
13:44
УП такое УП.
Для решение текущей задачи пришлось программно формировать отчет.


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

Итог: 2 вызова - 0,44 секунды.

Спасибо ;)