ПеренестиПользовательскиеИзСтандартногоХранилища (БСП)

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

Перенести пользовательские из стандартного хранилища. Переносит пользовательские варианты из стандартного хранилища вариантов в хранилище подсистемы.

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

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

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

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

ТипыСтандартныхХранилищНастроек (БСП)

ПеренестиПользовательскиеМакеты (БСП)

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

УдалитьПользовательскийВариантОтчета (БСП)

ПриУдаленииПользовательскихВариантовОтчета (БСП)

ОшибкаФайлНеНайденВХранилищеФайлов (БСП)

ПеренестиВсеФайлыВТома (БСП)

Перенести отбор СКД

Сохранить/Прочитать настройки СКД для обработок и прочих модулей

TurboConf ИР адаптер 1.82