Сохранить/Прочитать настройки СКД для обработок и прочих модулей

СергейТ 104 4 9

Если не используются стандартные механизмы сохранения СКД отчетами с использованием модулей общего назначения. А так же процедура для заполнения реквизитов формы по переданной настройке компоновки данных (например, восстановленных из хранилища). _ничего сложного, но вспоминать или искать каждый раз, когда это иногда требуется, это сложно_

Процедура СохранитьНастройкиСКД(КомпоновщикНастроекНастройки)
	
	ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(КлючОбъектаСтрокой(), КлючНастроекСтрокой(), КомпоновщикНастроекНастройки);
	
КонецПроцедуры

Функция ВосстановитьНастройкиСКД()
	
	КомпоновщикНастроекНастройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(КлючОбъектаСтрокой(), КлючНастроекСтрокой());
	
	Возврат КомпоновщикНастроекНастройки;
	
КонецФункции

// Процедура - Заполнить реквизиты формы из настроек компановщика
//  Заполняет одноименные реквизиты формы из переданной настройки компоновщика (можно дополнить заполнение по структуре или соответствию)
//
// Параметры:
//  КомпоновщикНастроекНастройки - НастройкиКомпоновкиДанных - Настройка компоновки данных (например, сохраненная ранее и восстановленная/прочитанная)
//  по которой требуется заполнить реквизиты формы обработки
//
Процедура ЗаполнитьРеквизитыФормыИзНастроекКомпановщика(КомпоновщикНастроекНастройки, НеЗаполняемыеПоля = "")
	
	НеЗаполняемыеПоля_ = Новый Массив;
	Если ТипЗнч(НеЗаполняемыеПоля) = Тип("Строка") Тогда
		НеЗаполняемыеПоля_ = СтрРазделить(НеЗаполняемыеПоля, ",");
	Иначе
		НеЗаполняемыеПоля_ = НеЗаполняемыеПоля;
	КонецЕсли;
	Для Н = 0 По НеЗаполняемыеПоля_.Количество() - 1 Цикл
		НеЗаполняемыеПоля_[Н] = СокрЛП(НеЗаполняемыеПоля_[Н])
	КонецЦикла;
	
	Если ТипЗнч(КомпоновщикНастроекНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда
		
		СтруктураПараметров = Новый Структура;
		
		Для Каждого ТекПараметр Из КомпоновщикНастроекНастройки.ПараметрыДанных.Элементы Цикл
			
			ИмяПараметра = Строка(ТекПараметр.Параметр);
			Если НеЗаполняемыеПоля_.Найти(ИмяПараметра) <> Неопределено Тогда Продолжить КонецЕсли;
			ЗначениеПараметра = ТекПараметр.Значение;
			
			СтруктураПараметров.Вставить(ИмяПараметра, ЗначениеПараметра);
			
		КонецЦикла;
		
		МассивРеквизитовФормы = ЭтаФорма.ПолучитьРеквизиты();
		ИменаРеквизитовФормы = Новый Массив;
		Для Каждого ТекРеквизит Из МассивРеквизитовФормы Цикл
			ИменаРеквизитовФормы.Добавить(ТекРеквизит.Имя);
		КонецЦикла;
		
		Для Каждого ТекПараметр Из СтруктураПараметров Цикл
			
			Если ИменаРеквизитовФормы.Найти(ТекПараметр.Ключ) <> Неопределено Тогда
				
				Если ТипЗнч(ТекПараметр.Значение) = Тип("СписокЗначений") Тогда
					
					ЭтаФорма[ТекПараметр.Ключ].ЗагрузитьЗначения(ТекПараметр.Значение.ВыгрузитьЗначения());
					Для Каждого ТекЗнч Из ЭтаФорма[ТекПараметр.Ключ] Цикл
						ТекЗнч.Пометка = Истина
					КонецЦикла;
					
				Иначе
					ЭтаФорма[ТекПараметр.Ключ] = ТекПараметр.Значение;
				КонецЕсли;
				
			КонецЕсли;
			
		КонецЦикла;
		
	Иначе
		// Можно добавить обработку структуры или соответствия, но пока не нужно
		Возврат
	КонецЕсли;
	
КонецПроцедуры
0

См. также

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

ТипНастройкиСтрокой (БСП)

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

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

ПриУдаленииПрочихНастроек (БСП)

СохранитьНастройкиОбновленияКонфигурации (БСП)

ПрочитатьНастройкиСкрытияСубъектов (БСП)

СохранитьОбщиеНастройкиПанели (БСП)

Модератору