gifts2017

Сохранение части настроек СКД (структуры) в файл

Опубликовал Иван Титов (Ibrogim) в раздел Программирование - Практика программирования

Это микростатья про частичное сохранение/восстановление настроек СКД в файл.

Понадобилось сохранять между сеансами настройки структуры СКД и отборы. Такое может понадобится если, например, в каждом экземпляре отчёта у вас разные отборы и параметры, но хочется иметь возможность сохранять группировки.

В моём случае это был подбор товаров в документ. Параметры заполнялись автоматом из документа, но структуру и отбор пользователь должен был иметь возможность менять, сохранять и загружать.

Прочитав в справке, что ГруппировкаКомпоновкиДанных может быть сериализован в/из XDTO. я обрадовался, но ненадолго, т.к. загрузить отдельно настройки группировок невозможно (если для настройек есть метод ЗагрузитьНастройки() то для частей настроек таких методов нет, а как было бы удобно ЗагрузитьНастройкиГруппировок() например )

Осталось два варианта

1) Прочитать из XDTO группировки и отборы, перебрать их и создать

Тут нет ничего сложного. делается это примерно так

КоллекцияСтруктуры=Настройки.Структура;
ГруппировкаКомпоновкиДанных=КоллекцияСтруктуры.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
ПоляГруппировки=ГруппировкаКомпоновкиДанных.ПоляГруппировки;
КоллекцияПолей=ПоляГруппировки.Элементы;
ПолеГруппировки=КоллекцияПолей.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Поле=Новый ПолеКомпоновкиДанных("Номенклатура");
ПолеГруппировки.ТипГруппировки=ТипГруппировкиКомпоновкиДанных.Иерархия;

и если бы мне нужно было сохранять только группировки или только отборы, то я бы так и поступил.

Но раз мне по сути нужно оставить "как есть" только параметры, а загружать "всё остальное"

то пришла идея:

2) Сохранять все настройки, загружать все настройки и подменять в них параметры.

&НаКлиенте
Процедура СохранитьНастройкиВФайл(Команда)
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	ДиалогВыбораФайла.Заголовок  = "Сохранить в файл (Относительный путь)";
	ДиалогВыбораФайла.Фильтр ="Файл настроек(*.xml)|*.xml";
	ДиалогВыбораФайла.ПредварительныйПросмотр    = Ложь;
	Если ДиалогВыбораФайла.Выбрать() Тогда
		ФайлНастроек=ДиалогВыбораФайла.ПолноеИмяФайла;
	Иначе
		Возврат;
	КонецЕсли;
	Текстxml=ПолучитьТекстXML( Объект.КомпоновщикНастроек.настройки);
	Док=Новый ТекстовыйДокумент;
	Док.УстановитьТекст(Текстxml); 
	Док.Записать(ФайлНастроек); 
КонецПроцедуры

&НаКлиенте
Процедура ВосстановитьНастройкиИзФайла(Команда)
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогВыбораФайла.Заголовок  = "Выберите Файл";
	ДиалогВыбораФайла.Фильтр ="Файл настроек(*.xml)|*.xml";
	ДиалогВыбораФайла.ПредварительныйПросмотр    = Ложь;
	Если ДиалогВыбораФайла.Выбрать() Тогда
		ФайлНастроек=ДиалогВыбораФайла.ПолноеИмяФайла;
	Иначе
		Возврат;
	КонецЕсли;
	Док=Новый ТекстовыйДокумент;
	Док.Прочитать(ФайлНастроек); 
	Текстxml=Док.ПолучитьТекст();
	ПолучитьНастройкуИзXML(Текстxml,Объект.КомпоновщикНастроек.настройки);
КонецПроцедуры

&НаСервере
Функция ПолучитьТекстXML (Знач Настройки) Экспорт
	Текст = "";
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Настройки, "settingsComposition", "http://v8.1c.ru/8.1/data-composition-system/settings");
	Текст = ЗаписьXML.Закрыть();
	Возврат Текст;
КонецФункции
&НаСервере
Процедура ПолучитьНастройкуИзXML (ТекстXML,Знач Настройки) Экспорт
	ЧтениеXML = Новый ЧтениеXML;
	ЧтениеXML.УстановитьСтроку(ТекстXML);
	Настр=СериализаторXDTO.ПрочитатьXML(ЧтениеXML,Тип("НастройкиКомпоновкиДанных"));
	Для Каждого ЭлементСтруктуры Из Настр.ПараметрыДанных.Элементы Цикл
		ЭлНастройки=Настройки.ПараметрыДанных.Элементы.Найти(ЭлементСтруктуры.Параметр);
		Если ЭлНастройки=Неопределено Тогда
			Сообщить("Не верные параметры настроек");
			Продолжить;
		КонецЕсли;
		ЭлементСтруктуры.Значение= ЭлНастройки.Значение;
		ЭлементСтруктуры.Использование=ЭлНастройки.Использование;
	КонецЦикла;
	Объект.КомпоновщикНастроек.ЗагрузитьНастройки(Настр);	
КонецПроцедуры

 

P.S. Я буду рад, если мне подскажут менее "велосипедное решение"


Прикрепляю файл с примером сохранения настроек. Внешняя обработка подключается как обработка заполнения к заказу покупателя в УТ11, имеет простейшую схему СКД. При вызове заполняются параметры, на форме есть кнопки сохранения и восстановления всего кроме параметров.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
СохраненияСтруктуры.epf
.epf 14,79Kb
25.08.15
5
.epf 14,79Kb 5 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа