Перенос пользовательских настроек между вариантами отчета на СКД

18.02.14

Разработка - Универсальные функции

При работе с вариантами отчета на СКД, по умолчанию пользовательские настройки для каждого варианта отчета заполняются отдельно.
Например, если есть параметр "Период", то заполнив его в одном варианте отчета, при переключении на другой вариант отчета - придется опять заполнять этот параметр.

При работе с вариантами отчета на СКД, по умолчанию пользовательские настройки для каждого варианта отчета заполняются отдельно.
Например, если есть параметр "Период", то заполнив его в одном варианте отчета, при переключении на другой вариант отчета - придется опять заполнять этот параметр.

Это не всегда удобно. Для более комфортной работы, я уже много лет использую описанный ниже механизм.

1. Добавляется (обновляется) общий модуль "МодульОтчетов" (сервер) с кодом:

//******************************************************************************************
// Передача параметров и отборов между вариантами
//******************************************************************************************

Функция ПолучитьПользовательскуюНастройкуОтбора(Отчет,ИмяПараметра)	
	
	Для каждого Отбор из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы цикл
		Если ТипЗнч(Отбор)<>Тип("ЭлементОтбораКомпоновкиДанных") тогда
			продолжить;
		КонецЕсли;	
		Если СокрЛП(Отбор.ЛевоеЗначение)<>ИмяПараметра тогда
			продолжить;
		КонецЕсли;	
		
		ОтборПольз = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Отбор.ИдентификаторПользовательскойНастройки);

		Возврат ОтборПольз;
	КонецЦикла;	
	
						   	
	Возврат неопределено;
КонецФункции

Функция НайтиИмяПараметраОтбора(ПоследниеНастройкиВарианта,ИдентификаторПользовательскойНастройки)
	
	Для каждого Элемент из ПоследниеНастройкиВарианта.Отбор.Элементы цикл 
		Если Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки тогда
			Возврат(СокрЛП(Элемент.ЛевоеЗначение));
		КонецЕсли;	
	КонецЦикла;	
	
	Возврат неопределено;
	
КонецФункции

Процедура ЗапихнутьВПользовательскиеНастройки(Отчет,ТекущиеНастройки,ПрошлыеНастройки,ПоследниеНастройкиВарианта)
	
	Если  ПрошлыеНастройки=неопределено тогда
		Возврат;
	КонецЕсли;	
	
	Для каждого ЭлементНастройки из ПрошлыеНастройки.Элементы цикл
		
		Если ТипЗнч(ЭлементНастройки)=Тип("ЗначениеПараметраНастроекКомпоновкиДанных") тогда
			Для каждого ЭлементТекущейНастройки из ТекущиеНастройки.Элементы цикл
				Если ТипЗнч(ЭлементТекущейНастройки)=Тип("ЗначениеПараметраНастроекКомпоновкиДанных") тогда
					
					Если СокрЛП(ЭлементНастройки.Параметр)=СокрЛП(ЭлементТекущейНастройки.Параметр) тогда
						ЭлементТекущейНастройки.Использование = ЭлементНастройки.Использование;
						ЭлементТекущейНастройки.Значение      = ЭлементНастройки.Значение;
					КонецЕсли;
					
				КонецЕсли;
			КонецЦикла;	
		КонецЕсли;	
		
		Если  ПоследниеНастройкиВарианта=неопределено тогда
			Возврат;
		КонецЕсли;	
		
		Если ТипЗнч(ЭлементНастройки)=Тип("ЭлементОтбораКомпоновкиДанных") тогда
			
			 ИмяПараметра  = НайтиИмяПараметраОтбора(ПоследниеНастройкиВарианта,ЭлементНастройки.ИдентификаторПользовательскойНастройки);
			 ПользовательскийОтбор = ПолучитьПользовательскуюНастройкуОтбора(Отчет,ИмяПараметра);
			 
			 Если ПользовательскийОтбор=неопределено тогда
				 продолжить;
			 КонецЕсли;	 
			 
			ПользовательскийОтбор.Использование  = ЭлементНастройки.Использование;
			ПользовательскийОтбор.ВидСравнения   = ЭлементНастройки.ВидСравнения;
			ПользовательскийОтбор.ПравоеЗначение = ЭлементНастройки.ПравоеЗначение;
			 
		КонецЕсли;	
		
	КонецЦикла;	
	
КонецПроцедуры

Процедура ДействияПриЗагрузкеПользовательскихНастроекНаСервере(Отчет,ИмяОтчета) Экспорт
	
	ПоследниеПользовательскиеНастройки = ХранилищеСистемныхНастроек.Загрузить("Отчет."+ИмяОтчета+"/ПоследниеПользовательскиеНастройки","");
	ПоследниеНастройкиВарианта         = ХранилищеСистемныхНастроек.Загрузить("Отчет."+ИмяОтчета+"","ПоследниеНастройкиВарианта");
	
	ЗапихнутьВПользовательскиеНастройки(Отчет,Отчет.КомпоновщикНастроек.ПользовательскиеНастройки,ПоследниеПользовательскиеНастройки,ПоследниеНастройкиВарианта);
	
КонецПроцедуры

Процедура ДействияПриСохраненииПользовательскихНастроекНаСервере(Отчет,ИмяОтчета,Настройки) Экспорт
	
	ХранилищеСистемныхНастроек.Сохранить("Отчет."+ИмяОтчета+"/ПоследниеПользовательскиеНастройки","",Настройки);
	ХранилищеСистемныхНастроек.Сохранить("Отчет."+ИмяОтчета+"","ПоследниеНастройкиВарианта",Отчет.КомпоновщикНастроек.Настройки);
	
КонецПроцедуры

Процедура ДействияПриЗагрузкеВариантаНаСервере(Отчет,ИмяОтчета,КлючТекущегоВарианта) Экспорт
	
	ПользовательскиеНастройкиТекущегоВарианта = ХранилищеСистемныхНастроек.Загрузить("Отчет."+ИмяОтчета+"/"+КлючТекущегоВарианта+"/ТекущиеПользовательскиеНастройки","");
	
	Если ПользовательскиеНастройкиТекущегоВарианта=неопределено тогда
		ПоследниеПользовательскиеНастройки = ХранилищеСистемныхНастроек.Загрузить("Отчет."+ИмяОтчета+"/ПоследниеПользовательскиеНастройки","");
		ПоследниеНастройкиВарианта         = ХранилищеСистемныхНастроек.Загрузить("Отчет."+ИмяОтчета+"","ПоследниеНастройкиВарианта");
		ЗапихнутьВПользовательскиеНастройки(Отчет,Отчет.КомпоновщикНастроек.ПользовательскиеНастройки,ПоследниеПользовательскиеНастройки,ПоследниеНастройкиВарианта);
	КонецЕсли;
	
КонецПроцедуры

//******************************************************************************************
//******************************************************************************************
//******************************************************************************************

2. У отчета создается форма Действия с формой отчета:

 а) добавляется параметр "Расшифровка" (булево)

 б) добавляется реквизит формы "ЗаменитьПользовательскиеНастройки" (булево)

в) прописываются процедуры "ПриЗагрузкеВариантаНаСервере","ПриСохраненииПользовательскихНастроекНаСервере","ПриЗагрузкеПользовательскихНастроекНаСервере". Их код представлен ниже.

&НаСервере
Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(Настройки)
	Если НЕ ЭтаФорма.Параметры.ЭтоРасшифровка тогда
		Если ЭтаФорма.ЗаменитьПользовательскиеНастройки тогда
			МодульОтчетов.ДействияПриЗагрузкеПользовательскихНастроекНаСервере(Отчет,РеквизитФормыВЗначение("Отчет").ЭтотОбъект.Метаданные().Имя);
			ЭтаФорма.ЗаменитьПользовательскиеНастройки = ложь;
		иначе  // иначе эти настройки не загрузятся при следующем изменеии варианта
			МодульОтчетов.ДействияПриСохраненииПользовательскихНастроекНаСервере(Отчет,РеквизитФормыВЗначение("Отчет").ЭтотОбъект.Метаданные().Имя,Настройки);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ПриСохраненииПользовательскихНастроекНаСервере(Настройки)
	МодульОтчетов.ДействияПриСохраненииПользовательскихНастроекНаСервере(Отчет,РеквизитФормыВЗначение("Отчет").ЭтотОбъект.Метаданные().Имя,Настройки);
КонецПроцедуры

&НаСервере
Процедура ПриЗагрузкеВариантаНаСервере(Настройки)
	Если НЕ ЭтаФорма.Параметры.ЭтоРасшифровка тогда
		МодульОтчетов.ДействияПриЗагрузкеВариантаНаСервере(Отчет,РеквизитФормыВЗначение("Отчет").ЭтотОбъект.Метаданные().Имя,ЭтаФорма.КлючТекущегоВарианта);
		ЭтаФорма.ЗаменитьПользовательскиеНастройки = истина;
	КонецЕсли;
КонецПроцедуры
 

После этих действий, пользовательские настройки отчета "переходят" из одного варианта в другой PS Представленный алгоритм работает только в случае, если у отчета не установлено свойство: "Хранилище вариантов" и "Хранилище настроек" (то есть используется системное).

 

перенос пользовательские настройки скд

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2682    1    John_d    8    

55

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4614    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3965    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8847    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2078    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16156    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. echo77 1868 20.02.14 20:37 Сейчас в теме
ЗапихнутьВПользовательскиеНастройки - это пять :-)
Я бы не стал из-за такой мелочи вносить изменения в общий модуль
2. allexx 39 07.05.14 15:53 Сейчас в теме
При выборе варианта на форме, в процедуре ПриЗагрузкеВариантаНаСервере вылазит ошибка:
"Поле объекта не обнаружено (ЭтоРасшифровка)".
При этом при открытии отчета эта процедура тоже вызывается и там ошибки не возникает.

Сам разобрался, надо поставить галку "Ключевой параметр"
3. allexx 39 07.05.14 17:44 Сейчас в теме
Не совсем понял, в каком случае в процедуре ПриЗагрузкеПользовательскихНастроекНаСервере выполнится это самое "// иначе эти настройки не загрузятся при следующем изменеии варианта".
4. Светлый ум 406 29.01.16 09:03 Сейчас в теме
Молодцом : спасибо +1
serg_gres; +1 Ответить
5. newborn 04.03.16 17:53 Сейчас в теме
Спасибо. Может быть эта публикация не очень новая, но она мне помогла.
serg_gres; +1 Ответить
6. emoe 19.03.19 05:54 Сейчас в теме
При смене варианта можно использовать конструкцию:
// 1. сохраняем текущие настройки варианта отчета
ПредыдущиеНастройки = КомпоновщикНастроек.Настройки;

// 2. загружаем новый вариант отчета
КомпоновщикНастроек.ЗагрузитьНастройки(Настройка.Настройки);

// 3. оставляем старые параметры при изменении варианта отчета
ТекущиеНастройки = КомпоновщикНастроек.Настройки;
Для Каждого текЭлемент Из ПредыдущиеНастройки.ПараметрыДанных.Элементы Цикл
текПараметр = ТекущиеНастройки.ПараметрыДанных.Элементы.Найти(текЭлемент.Параметр);
Если НЕ текПараметр = Неопределено Тогда
ЗаполнитьЗначенияСвойств(текПараметр, текЭлемент);
КонецЕсли;
КонецЦикла;

// 4. оставляем старый отбор
текОтбор = КомпоновщикНастроек.Настройки.Отбор.Элементы;
текОтбор.Очистить();

Для Каждого ЭлементОтбора Из ПредыдущиеНастройки.Отбор.Элементы Цикл
нЭлемент = текОтбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(нЭлемент, ЭлементОтбора);
КонецЦикла;
И все
user712426; BoBaH; slax; testnv0; via; Риф; +6 Ответить
Оставьте свое сообщение