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