СброситьПользовательскиеНастройки (БСП)

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

Сбросить пользовательские настройки. Сбрасывает пользовательские настройки указанных отчетов.

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

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

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

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

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

СброситьНастройкиВариантаОтчета (БСП)

ПолучитьОбъектПоПользовательскомуИдентификатору (БСП)

НастройкиФормыОтчета (БСП)

ПриПолученииПрочихНастроекПользователя (БСП)

Добавить отбор в списке, в пользовательских настройках

Открыть отчет с пользовательскими настройками

ОткрытьФормуНастройкиСканирования (БСП)

ПриАктивизацииСтрокиНастройки (БСП)

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