Перейти к основному содержимому

XML и XDTO в интеграции 1С

Разработчику

Зачем XML и XDTO

XML — исторически главный формат обмена в 1С: планы обмена, EnterpriseData, отраслевые схемы, SOAP. XDTO (XML Data Transfer Objects) — объектная модель поверх XSD: типы, фабрика, сериализация значений платформы.

ЗадачаИнструмент
Обмен между конфигурациямиXDTO + план обмена (137)
Произвольная схема контрагентаФабрикаXDTO по НаборСхемXML
Типы Web-сервисаПакеты XDTO (132)
Сохранить ссылку/объект в файлСериализаторXDTO

Для новых REST-интеграций чаще JSON; XML остаётся в обмене с гос. системами и типовыми форматами 1С.


Фабрика и сериализатор

  • ФабрикаXDTO — глобальная (все типы конфигурации) или созданная из набора XSD.
  • СериализаторXDTO — запись и чтение значений БД в XML.

Сериализация на сервере, файл — во временном хранилище, клиент скачивает через НачатьПолучениеФайлаССервера:

&НаСервереБезКонтекста
Функция СериализацияВXMLНаСервере(Ссылка)
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
ИмяФайла = ПолучитьИмяВременногоФайла("xml");
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла);
Сериализатор.ЗаписатьXML(Запись, Ссылка, НазначениеТипаXML.Явное);
Запись.Закрыть();
Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
КонецФункции

Обратная операция — ПрочитатьXML через ЧтениеXML.


Клиент ↔ сервер: файлы

На тонком клиенте прямой доступ к диску сервера недоступен. Схема:

  1. Клиент — НачатьПомещениеФайлаНаСервер → адрес во временном хранилище.
  2. Сервер — читает ДвоичныеДанные, парсит XML, пишет результат.
  3. Клиент — НачатьПолучениеФайлаССервера для выгрузки.

Тот же паттерн для ZIP: на сервере ЧтениеZipФайла, извлечение во временный каталог, каждый файл — ПоместитьВоВременноеХранилище, массив адресов возвращается клиенту.


ZIP в обмене

Архивы сжимают пакеты обмена и наборы вложений. Типовой цикл на сервере:

Поток = ДвоичныеДанные.ОткрытьПотокДляЧтения();
ЧтениеАрхива = Новый ЧтениеZipФайла(Поток, , Пароль);
Пока ЧтениеАрхива.Следующий() Цикл
Элемент = ЧтениеАрхива.ТекущийЭлемент;
// Извлечь(), ПоместитьВоВременноеХранилище ...
КонецЦикла;
ЧтениеАрхива.Закрыть();

Пароль архива запрашивают на клиенте до помещения файла на сервер.


Связь с другими механизмами


Связанные материалы


Проверка себя

  • Зачем XML с сервера передают через временное хранилище?
  • Чем ФабрикаXDTO отличается от СериализаторXDTO?
  • Когда выберете JSON вместо XDTO?

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").