Загрузка XML в конфигурации базы 1С 8.3
-

Загрузка XML в конфигурации базы 1С 8.3

0
17360
11.05.2023 Игорь Борисенко

Содержание:

1.      Обращение к XML-сообщению

2.      Десериализация XML-сообщения в системе программы 1С

3.      Последовательное ЧтениеXML

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-сообщении передавать только сами данные, но и описание их структуры.


Специалист компании "Кодерлайн"

Игорь Борисенко


Обсудить статью в Telegram Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.