Сериализация объектов в XML

СКД. Программное чтение/запись СКД в/из XML.

Наверняка, каждый начинающий программист сталкивался с заданием выгрузки объектов в XML, но из-за плохого знания механизмов платформы 1С, выполнял задание в лоб. Алгоритм выгрузки заключался в написании кода по записи значения каждого реквизита в XML-файл.

Наиболее простой способ выгрузки объектов в XML - воспользоваться глобальным методом ЗаписатьXML(), который предназначен для сериализации объектов/значений в формат XML.

Функция ПолучитьXML(Значение)
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписатьXML(ЗаписьXML, Значение);
Возврат ЗаписьXML.Закрыть();
КонецФункции


Важно! Значения не всех типов могут быть записаны в формате XML данным методом. В XML могут быть записаны значения следующих типов: Неопределено, Null, Булево, Число, Строка, Дата, Тип, УникальныйИдентификатор, ДвоичныеДанные, ХранилищеЗначения, ОписаниеТипов, а также ссылки объектов данных и сами объекты данных, наборы записей регистров, менеджер значения константы. При попытке записи значения неподходящего типа будет вызвано исключение.

Так как не все объекты могут быть записаны в формат XML методом ЗаписатьXML(), то можно воспользоваться хитростью, которая основана на сериализации в XDTO.

Допустим, требуется записать в XML таблицу значений, но в синтакс-помощнике не написано что этот объект поддерживает сериализацию в XML, зато поддерживает сериализацию в XDTO. Алгоритм действий тогда такой: сериализуем таблицу значений в объект XDTO и с помощью метода ЗаписатьXML() глобального объекта ФабрикаXDTO записываем объект XDTO в формате XML.

Функция ПолучитьXML(Значение)
ОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(Значение);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO);
Возврат ЗаписьXML.Закрыть();
КонецФункции


Важно! Для типа записываемого значения должно быть преобразование в XDTO.

Комментарии

  1. Можно проще:
    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.УстановитьСтроку();
    СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Параметр);
    Возврат ЗаписьXML.Закрыть();

    ОтветитьУдалить

Отправить комментарий