Содержание:
2. Десериализация XML-сообщения в системе программы 1С
4. Чтение XML с использованием структуры, описанной в XDTO-пакете
1. Обращение к XML-сообщению
Здесь представлен материал для разработчиков процедур передачи данных через xml-сообщения. Информацию для пользователей по работе с готовыми обработками (такой, например, как "Выгрузка и загрузка данных XML") можно найти в документации по 1С.
Для чтения xml-содержимого язык 1С содержит объект «ЧтениеXML»:
ЧтениеXML = Новый ЧтениеXML();
Читаемый текст (ТекстXML) можно передать в объект ЧтениеXML тремя способами:
· Непосредственно
Удобно использовать, когда xml-текст уже сохранен в какую-то переменную «ТекстXML»; например, это ответ типовой 1с-процедуры, которая формирует его, читая данные из внутренних или внешних по отношению к базе 1С источников.
ЧтениеXML.УстановитьСтроку(ТекстXML);
· Через файл
ТекстXML предварительно сохраняется в файл «ИмяФайла», а затем читается методом «ОткрытьФайл()». Это может ответ http-сервиса, сохраненный в файл, или просто файл, полученный от внешней системы.
ЧтениеXML.ОткрытьФайл(ИмяФайла);
· Через поток
Используется, когда поток данных уже существует в памяти (например, как ответ http-сервиса) и нет желания плодить лишние файлы на диске. Удобен также при чтении больших файлов (биг-дата).
Предварительно нужно подготовить «ПотокФайл», используя объекты «ПотокВПамяти», «ФайловыйПоток».
ЧтениеXML.ОткрытьПоток(ПотокФайл);
2. Десериализация xml-сообщения в системе программы 1С
В системе конфигурирования 1С существует два основных подхода к работе с содержанием xml:
· Последовательная обработка xml-сообщения
· Использование предварительного описания структуры xml-сообщения (xdto)
Структуру xml-сообщения нужно знать в любом случае.
3. Последовательное ЧтениеXML
При последовательной обработке:
Обходим сообщение в цикле, используя метод Прочитать():
Пока ЧтениеXML.Прочитать() Цикл …
Определяем тип узла:
ЧтениеXML.ТипУзла,
и в зависимости от типа узла выполняем соответствующую обработку: читаем атрибуты в цикле, читаем текст и т.п.
Например, если в атрибутах данного узла передаются данные о контрагенте, скажем, ИНН (ЧтениеXML.Имя = inn), то сохраняем полученное значение в соответствующий реквизит контрагента в 1С:
Контрагент.ИНН = ЧтениеXML.Значение;
Способ пригоден для простых по структуре xml-сообщений. Усложнение структуры (разнообразие типов узлов и наборов атрибутов) приведет к потере наглядности из-за многочисленности циклов десериализации и потере скорости их обработки.
Метод, по сути, имеет только одно преимущество: нет надобности предварительно оформлять структуру сообщений в виде XDTO-пакета.
4. Чтение XML с использованием структуры, описанной в XDTO-пакете
С помощью xdto-пакета предварительно описывается структура xml-сообщения: виды узлов (типы xdto), наборы атрибутов, их типы и т.д.
Имя
Обращаясь к описанию пакета XDTO, можно получать объекты XDTO.
ТипОбъектовXDTO = ФабрикаXDTO(URLпакетаXDTO);
ОбъектыXDTO = ФабрикаXDTO.Прочитать(ЧтениеXML, ТипОбъектовXDTO);
в свойствах, которых содержатся переданные данные.
Преимуществом метода является то, что к свойствам объектов XDTO можно обращаться наглядно «через точку».
Для Каждого ОбъектXDTO Из ОбъектыXDTO Цикл …
Контрагент.ИНН = ОбъектXDTO.inn;
Или даже так:
ЗаполнитьЗначенияСвойств(Контрагент, ОбъектXDTO);
если имена свойств пакета XDTO и метаданных 1С совпадают.
В Заключение следует сказать, что возможны вариации двух описанных методов десериализации xml-сообщений. Например, последовательную обработку можно выполнять с предварительным созданием DOM-документа, а затем последовательно обработать его узлы. А xdto-пакет можно предварительно не создавать, а в xml-сообщении передавать только сами данные, но и описание их структуры.
Специалист компании "Кодерлайн"
Игорь Борисенко