Имя: Пароль:
1C
 
v8: СКД: Сериализация настроек по отдельности.
0 sima
 
09.12.09
19:17
Предположим мне надо сохранить только настройки отборов. Вуаля:

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("D:\тест.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, КомпоновщикНастроек.Настройки.Отбор);
ЗаписьXML.Закрыть();

//Теперь читаем
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("D:\тест.xml");
Отбор = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);

А как теперь эту настройку запулить в СКД?
1 sima
 
09.12.09
19:38
чувствуется без перебора отдельных свойств никак не обойтись :( а жаль.
2 IronDemon
 
09.12.09
20:18
Можно. Ищи.
3 IronDemon
 
09.12.09
20:19
4 sima
 
09.12.09
20:27
(3) Да, я это прочитал. Меня интересовала именно отдельная загрузка свойств отбора, а не всей настройки.
Сделал вот так:

Процедура Кнопка2Нажатие(Элемент)
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("D:\test.xml");
   Отбор = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
   КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
   Для каждого ЭлементОтбора из Отбор.Элементы Цикл
       ЗагрузитьНастройки(ЭлементОтбора);
   КонецЦикла;
   
   НовыйИсточник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);    
   КомпоновщикНастроек.Инициализировать(НовыйИсточник);
КонецПроцедуры

Процедура ЗагрузитьНастройки(ЭлементОтбора)
       НЭлемент = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип(ЭлементОтбора));
       ЗаполнитьЗначенияСвойств(НЭлемент,ЭлементОтбора);
       Если Тип(ЭлементОтбора)= Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
           Для каждого ЭлементОтбораГруппы из ЭлементОтбора.Элементы цикл
               ЗагрузитьНастройки(ЭлементОтбораГруппы);
           КонецЦикла;
       КонецЕсли;
КонецПроцедуры
5 sima
 
09.12.09
22:09
Пардон, так как показал в (4), не учитывало вложенных групп. Правильный вариант, с указанием метода сохраниения настройки:


Процедура КнопкаСохранитьОтбор(Элемент)
   ЗаписьXML = Новый ЗаписьXML;
   ЗаписьXML.ОткрытьФайл("D:\text.xml");
   ЗаписьXML.ЗаписатьОбъявлениеXML();
   СериализаторXDTO.ЗаписатьXML(ЗаписьXML, КомпоновщикНастроек.Настройки.Отбор);
   ЗаписьXML.Закрыть();
КонецПроцедуры

Процедура КнопкаОткрытьОтбор(Элемент)
   ЧтениеXML = Новый ЧтениеXML;
   ЧтениеXML.ОткрытьФайл("D:\text.xml");
   Отбор = СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
   КомпоновщикНастроек.Настройки.Отбор.Элементы.Очистить();
   Для каждого ЭлементОтбора из Отбор.Элементы Цикл
       ЗагрузитьНастройкиОтбора(ЭлементОтбора);
   КонецЦикла;
   
   НовыйИсточник = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных);    
   КомпоновщикНастроек.Инициализировать(НовыйИсточник);
КонецПроцедуры

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