Возникла необходимость к работающему отчету на СКД добавить входные данные из другой базы. Промучившись пол дня и, поняв, что время поджимает, а решения нет, было принято "конвертировать" набор данных Запрос в Объект (https://infostart.ru/1c/articles/285576/) и далее понятными способами решить поставленную задачу с добавлением внешних данных в отчет.
Сразу после перевода набора данных в Объект запустил Отчет, дабы проверить его корректную работу. Отчет работал идентично как и ранее на наборе данных Запрос. НО (!) время генерации отчета (ползунок слева внизу экрана) увеличилось в 2-2.5 раза.
Это как и почему ?
Запрос не выгружал в ТЗ, а передавал как Результат запроса (см. ниже код). Думал, что так быстрее будет. Но на скорость это не сказалось ни как.
Или попробовать грузить в ТЗ, у которой создать индексы? И тогда их делать для всех столбцов или как ?
В результате запроса около 30к строк и 10 столбцов.
Функция ПолучитьТаблицуДанных()
...
Возврат Запрос.Выполнить(); //.Выгрузить();
КонецФункции
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТаблицаДанных = ПолучитьТаблицуДанных();
Настройки = КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаДанных", ТаблицаДанных);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
(4) потому, что ВнешниеДанные нужно добавить внутрь запроса. Возможно, это решается разветвленной системой через узел Объединение, но это нужно перекраивать существующую структуру отчета. Куда проще все "конвертировать" в Объект.
Начиная с версии 8.3.17+ добавили возможность использовать МенеджерВременныхТаблиц (https://infostart.ru/1c/articles/1229680/), но кажется, что на скорость это ни как не повлияет, т.к. обработчик ПриКомпоновкеРезультата все равно не стандартный (СтандартнаяОбработка = Ложь) Правда, автор статьи выше что-то его опустил, ошибся ?
Поэтому падение производительности в 2-2.5 раза при использовании Объект по сравнению с Запрос - такое себе удовольствие.
Проверить бы это на последних релизах платформы.
Для начала надо выяснить за счет чего упала производительность. Это можно сделать замером в отладчике выполнив отчет по старой и по новой схеме и сравнив замеры