Сериализация объектов в XML
СКД. Программное чтение/запись СКД в/из XML.
Наверняка, каждый начинающий программист сталкивался с заданием выгрузки объектов в XML, но из-за плохого знания механизмов платформы 1С, выполнял задание в лоб. Алгоритм выгрузки заключался в написании кода по записи значения каждого реквизита в XML-файл.
Наиболее простой способ выгрузки объектов в XML - воспользоваться глобальным методом ЗаписатьXML(), который предназначен для сериализации объектов/значений в формат XML.
Важно! Значения не всех типов могут быть записаны в формате XML данным методом. В XML могут быть записаны значения следующих типов: Неопределено, Null, Булево, Число, Строка, Дата, Тип, УникальныйИдентификатор, ДвоичныеДанные, ХранилищеЗначения, ОписаниеТипов, а также ссылки объектов данных и сами объекты данных, наборы записей регистров, менеджер значения константы. При попытке записи значения неподходящего типа будет вызвано исключение.
Так как не все объекты могут быть записаны в формат XML методом ЗаписатьXML(), то можно воспользоваться хитростью, которая основана на сериализации в XDTO.
Допустим, требуется записать в XML таблицу значений, но в синтакс-помощнике не написано что этот объект поддерживает сериализацию в XML, зато поддерживает сериализацию в XDTO. Алгоритм действий тогда такой: сериализуем таблицу значений в объект XDTO и с помощью метода ЗаписатьXML() глобального объекта ФабрикаXDTO записываем объект XDTO в формате XML.
Важно! Для типа записываемого значения должно быть преобразование в XDTO.
Наверняка, каждый начинающий программист сталкивался с заданием выгрузки объектов в 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.
Можно проще:
ОтветитьУдалитьЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Параметр);
Возврат ЗаписьXML.Закрыть();