ПодключитьОтчетИЗагрузитьНастройки (БСП)

Автор: 1С
ОбщийМодуль.ВариантыОтчетов
БСП

Подключить отчет загрузить настройки. Получает объект отчета по ссылке на вариант отчета.

// Получает объект отчета по ссылке на вариант отчета.
//
// Параметры:
//   Параметры - Структура - Параметры подключения и формирования отчета.
//       * СсылкаВарианта - СправочникСсылка.ВариантыОтчетов - Ссылка варианта отчета.
//       * СсылкаОтчета   - Произвольный - Ссылка отчета.
//       * КлючВарианта   - Строка - Имя предопределенного или идентификатор пользовательского варианта отчета.
//       * ИдентификаторФормы - Неопределено, УникальныйИдентификатор - Идентификатор формы, из которой подключается отчет.
//
// Возвращаемое значение:
//   Структура - Параметры отчета, в том числе Объект отчета.
//       * СсылкаОтчета - Произвольный     - Ссылка отчета.
//       * ПолноеИмя    - Строка           - Полное имя отчета.
//       * Метаданные   - ОбъектМетаданных - Метаданные отчета.
//       * Объект       - ОтчетОбъект.<Имя отчета>, ВнешнийОтчет - Объект отчета.
//           ** КомпоновщикНастроек - КомпоновщикНастроекКомпоновкиДанных - Настройки отчета.
//           ** СхемаКомпоновкиДанных - СхемаКомпоновкиДанных - Схема отчета.
//       * КлючВарианта - Строка           - Имя предопределенного или идентификатор пользовательского варианта отчета.
//       * АдресСхемы   - Строка           - Адрес временного хранилища, по которому размещена схема отчета.
//       * Успех        - Булево           - Истина, если удалось подключить отчет.
//       * ТекстОшибки  - Строка           - Текст ошибки.
//
// Места использования:
//   РассылкаОтчетов.ИнициализироватьОтчет().
//
Функция ПодключитьОтчетИЗагрузитьНастройки(Параметры) Экспорт
	Результат = Новый Структура("СсылкаВарианта, СсылкаОтчета, КлючВарианта, НастройкиФормы,
		|Объект, Метаданные, ПолноеИмя,
		|СхемаКД, АдресСхемы, СхемаМодифицирована, НастройкиКД, ПользовательскиеНастройкиКД,
		|ТекстОшибки, Успех");
	ЗаполнитьЗначенияСвойств(Результат, Параметры);
	Результат.Успех = Ложь;
	Результат.СхемаМодифицирована = Ложь;
	
	// Поддержка возможности прямого выбора ссылок дополнительных отчетов в рассылках отчетов.
	Если ТипЗнч(Результат.НастройкиКД) <> Тип("НастройкиКомпоновкиДанных")
		И Результат.КлючВарианта = Неопределено
		И Результат.Объект = Неопределено
		И ТипЗнч(Результат.СсылкаВарианта) = ТипСсылкиДополнительногоОтчета() Тогда
		// Автоопределение ключа и ссылки варианта если передана только ссылка доп. отчета.
		Результат.СсылкаОтчета = Результат.СсылкаВарианта;
		Результат.СсылкаВарианта = Неопределено;
		ПодключениеОтчета = ПодключитьОтчетОбъект(Результат.СсылкаОтчета, Истина);
		Если Не ПодключениеОтчета.Успех Тогда
			Результат.ТекстОшибки = ПодключениеОтчета.ТекстОшибки;
			Возврат Результат;
		КонецЕсли;
		ЗаполнитьЗначенияСвойств(Результат, ПодключениеОтчета, "Объект, Метаданные, ПолноеИмя");
		ПодключениеОтчета.Очистить();
		Если Результат.Объект.СхемаКомпоновкиДанных = Неопределено Тогда
			Результат.Успех = Истина;
			Возврат Результат;
		КонецЕсли;
		ВариантНастроекКД = Результат.Объект.СхемаКомпоновкиДанных.ВариантыНастроек.Получить(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
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ОтчетПодключенКХранилищу (БСП)

ОтчетПодключенКОсновнойФорме (БСП)

ОтчетПодключенКФормеНастроек (БСП)

ЗагрузитьНастройкиПриИзмененииПараметров (БСП)

ПодключитьВнешнююОбработку (БСП)

НастройкиОтчетаПоУмолчанию (БСП)

ЗагрузитьДополнительныеОтчетыИОбработкиИзМетаданных (БСП)

ПриОпределенииТипаИСсылкиЕслиОтчетДополнительный (БСП)

TurboConf - расширение Конфигуратора 1С