СКД: скорость работы Набор данных Запрос vs Объект

1. artir 21.02.21 09:29 Сейчас в теме
Возникла необходимость к работающему отчету на СКД добавить входные данные из другой базы. Промучившись пол дня и, поняв, что время поджимает, а решения нет, было принято "конвертировать" набор данных Запрос в Объект (https://infostart.ru/1c/articles/285576/) и далее понятными способами решить поставленную задачу с добавлением внешних данных в отчет.
Сразу после перевода набора данных в Объект запустил Отчет, дабы проверить его корректную работу. Отчет работал идентично как и ранее на наборе данных Запрос. НО (!) время генерации отчета (ползунок слева внизу экрана) увеличилось в 2-2.5 раза.
Это как и почему ?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. spacecraft 22.02.21 18:20 Сейчас в теме
(1) в набор данных Объект Представления ссылочных типов не грузили? Вот, еще повторная загрузка недостающих данных из базы.
2. tormozit 7140 21.02.21 10:17 Сейчас в теме
Попробуй добавь индексы в таблицу значений.
3. artir 21.02.21 10:30 Сейчас в теме
(2)
индексы в таблицу значений

Запрос не выгружал в ТЗ, а передавал как Результат запроса (см. ниже код). Думал, что так быстрее будет. Но на скорость это не сказалось ни как.
Или попробовать грузить в ТЗ, у которой создать индексы? И тогда их делать для всех столбцов или как ?
В результате запроса около 30к строк и 10 столбцов.

Функция ПолучитьТаблицуДанных()

	...
	Возврат Запрос.Выполнить(); //.Выгрузить();

КонецФункции


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ТаблицаДанных = ПолучитьТаблицуДанных();
	
	Настройки = КомпоновщикНастроек.Настройки;
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки);
	
	ВнешниеНаборыДанных = Новый Структура;
	ВнешниеНаборыДанных.Вставить("ТаблицаДанных", ТаблицаДанных);
	
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
	
КонецПроцедуры
Показать
4. KVIKS 399 22.02.21 16:59 Сейчас в теме
А зачем весь отчет переводить в Объект, Можно же в скд сделать Объединение: 1. запрос СКД, 2 Объект -тз с недостающими данными.
6. artir 22.02.21 19:05 Сейчас в теме
(4) потому, что ВнешниеДанные нужно добавить внутрь запроса. Возможно, это решается разветвленной системой через узел Объединение, но это нужно перекраивать существующую структуру отчета. Куда проще все "конвертировать" в Объект.

Начиная с версии 8.3.17+ добавили возможность использовать МенеджерВременныхТаблиц (https://infostart.ru/1c/articles/1229680/), но кажется, что на скорость это ни как не повлияет, т.к. обработчик ПриКомпоновкеРезультата все равно не стандартный (СтандартнаяОбработка = Ложь) Правда, автор статьи выше что-то его опустил, ошибся ?

Поэтому падение производительности в 2-2.5 раза при использовании Объект по сравнению с Запрос - такое себе удовольствие.
Проверить бы это на последних релизах платформы.
7. toypaul 63 23.02.21 20:12 Сейчас в теме
Для начала надо выяснить за счет чего упала производительность. Это можно сделать замером в отладчике выполнив отчет по старой и по новой схеме и сравнив замеры
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот