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

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

При сохранении пользовательских настроек на сервере. Обновляет состав справочника ПользовательскиеНастройкиОтчетов после сохранения новой настройки.

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

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

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

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

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

ПриЗагрузкеТипаВзаимодействийИзНастроек (БСП)

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

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

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

КоличествоДоступныхНастроек (БСП)

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

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

СохраненныеНастройкиОтображения (БСП)

TurboConf - расширение Конфигуратора 1С