Выполняет компоновку СКД по переданным настройкам
Источник: https://t.me/JuniorOneS
// Выполняет компоновку СКД по переданным настройкам
//
// Параметры:
// Результат - ТабличныйДокумент,ТаблицаЗначений,ДеревоЗначений - результат выполнения
// СхемаКомпоновки - СхемаКомпоновкиДанных - выполняемая СКД
// НастройкиКомпоновки - НастройкиКомпоновкиДанных,КомпоновщикНастроекКомпоновкиДанных,Строка - выполняемые настройки или адрес временного хранилища или компоновщик с настройками
// ДанныеРасшифровки - ДанныеРасшифровкиКомпоновкиДанных, Неопределено - данные расшифровки
// ВнешниеНаборыДанных - Структура, Неопределено - коллекция внешних наборов данных
// ДополнительныеПараметры - Структура, Неопределено - коллекция внешних наборов данных
// * МакетОформления - МакетОформленияКомпоновкиДанных - Макет оформления, в соответствии с которым необходимо оформлять макет компоновки данных.
// * МенеджерВременныхТаблиц - МенеджерВременныхТаблиц,Структура - Временные таблицы, которые будут доступны в запросе СКД. Или МВТ или структура, где Ключ - Имя, а Значение - Таблица
// * ПроверятьДоступностьПолей - Булево - Определяет, выполнять ли проверку прав на просмотр полей и проверку доступности поля во включенных функциональных возможностях.
// * ПараметрыФункциональныхОпций - Булево - Содержит параметры функциональных опций, используемые при исполнении отчета.
// * ВозможностьИспользованияВнешнихФункций - Булево - Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
// * ОграничиватьПолучениеПолейПоСсылкамПоПравуПросмотр - Булево - Указывает обязательность наличия роли Просмотр для используемых метаданных в запросе СКД
//
// https://infostart.ru/profile/309462/
// https://t.me/JuniorOneS
//Подробнее об использовании метода: //infostart.ru/public/1082944/?ref=1159
//
Процедура СкомпоноватьРезультатОтчета(Результат, СхемаКомпоновки, НастройкиКомпоновки,
ДанныеРасшифровки = Неопределено, ВнешниеНаборыДанных = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
//Инициализируем настройки
Если ТипЗнч(НастройкиКомпоновки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда
ВыполняемыеНастройки = НастройкиКомпоновки.ПолучитьНастройки();
ИначеЕсли ТипЗнч(НастройкиКомпоновки) = Тип("Строка") И ЭтоАдресВременногоХранилища(НастройкиКомпоновки) Тогда
ВыполняемыеНастройки = ПолучитьИзВременногоХранилища(НастройкиКомпоновки);
Иначе
ВыполняемыеНастройки = НастройкиКомпоновки;
КонецЕсли;
Если НЕ ТипЗнч(ВыполняемыеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
Возврат;
КонецЕсли;
//Инициализируем дополнительные параметры вывода
ПараметрыВывода = Новый Структура;
ПараметрыВывода.Вставить("МакетОформления" , Неопределено);
ПараметрыВывода.Вставить("ПроверятьДоступностьПолей" , Истина);
ПараметрыВывода.Вставить("ПараметрыФункциональныхОпций" , Новый Структура);
ПараметрыВывода.Вставить("ВозможностьИспользованияВнешнихФункций" , Ложь);
ПараметрыВывода.Вставить("МенеджерВременныхТаблиц" , Неопределено);
ПараметрыВывода.Вставить("ОграничиватьПолучениеПолейПоСсылкамПоПравуПросмотр" , Истина);
Если НЕ ДополнительныеПараметры = Неопределено Тогда
ЗаполнитьЗначенияСвойств(ПараметрыВывода, ДополнительныеПараметры);
КонецЕсли;
Если ТипЗнч(ПараметрыВывода.МенеджерВременныхТаблиц) = Тип("Структура") Тогда
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Для Каждого КлючИЗначение Из ПараметрыВывода.МенеджерВременныхТаблиц Цикл
ДобавитьТаблицуВМенеджерВременныхТаблиц(МенеджерВременныхТаблиц, КлючИЗначение.Ключ, КлючИЗначение.Значение);
КонецЦикла;
ПараметрыВывода.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
КонецЕсли;
//Определяем тип генератора
Если ТипЗнч(Результат) = Тип("ТаблицаЗначений") ИЛИ ТипЗнч(Результат) = Тип("ДеревоЗначений") Тогда
ВыводВКоллекциюЗначений = Истина;
ТипГенератораВывода = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
Иначе
ВыводВКоллекциюЗначений = Ложь;
ТипГенератораВывода = Тип("ГенераторМакетаКомпоновкиДанных");
КонецЕсли;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки, ВыполняемыеНастройки,
ДанныеРасшифровки, ПараметрыВывода.МакетОформления, ТипГенератораВывода,
ПараметрыВывода.ПроверятьДоступностьПолей, ПараметрыВывода.ПараметрыФункциональныхОпций);
//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(
МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки,
ПараметрыВывода.ВозможностьИспользованияВнешнихФункций,
ПараметрыВывода.ОграничиватьПолучениеПолейПоСсылкамПоПравуПросмотр,
ПараметрыВывода.МенеджерВременныхТаблиц);
//Выводим результат
Если ВыводВКоллекциюЗначений Тогда
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(Результат);
Иначе
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
КонецЕсли;
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
КонецПроцедуры
// Процедура добавляет таблицу в менеджер временных таблиц
//
// Параметры:
// МенеджерВременныхТаблиц - МенеджерВременныхТаблиц - Менеджер, в который нужно добавить таблицу
// ИмяТаблицы - Строка - Имя временной таблицы
// ДанныеТаблицы - ТаблицаЗначений - Данные таблицы
//
Процедура ДобавитьТаблицуВМенеджерВременныхТаблиц(МенеджерВременныхТаблиц, ИмяТаблицы, ДанныеТаблицы) Экспорт
ИменаКолонок = Новый Массив;
Для Каждого Колонка Из ДанныеТаблицы.Колонки Цикл
ИменаКолонок.Добавить(Колонка.Имя);
КонецЦикла;
ИменаКолонок = СтрСоединить(ИменаКолонок, ",");
ТекстЗапроса = "ВЫБРАТЬ %1 ПОМЕСТИТЬ %2 ИЗ &ТЗ КАК ТЗ";
ТекстЗапроса = СтрШаблон(ТекстЗапроса, ИменаКолонок, ИмяТаблицы);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("ТЗ", ДанныеТаблицы);
Запрос.Выполнить();
КонецПроцедуры
Параметр данных при компоновке результата в модуле отчета
ОбработатьРезультатОбновления (БСП)
РезультатОбработкиПакета (БСП)