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