Содержание
Временная таблица в СКД
Что я имею в виду под помещением в СКД временной таблицы? С некоторых пор мы можем в объекте СКД «Запрос» использовать временную таблицу прямо в тексте запроса, не передавая ее как параметр.
Пример текста запроса:
ВЫБРАТЬ
ВТ_ВнешняяТаблица.Руководитель КАК Руководитель,
ВТ_ВнешняяТаблица.Сотрудник КАК Сотрудник,
ВТ_ВнешняяТаблица.ВидРуководителя КАК ВидРуководителя
ПОМЕСТИТЬ ВТ_ВсеПодчиненные
ИЗ
ВТ_ВнешняяТаблица КАК ВТ_ВнешняяТаблица
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КадровыеДанные КАК Представления_КадровыеДанныеСотрудников
ПО ВТ_ВнешняяТаблица.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник
{ГДЕ
ВТ_ВнешняяТаблица.Сотрудник КАК Подчиненный}
Такой запрос в основной схеме компоновки данных будет отлично работать, и даже будут накладываться отборы в настройках.
Принцип работы и сбор данных
Но как же это работает и откуда СКД берет данные? Для этого в инициализации процессора компоновки данных появился новый параметр: «менеджер временных таблиц».
ПроцессорКомпоновкиДанных (DataCompositionProcessor)
Инициализировать (Initialize)
Синтаксис: Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>, <ОграничиватьПолучениеПолейПоСсылкамПоПравуПросмотр>, <МенеджерВременныхТаблиц>)
Используем его так:
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗаполнитьМенеджерВременныхТаблиц(ТаблицаИерархии, МенеджерВременныхТаблиц);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина,, МенеджерВременныхТаблиц);
Процедура «ЗаполнитьМенеджерВременныхТаблиц» довольно простая:
Процедура ЗаполнитьМенеджерВременныхТаблиц(ТаблицаИерархии, МенеджерВременныхТаблиц)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| ТабИерархии.Руководитель КАК Руководитель,
| ТабИерархии.Сотрудник КАК Сотрудник,
| ТабИерархии.ВидРуководителя КАК ВидРуководителя
|ПОМЕСТИТЬ ВТ_ВнешняяТаблица
|ИЗ
| &ТабИерархии КАК ТабИерархии";
Запрос.УстановитьПараметр("ТабИерархии", ТаблицаИерархии);
Запрос.Выполнить();
КонецПроцедуры
В остальном код программного формирования СКД сохраняется.
Автор: Сергей Ж., ведущий разработчик 1С.