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

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

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


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

Свежие комментарии