При сохранении пользовательских настроек на сервере. Обновляет состав справочника ПользовательскиеНастройкиОтчетов после сохранения новой настройки.
// Обновляет состав справочника ПользовательскиеНастройкиОтчетов после сохранения новой настройки.
// Вызывается в одноименном обработчике формы отчета после выполнения кода формы.
//
// Параметры:
// Форма - ФормаКлиентскогоПриложения - форма отчета.
// Настройки - ОбъектМетаданных - передается "как есть" из процедуры ПриСохраненииПользовательскихНастроекНаСервере.
//
Процедура ПриСохраненииПользовательскихНастроекНаСервере(Форма, Настройки) Экспорт
РеквизитыФормы = Новый Структура("КлючОбъекта, ВариантСсылка");
ЗаполнитьЗначенияСвойств(РеквизитыФормы, Форма);
Если Не ЗначениеЗаполнено(РеквизитыФормы.КлючОбъекта)
Или Не ЗначениеЗаполнено(РеквизитыФормы.ВариантСсылка) Тогда
ОтчетОбъект = Форма.РеквизитФормыВЗначение("Отчет");
ОтчетМетаданные = ОтчетОбъект.Метаданные();
Если Не ЗначениеЗаполнено(РеквизитыФормы.КлючОбъекта) Тогда
РеквизитыФормы.КлючОбъекта = ОтчетМетаданные.ПолноеИмя();
КонецЕсли;
Если Не ЗначениеЗаполнено(РеквизитыФормы.ВариантСсылка) Тогда
ОтчетИнформация = СформироватьИнформациюОбОтчетеПоПолномуИмени(РеквизитыФормы.КлючОбъекта);
Если НЕ ЗначениеЗаполнено(ОтчетИнформация.ТекстОшибки) Тогда
ОтчетСсылка = ОтчетИнформация.Отчет;
Иначе
ОтчетСсылка = РеквизитыФормы.КлючОбъекта;
КонецЕсли;
РеквизитыФормы.ВариантСсылка = ВариантОтчета(ОтчетСсылка, Форма.КлючТекущегоВарианта);
КонецЕсли;
КонецЕсли;
КлючНастроек = РеквизитыФормы.КлючОбъекта + "/" + Форма.КлючТекущегоВарианта;
СписокНастроек = ХранилищеПользовательскихНастроекОтчетов.ПолучитьСписок(КлючНастроек);
КоличествоНастроек = СписокНастроек.Количество();
ПользовательСсылка = Пользователи.АвторизованныйПользователь();
ТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| *
|ИЗ
| Справочник.ПользовательскиеНастройкиОтчетов КАК ПользовательскиеНастройкиОтчетов
|ГДЕ
| ПользовательскиеНастройкиОтчетов.Вариант = &ВариантСсылка
| И ПользовательскиеНастройкиОтчетов.Пользователь = &ПользовательСсылка
|
|УПОРЯДОЧИТЬ ПО
| ПользовательскиеНастройкиОтчетов.ПометкаУдаления";
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВариантСсылка", РеквизитыФормы.ВариантСсылка);
Запрос.УстановитьПараметр("ПользовательСсылка", ПользовательСсылка);
Запрос.Текст = ТекстЗапроса;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЭлементСписка = СписокНастроек.НайтиПоЗначению(Выборка.КлючПользовательскойНастройки);
ПометкаУдаления = (ЭлементСписка = Неопределено);
Если ПометкаУдаления <> Выборка.ПометкаУдаления Тогда
НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
НастройкаОбъект.УстановитьПометкуУдаления(ПометкаУдаления);
КонецЕсли;
Если ПометкаУдаления Тогда
Если КоличествоНастроек = 0 Тогда
Прервать;
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
Если Выборка.Наименование <> ЭлементСписка.Представление Тогда
НастройкаОбъект = Выборка.Ссылка.ПолучитьОбъект();
НастройкаОбъект.Наименование = ЭлементСписка.Представление;
// Блокировка не устанавливается, т.к. пользовательские настройки разрезаются по пользователям,
// поэтому конкурентной работы не ожидается.
НастройкаОбъект.Записать();
КонецЕсли;
СписокНастроек.Удалить(ЭлементСписка);
КоличествоНастроек = КоличествоНастроек - 1;
КонецЦикла;
Для Каждого ЭлементСписка Из СписокНастроек Цикл
НастройкаОбъект = Справочники.ПользовательскиеНастройкиОтчетов.СоздатьЭлемент();
НастройкаОбъект.Наименование = ЭлементСписка.Представление;
НастройкаОбъект.КлючПользовательскойНастройки = ЭлементСписка.Значение;
НастройкаОбъект.Вариант = РеквизитыФормы.ВариантСсылка;
НастройкаОбъект.Пользователь = ПользовательСсылка;
// Блокировка не устанавливается, т.к. пользовательские настройки разрезаются по пользователям,
// поэтому конкурентной работы не ожидается.
НастройкаОбъект.Записать();
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПриЗагрузкеПользовательскихНастроекНаСервере (БСП)
ПриЗагрузкеТипаВзаимодействийИзНастроек (БСП)
ПриСохраненииПрочихНастроекПользователя (БСП)
ПриНачалеСохраненияНастроекСинхронизации (БСП)
ЗагрузитьПользовательские (БСП)
КоличествоДоступныхНастроек (БСП)