Top.Mail.Ru
25 июля в 17:00 по МСК
Регистрируйся!
Онлайн-митап по 1С «Типовой механизм многопоточности БСП»

Использование менеджера временных таблиц в СКД

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД.

В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно.

Статья будет полезна разработчикам, знакомым с программным созданием СКД.

Временная таблица в СКД

Что я имею в виду под помещением в СКД временной таблицы? С некоторых пор мы можем в объекте СКД «Запрос» использовать временную таблицу прямо в тексте запроса, не передавая ее как параметр. Пример текста запроса:

ВЫБРАТЬ
	ВТ_ВнешняяТаблица.Руководитель КАК Руководитель,
	ВТ_ВнешняяТаблица.Сотрудник КАК Сотрудник,
	ВТ_ВнешняяТаблица.ВидРуководителя КАК ВидРуководителя
ПОМЕСТИТЬ ВТ_ВсеПодчиненные
ИЗ
	ВТ_ВнешняяТаблица КАК ВТ_ВнешняяТаблица
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_КадровыеДанные КАК Представления_КадровыеДанныеСотрудников
		ПО ВТ_ВнешняяТаблица.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник
{ГДЕ
	ВТ_ВнешняяТаблица.Сотрудник КАК Подчиненный}

Такой запрос в основной схеме компоновки данных будет отлично работать, и даже будут накладываться отборы в настройках.

Принцип работы и сбор данных

Но как же это работает и откуда СКД берет данные? Для этого в инициализации процессора компоновки данных появился новый параметр: «менеджер временных таблиц».

ПроцессорКомпоновкиДанных (DataCompositionProcessor)

Инициализировать (Initialize)

Синтаксис: Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>, <ОграничиватьПолучениеПолейПоСсылкамПоПравуПросмотр>, <МенеджерВременныхТаблиц>)

Используем его так:

МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
ЗаполнитьМенеджерВременныхТаблиц(ТаблицаИерархии, МенеджерВременныхТаблиц);

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина,, МенеджерВременныхТаблиц);

Процедура «ЗаполнитьМенеджерВременныхТаблиц» довольно простая:

Процедура ЗаполнитьМенеджерВременныхТаблиц(ТаблицаИерархии, МенеджерВременныхТаблиц)
	
	Запрос = Новый Запрос;
	Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТабИерархии.Руководитель КАК Руководитель,
	|	ТабИерархии.Сотрудник КАК Сотрудник,
	|	ТабИерархии.ВидРуководителя КАК ВидРуководителя
	|ПОМЕСТИТЬ ВТ_ВнешняяТаблица
	|ИЗ
	|	&ТабИерархии КАК ТабИерархии";
	
	Запрос.УстановитьПараметр("ТабИерархии", ТаблицаИерархии);
	Запрос.Выполнить();
	
КонецПроцедуры

В остальном код программного формирования СКД остается тот же. Посмотреть можно в статье: https://wiki.programstore.ru/vyvod-kartinok-v-otchetax-na-skd/ в пункте работы с процедурой «ПриКомпоновкеРезультата»

Comments

So empty here ... leave a comment!

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

Sidebar