Подключить схему. Устанавливает отчету переданную схему и на основании нее, инициализирует компоновщик настроек.
// Устанавливает отчету переданную схему и на основании нее, инициализирует компоновщик настроек.
// Если контекстом является форма отчета (настроек), то обновляет основной реквизит формы - Отчет.
// В результате, контекст объекта и формы отчета синхронизируются.
// Вызывается например, из обработчика ПередЗагрузкойНастроекВКомпоновщик объекта универсального отчета
// для установки схемы, программно сформированной на основании другого объекта метаданных.
//
// Параметры:
// Отчет - ОтчетОбъект, ВнешнийОтчетОбъект - отчет, которому необходимо установить схему.
// Контекст - ФормаКлиентскогоПриложения - форма отчета или форма настройки отчета.
// Передается "как есть" из одноименного параметра события
// ПередЗагрузкойНастроекВКомпоновщик.
// - Структура - параметры отчета: см. ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки.
// Схема - СхемаКомпоновкиДанных - схема, которую необходимо установить отчету.
// КлючСхемы - Строка - идентификатор новой схемы, который будет записан в дополнительные свойства
// пользовательских настроек.
//
// Пример:
// // В обработчике объекта отчета ПередЗагрузкойНастроекВКомпоновщик компоновщик настроек
// // инициализируется на основании схемы из общих макетов:
// Если КлючСхемы <> "1" Тогда
// КлючСхемы = "1";
// Схема = ПолучитьОбщийМакет("МояОбщаяСхемаКомпоновки");
// ОтчетыСервер.ПодключитьСхему(ЭтотОбъект, Контекст, Схема, КлючСхемы);
// КонецЕсли;
//
Процедура ПодключитьСхему(Отчет, Контекст, Схема, КлючСхемы) Экспорт
СобытиеФормы = (ТипЗнч(Контекст) = Тип("ФормаКлиентскогоПриложения"));
Отчет.СхемаКомпоновкиДанных = Схема;
Если СобытиеФормы Тогда
НастройкиОтчета = Контекст.НастройкиОтчета;
АдресСхемы = НастройкиОтчета.АдресСхемы;
НастройкиОтчета.Вставить("СхемаМодифицирована", Истина);
Иначе
АдресСхемыЗаполнен = (ТипЗнч(Контекст.АдресСхемы) = Тип("Строка") И ЭтоАдресВременногоХранилища(Контекст.АдресСхемы));
Если Не АдресСхемыЗаполнен Тогда
ИдентификаторФормы = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Контекст, "ИдентификаторФормы");
Если ТипЗнч(ИдентификаторФормы) = Тип("УникальныйИдентификатор") Тогда
АдресСхемыЗаполнен = Истина;
Контекст.АдресСхемы = ПоместитьВоВременноеХранилище(Схема, ИдентификаторФормы);
КонецЕсли;
КонецЕсли;
Если АдресСхемыЗаполнен Тогда
АдресСхемы = Контекст.АдресСхемы;
Иначе
АдресСхемы = ПоместитьВоВременноеХранилище(Схема);
КонецЕсли;
Контекст.СхемаМодифицирована = Истина;
КонецЕсли;
ПоместитьВоВременноеХранилище(Схема, АдресСхемы);
ВариантОтчета = ?(СобытиеФормы, НастройкиОтчета.ВариантСсылка, Неопределено);
ИнициализироватьКомпоновщикНастроек(Отчет.КомпоновщикНастроек, АдресСхемы, Отчет, ВариантОтчета);
Если СобытиеФормы Тогда
ЗначениеВДанныеФормы(Отчет, Контекст.Отчет);
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)