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