XDTO в 1С

 

В этой статье попробую рассказать о механизме XDTO, рассказать постараюсь только суть — без воды.

XDTO (XML Data Transfer Objects) — это разработка фирмы 1С и ни в каком другом языке программирования эту аббревиатуру не встретишь.

Основное назначение этого механизма — обмен данными, как с другой конфигурацией 1С, так и со сторонними приложениями. Кроме этого XDTO используется для описания параметров и возвращаемых значений web-сервисов, а также для произвольной обработки данных.

Основная «полезность» механизма XDTO заключается в том, что он позволяет работать (чтение и запись) с XML-файлом как с объектом 1С — «через точку» и не думать при этом о тегах и атрибутах XML.

Реализован механизм XDTO при помощи объекта конфигурации «Пакет XDTO». Этот объект в действительности является обычной XML-схемой (XSD) т.е. описывает структуру какого-либо XML-документа.

Средствами 1С мы можем:

  • превратить XSD-файл в объект «пакет XDTO»;
  • добавить новый «пакет XDTO» и редактировать его так, как нам нужно;
  • превратить «пакет XDTO» в XSD-файл.
Действия с XDTO-пакетом
Действия с XDTO пакетом

Для успешного импорта XML-схемы (XSD) в XDTO пакет, необходимо наличие в XSD-файле атрибута «targetNamespace» с указанием пространства имен, иначе импортировать схему не удастся.

Не хватает атрибута "targetNamespace"
Не хватает атрибута «targetNamespace»

Пространство имен обычно указывается URL-подобной строкой (хотя на самом деле это может быть любая строка) и служит для того, чтобы избежать путаницы в том случае, если в разных XDTO пакетах у нас имеются объекты с одинаковым названием.

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

Пространство имен в XSD-файле
Пространство имен в XSD-файле

XSD-файл можно сделать самому  — написать руками в блокноте или сделать XDTO пакет прямо в конфигураторе, кроме этого можно воспользоваться какой-нибудь специализированной программой (например  Liquid XML Studio) или онлайн сервисом (Google в помощь) которые умеют создавать XSD-файлы из XML. При использовании программ и сервисов нужно быть осторожным, так как по моему опыту результат их работы (XSD-файл) очень часто не подходит для использования в 1С — неправильно указываются типы данных и, как следствие, записать XML-файл при помощи такого XDTO пакета не удастся. В качестве примера приведу два XDTO пакета для одного и того же  XML-файла.

Сравнение XDTO пакетов
Сравнение XDTO пакетов

Слева тот, что создан руками, справа — программой.

Работа с XDTO в 1С неразрывно связана с объектом «ФабрикаXDTO». Именно этот объект читает и записывает данные из/в XML-файл(а), а также создает все нужные объекты с которыми можно привычно работать «через точку».

 

Перейдем к практике.

Допустим у нас есть файл заказ вот такого вида:

XSD-файл примера:

XSD-файл примера
XSD-файл примера

Схема в виде пакета XDTO была показа выше.

Чтение XML при помощи XDTO:

«ФабрикаXDTO» при помощи XDTO пакета превращает XML-файла в обычный 1С объект.

Теперь запишем свой XML-файл:

В коде выше, мы получаем все необходимые типы данных, создаем из них объекты, затем заполняем эти объекты нужными данными и записываем все это в XML-файл.

Естественно, данная статья не претендует на звание всеобъемлющего руководства по XDTO. Этого всего лишь небольшой обзор основных возможностей механизма XDTO и я с благодарностью приму все возможные замечания и дополнения.

В следующий статье я постараюсь рассказать о том, что такое XDTO-сериализация в 1С.

5 комментариев к “XDTO в 1С

  1. Pingback: XDTO — Блог программиста
  2. А если схема похожа на как Рис. 3, Тест1 возможно ли прочитать значение объекта Товар — хотя он является Тип — СписокXDTO?
    В моем случае:
    <phone_number phone_type="1" 9858887888
    4954300179

  3. Спасибо за статью! Очень помогла разобраться в вопросе.

    Но остался вопрос:
    В тексте (например реквизите наименование), есть кавычки «, если не менять в XML пишет тупо их.
    Если программно заменить &quot, то после замены при записи XML xdto меняет &quot на &quot — это нормально? не могу найти как лечится.

  4. Хочу лишь выразить благодарность автору статьи. Очень понятно объясняет сложные вещи.

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