Фокус с менеджером временных таблиц СКД не удался. Но есть альтернатива

В СКД давно уже можно передавать на вход менеджер временных таблиц.

Хотелось получить временные таблицы СКД на выходе, чтобы сделать удобный отбор данных на форме отчета с СКД:

Запрос был красивым:

Код простой:

МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ТЗ = ВывестиОтчетВТЗ(СхемаКомпоновкиДанных, КомпоновщикНастроек, ДанныеРасшифровки, , МенеджерВременныхТаблиц);	

Функция ВывестиОтчетВТЗ(СхемаКомпоновкиДанных, КомпоновщикНастроек, ДанныеРасшифровки, СтруктураВнешнихДанных = Неопределено, МенеджерВременныхТаблиц = Неопределено) Экспорт
	
	//https://1c8xx.ru/skdtzprogout.php
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
	Настройки = КомпоновщикНастроек.ПолучитьНастройки();
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных();
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, СтруктураВнешнихДанных, ДанныеРасшифровки,,,МенеджерВременныхТаблиц);
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений();
	ТЗ = Новый ТаблицаЗначений();
	ПроцессорВывода.УстановитьОбъект(ТЗ);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); 
	
	Возврат ТЗ;
	
КонецФункции

Но увы, менеджер таблиц на выходе не содержит временных таблиц СКД.

Приходится делать тоже красиво, но не так эффективно:

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

Не умеет 1С в логическую завершенность. В одну сторону сделала, а в другую нет.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *