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С.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 13, средняя оценка: 4,92 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 11
  1. Слава

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

  2. Сергей

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

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

  3. Сергей

    искорявило «& amp;quot;»

  4. Руслан

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

  5. Дмитрий

    Добрый день, поясните пожалуйста:
    XSD-файл вашего примера при загрузке создает XDTO пакет (левый на вашем примере).
    К примеру выгрузка конфигурации — формирует XSD-файл такой же структурой (без вложений определений типов друг в друга).

    Проблема в том, что по такому XSD-файлу:
    тТовары = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://1c-programmer-blog.ru/test», «Товары»));
    тТовар = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(«http://1c-programmer-blog.ru/test», «Товар»));
    создает объект XDTO, после чего:
    тТовары.Товар.Добавить(тТовар);
    выдает ошибку.

  6. Name

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

  7. Name

    показа азаза

  8. максим

    Доброго времени суток!
    У меня при создании xml файла через XDTO в итоговом файле отсутствуют символы переноса строки. Т.е. весь файл получается в одну строку, если открыть его в notepad++
    Может кто сталкивался с такой бедой?

    1. esqad

      Всё верно. Это файл для передачи, а не для чтения.
      Чем меньше в нём быссмысленых значений — тем лучше.
      Снижается объём файла — увеличивается скорость передачи и увеличивается шанс успешной доставки.

  9. Олег

    Спасибо Вам добрый человек, с Вашей помощью я сделал, то что хотел :idea:

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: