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