ЗагрузитьПользовательские (БСП)

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

Загрузить пользовательские. Загружает в хранилище подсистемы варианты отчетов, предварительно сохраненные

// Загружает в хранилище подсистемы варианты отчетов, предварительно сохраненные
// из системного хранилища вариантов в хранилище общих настроек.
// Используется для загрузки вариантов отчетов при полном или частичном внедрении.
// При полном внедрении может вызваться из обработки "ПереносВариантовОтчетов".
// Рекомендуется использовать в обработчиках обновления на конкретную версию.
//
// Параметры:
//  ПользовательскиеВарианты - ТаблицаЗначений - необязательный. Используется в служебных сценариях.
//       * Отчет - Строка - полное имя отчета в формате "Отчет.<ИмяОтчета>".
//       * Вариант - Строка - имя варианта отчета.
//       * Автор - Строка - имя пользователя.
//       * Настройка - ХранилищеЗначения - пользовательскиеНастройкиКомпоновкиДанных.
//       * ПредставлениеОтчета - Строка - представление отчета.
//       * ПредставлениеВарианта - Строка - представление варианта.
//       * ИдентификаторАвтора - УникальныйИдентификатор - идентификатор пользователя.
//
Процедура ЗагрузитьПользовательские(ПользовательскиеВарианты = Неопределено) Экспорт
	Если ПользовательскиеВарианты = Неопределено Тогда
		ПользовательскиеВарианты = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
			"ПереносВариантовОтчетов", "ПользовательскиеВарианты", , , "");
	КонецЕсли;
	
	Если ТипЗнч(ПользовательскиеВарианты) <> Тип("ТаблицаЗначений")
		Или ПользовательскиеВарианты.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;
	
	ПредставлениеПроцедуры = НСтр("ru = 'Завершить конвертацию вариантов отчетов'");
	ЗаписатьВЖурналЗапускПроцедуры(ПредставлениеПроцедуры);
	
	// Замена имен колонок под структуру справочника.
	ПользовательскиеВарианты.Колонки.Отчет.Имя = "ОтчетПолноеИмя";
	ПользовательскиеВарианты.Колонки.Вариант.Имя = "КлючВарианта";
	ПользовательскиеВарианты.Колонки.ПредставлениеВарианта.Имя = "Наименование";
	
	// Преобразование имен отчетов в ссылки справочника ИОМ.
	ПользовательскиеВарианты.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип);
	ПользовательскиеВарианты.Колонки.Добавить("Определен", Новый ОписаниеТипов("Булево"));
	ПользовательскиеВарианты.Колонки.Добавить("ТипОтчета", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.ТипОтчета.Тип);
	Для Каждого ОписаниеВарианта Из ПользовательскиеВарианты Цикл
		ИнформацияОбОтчете = СформироватьИнформациюОбОтчетеПоПолномуИмени(ОписаниеВарианта.ОтчетПолноеИмя);
		Если ТипЗнч(ИнформацияОбОтчете.ТекстОшибки) = Тип("Строка") Тогда
			ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ИнформацияОбОтчете.ТекстОшибки);
			Продолжить;
		КонецЕсли;
		
		ОписаниеВарианта.Определен = Истина;
		ЗаполнитьЗначенияСвойств(ОписаниеВарианта, ИнформацияОбОтчете, "Отчет, ТипОтчета");
	КонецЦикла;
	ПользовательскиеВарианты.Сортировать("ОтчетПолноеИмя Возр, КлючВарианта Возр");
	
	ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах();
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	ПользовательскиеВарианты.Наименование,
	|	ПользовательскиеВарианты.ПредставлениеОтчета,
	|	ПользовательскиеВарианты.Отчет,
	|	ПользовательскиеВарианты.ОтчетПолноеИмя,
	|	ПользовательскиеВарианты.ТипОтчета,
	|	ПользовательскиеВарианты.КлючВарианта,
	|	ПользовательскиеВарианты.Автор КАК ПредставлениеАвтора,
	|	ПользовательскиеВарианты.ИдентификаторАвтора,
	|	ПользовательскиеВарианты.Настройка КАК Настройки
	|ПОМЕСТИТЬ ПользовательскиеВарианты
	|ИЗ
	|	&ПользовательскиеВарианты КАК ПользовательскиеВарианты
	|ГДЕ
	|	ПользовательскиеВарианты.Определен
	|;
	|
	|ВЫБРАТЬ
	|	ПользовательскиеВарианты.Наименование,
	|	ПользовательскиеВарианты.ПредставлениеОтчета,
	|	ПользовательскиеВарианты.Отчет,
	|	ПользовательскиеВарианты.ОтчетПолноеИмя,
	|	ПользовательскиеВарианты.ТипОтчета,
	|	ПользовательскиеВарианты.КлючВарианта,
	|	ПользовательскиеВарианты.Настройки,
	|	Варианты.Ссылка,
	|	ПользовательскиеВарианты.ПредставлениеАвтора,
	|	Пользователи.Ссылка КАК Автор
	|ИЗ
	|	ПользовательскиеВарианты КАК ПользовательскиеВарианты
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК Варианты
	|		ПО Варианты.Отчет = ПользовательскиеВарианты.Отчет
	|		И Варианты.КлючВарианта = ПользовательскиеВарианты.КлючВарианта
	|		И Варианты.ТипОтчета = ПользовательскиеВарианты.ТипОтчета
	|	ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
	|		ПО Пользователи.ИдентификаторПользователяИБ = ПользовательскиеВарианты.ИдентификаторАвтора
	|		И НЕ Пользователи.ПометкаУдаления
	|");
	Запрос.УстановитьПараметр("ПользовательскиеВарианты", ПользовательскиеВарианты);
	
	ОписаниеВарианта = Запрос.Выполнить().Выбрать();
	Пока ОписаниеВарианта.Следующий() Цикл 
		Если ЗначениеЗаполнено(ОписаниеВарианта.Ссылка) Тогда
			Продолжить;
		КонецЕсли;
		
		ХранилищеВарианта = Справочники.ВариантыОтчетов.СоздатьЭлемент();
		ЗаполнитьЗначенияСвойств(ХранилищеВарианта, ОписаниеВарианта, "Наименование, Отчет, ТипОтчета, КлючВарианта, Автор");
		
		ХранилищеВарианта.Пользовательский = Истина;
		ХранилищеВарианта.ТолькоДляАвтора = Истина;
		
		Если ТипЗнч(ОписаниеВарианта.Настройки) = Тип("ХранилищеЗначения") Тогда
			ХранилищеВарианта.Настройки = ОписаниеВарианта.Настройки;
		Иначе
			ХранилищеВарианта.Настройки = Новый ХранилищеЗначения(ОписаниеВарианта.Настройки);
		КонецЕсли;
		
		Если Не ЗначениеЗаполнено(ОписаниеВарианта.Автор) Тогда 
			Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"),
				ОписаниеВарианта.Наименование,
				ОписаниеВарианта.ПредставлениеОтчета,
				ОписаниеВарианта.ПредставлениеАвтора);
			
			ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, Сообщение, ХранилищеВарианта.Ссылка);
		КонецЕсли;
		
		// Поскольку переносятся пользовательские варианты отчетов,
		// то настройки размещения можно взять только из метаданных отчета.
		НайденныеПодсистемы = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетПолноеИмя", ОписаниеВарианта.ОтчетПолноеИмя));
		Для Каждого ОписаниеПодсистемы Из НайденныеПодсистемы Цикл
			Подсистема = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОписаниеПодсистемы.ПодсистемаМетаданные);
			Если ТипЗнч(Подсистема) = Тип("Строка") Тогда
				Продолжить;
			КонецЕсли;
			Раздел = ХранилищеВарианта.Размещение.Добавить();
			Раздел.Использование = Истина;
			Раздел.Подсистема = Подсистема;
		КонецЦикла;
		
		// Варианты отчетов создаются, поэтому конкурентная работа с ними исключена.
		ХранилищеВарианта.Записать();
	КонецЦикла;
	
	ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ПереносВариантовОтчетов", "ТаблицаВариантов", "");
	
	ЗаписатьВЖурналЗавершениеПроцедуры(ПредставлениеПроцедуры);
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

ЗагрузитьНастройки (БСП)

Загрузить (БСП)

ЗагрузитьИзФайла (БСП)

ЗагрузитьСообщения (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз