XDTO - это просто

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты.
Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

XDTO - это просто

Введение

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты.

В результате, не всегда можно разобраться - что за зверь такой - XDTO. Кроме того, даже разобравшись немного и осмелев, специалисты сталкиваются с проблемами, когда начинают использовать его более активно и в более сложных сценариях. За несколько лет плотной работы с XDTO я набил массу шишек и, как мне кажется, достаточно близко подошел к постижению дао :). С моей подачи в механизме XDTO даже было исправлено несколько серьезных ошибок, нарушавших стандарты XML.

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

Надеюсь, что данный материал поможет специалистам, начинающим знакомство с XDTO избежать моих ошибок, а значит более эффективно решить поставленные задачи.

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

Что такое XDTO

Для начала, давайте определимся - что же это за зверь такой - XDTO?

Как я уже говорил, это сокращение от XML Data Transfer Objects, что по-русски означает “XML-объекты переноса данных”.

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

Зачем оно надо?

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

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

Что в итоге?

XDTO - это механизм, разработанный фирмой “1С” для обмена данными с другими программными системами посредством XML, позволяющий на уровне языка 1С оперировать не узлами XML, а прикладными понятиями “Сотрудник”, “Счет” и привычными встроенными типами (“ТаблицаЗначений”, “СправочникСсылка” и т.п.).

Начнем знакомство

Для начала, давайте обратимся к концепции XML документа, как такового. Как правило, документ содержит некоторую структурированную информацию, которую можно условно представить в виде набора объектов. Например, документ “СписокСотрудников.xml” содержит узел “Сотрудники”, внутри которого имеются элементы с типом “Сотрудник”.

Для того, чтобы корректно прочитать данный документ, мы должны знать структуру того, как в документе расположены данные. Для этого существует такая вещь, как Схема XML. Схема XML представляет собой документ, в котором описаны все типы, которые могут встретиться в документе. Строго говоря, это не совсем точное определение схемы, но для XDTO его вполне достаточно.

Схема однозначно указывает, какие узлы и в каком порядке должны располагаться в документе. Кроме того, она представляет наборы узлов в виде функциональных типов данных, таких, как “Сотрудник”. Что еще более приятно - типы могут наследоваться и составлять иерархии типов.

А теперь, вспомним, зачем нужен XDTO - представление XML в виде объектов бизнес-логики. Если у нас будет набор бизнес-объектов, которые нужно передать по сети в виде XML, то мы можем создать XML-документ с помощью стандартного средства записи - объекта ЗаписьXML и поэлементно создать структуру, постаравшись ничего не напутать в структуре документа. Либо, мы можем создать XML-документ c помощью XDTO, используя более простой код:

Сотрудник.ФИО = “Иванов Иван Иванович”;
Сотрудники.Добавить(Сотрудник);

Низкоуровневые вопросы формирования XML и размещения его в документе возьмет на себя платформа.

Здесь я заранее хочу попросить прощения за такое длинное вступление у тех, кто хорошо знаком с XML и с XDTO. Мне хочется, чтобы рассказ шел от самых начал, т.к. я не могу заранее предсказать квалификацию читателя. Если все вышесказанное вам и так известно, пролистайте ниже :).

Вернемся к приведенному примеру кода. Видно, что есть некий объект сотрудник со свойством “ФИО”, которому присваивается строка. Далее этот сотрудник помещается в коллекцию. После записи коллекции, мы получим готовый XML документ, что явно проще, чем ручное создание элементов и атрибутов с помощью ЗаписьXML.

Закономерный вопрос - как платформа узнает о том, какие свойства есть у сотрудника и как его записывать в XML-файл? Ответ только один - из схемы XML документа. Платформа знает какие свойства могут быть у объекта, потому, что этот объект описан в схеме будущего документа. Закономерный вывод - XDTO без схемы документа работать не может. Система типов обязательно должна быть известна, только тогда мы сможем создавать объекты этих типов, присваивать им свойства, записывать и читать их из XML потока.

Теперь все вместе: Платформа позволяет оперировать фрагментами XML-документов, как обыкновенными объектами, к которым можно, например, обращаться “через точку”. При этом, сами объекты описываются в XML-схеме, и именно из нее платформа узнает - как выглядит тот или иной объект. То, как выглядит объект, называется типом. То есть, чтобы получить объект мы должны знать его тип.

Типы, объекты и фабрики

Пространства имен

На свете существует огромное количество программистов, которые создают те или иные XML-документы. При этом, очень часто они оперируют одинаковыми понятиями, например “Дата”, “Цена” и “Сотрудник”. Если вдруг две системы имен (созданных разными программистами) встретятся в рамках одной информационной системы, то произойдет конфликт имен.

Например, Вася создал тип данных “Сотрудник” со свойством “ФИО” и Петя создал объект "Сотрудник" со свойствами “Фамилия”, “Имя”, “Отчество” и “ИНН”. Объекты разные, а имя типа одно, возникает путаница. Чтобы этого избежать, используются пространства имен. Все имена должны быть уникальны в рамках одного пространства имен. Имена в разных пространствах запросто могут повторять друг друга.

По традиции (и по многим другим соображениям), пространства именуются в виде URL-подобных строк. Например, “http://vasya.org/xml/sotrudniki”. Причем, это не ссылка в сети, это просто строка-идентификатор. Документы пестрят этими “ссылками” и ,сталкиваясь с ними, начинающий специалист впадает в ступор - “что это за адреса, что по ним расположено, а что, если нет интернета...” Так вот, это не адреса, это уникальные идентификаторы пространств имен. Строка может быть любой.

Теперь, все типы, которые изобретет Вася, он поместит в свое пространство имен и творчество Пети ему не страшно. Всегда можно отличить одного “Сотрудника” от другого.

Типы данных

Как уже было сказано выше, тип данных обязан принадлежать пространству имен. Пространство это задается в схеме XML и однозначно определяет все типы, которые в него входят. Отсюда же следует простой вывод - тип данных всегда дополняется пространством имен, в котором этот тип нужно искать.

Модель данных и Фабрика XDTO

При построении системы типов XDTO используется понятие Модели данных. Модель представляет собой совокупность всех типов, которые можно записать в один XML документ. С понятием модели неразрывно связано понятие Фабрики XDTO. Фабрика, это объект платформы 1С:Предприятие, который позволяет создавать те самые объекты “Сотрудник”, к которым можно обращаться “через точку”. Именно фабрика создает объект встроенного языка и наделяет его свойствами “ФИО” и “ИНН”, позволяя виртуальной машине обращаться к этим свойствам. Перечень возможных типов и их свойств фабрика берет из модели данных, которая в конечном итоге представляет собой просто набор схем XML.

Что в итоге?

Представьте, что у нас есть большая система взаимосвязанных типов. Каждый тип входит в определенный логический блок типов, а блоки для удобства разнесены по разным схемам XML. Например, у нас есть блок “Коллекции”, представляющий абстрактные списки объектов и есть блок “Сотрудники”, представляющий типы объектов, описывающие сотрудников, их зарплату, должности и т.п.

Нам нужно выгрузить и передать куда-то XML документ со списком сотрудников.

Для этого, нам удобно взять тип “Список” из схемы списков и наполнить его “Сотрудниками” из схемы “Сотрудники”. В результате, наша модель типов включает в себя 2 схемы (2 пакета) типов - “Списки” и “Сотрудники”. На основании данной модели типов мы можем создать Фабрику, которая будет “строить” объекты, к которым мы сможем обращаться из встроенного языка.

Меньше слов, ближе к делу

Для того, чтобы воспользоваться механизмом XDTO нам потребуется модель типов. Модель типов - это набор схем XML, а сами схемы можно сделать любым текстовым редактором, но лучше воспользоваться специализированным инструментом.

Для разработки схем я использую Liquid XML Studio. Отличный инструмент позволяющий построить схему посредством тыкания мышкой. Я пользуюсь версией 2008, она бесплатная, но слегка глючная. Более старшие версии мощны, но за деньги.

Liquid XML Studio позволяет строить схемы в виде вот-таких картинок:

Создаваемая схема описывает типы данных, которые мы можем использовать. Обязательно задается пространство имен, которому наши типы будут принадлежать. Сами типы подразделяются на простые и составные (simple и complex). Соответственно, простые типы, это те, которые можно представить одним значением - строка, дата, булево и т.п. Составные объекты - те, которые содержат несколько значений, а стало быть одной строчкой представлены быть не могут.

В конфигураторе, каждая схема XML может быть представлена в виде ПакетаXDTO, а вся совокупность типов, имеющихся в конфигурации составляет Модель данных конфигурации. Соответственно, все типы Модели (включая созданные нами Пакеты) могут создаваться глобальным объектом ФабрикаXDTO.

Простые типы XML представляются в виде объектов языка 1С с типом “ЗначениеXDTO”. Составные типы XML представляются в виде объектов языка 1С с типом “ОбъектXDTO”.

Подобно тому, как в конфигурации есть метаданные, предоставляющие информацию о типах, в XDTO тоже есть подобные объекты - ТипЗначенияXDTO и ТипОбъектаXDTO. Эти объекты позволяют узнать информацию о типе данных - размер, число знаков после запятой, неотрицательность и т.п.

Что со всем этим делать?

Давайте еще раз подведем краткий итог и воспользуемся полученной информацией. Итак, у нас есть 2 пакета типов (2 схемы XML). Первая - разные коллекции, списки, соответствия и т.п. Вторая - сотрудники. Нам нужно сформировать список сотрудников.

1. Предположим, что пакет коллекций имеет пространство имен “http://super-puper/collections”, а пакет сотрудников - “http://super-puper/employees”.

2. В конфигураторе раскрываем ветку ПакетыXDTO и в контекстном меню выбираем “Импорт схемы XML”. Указываем файлы со схемами.

3. В ветке пакетов появятся наши пакеты. Зададим им осмысленные имена (любые)

4. Теперь конфигурация “знает” о наших типах данных и они включены в модель типов конфигурации

Применение в коде

Как уже говорилось, для создания объектов XDTO применяется ФабрикаXDTO. Чтобы создать объект, фабрика должна знать его тип. Делается это следующим образом:

// Создается объект языка 1С с типом “ТипОбъектаXDTO”
// Первый параметр пространство имен, второй - имя типа в пространстве имен.
ТипОбъектаСписок = ФабрикаXDTO.Тип(“http://super-puper/collections”, “Список”);

// Создаем объект списка
ОбъектСписок = ФабрикаXDTO.Создать(ТипОбъектаСписок);

// обход сотрудников для выгрузки
Пока Выборка.Следующий() Цикл
ТипОбъектаСотрудник = ФабрикаXDTO.Тип(“http://super-puper/employees”, “Сотрудник”);
Сотрудник = ФабрикаXDTO.Создать(ТипОбъектаСотрудник);

// Свойство “ФИО” объявлено в схеме
Сотрудник.ФИО = Выборка.Наименование;

// Добавление “Сотрудников” в “Список”
ОбъектСписок.Добавить(Сотрудник);

КонецЦикла;

// А теперь, запись в поток XML

Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку(); // запись в строку

ФабрикаXDTO.Записать(Запись, ОбъектСписок);
ДанныеXML = Запись.Закрыть(); // документ готов!

Резюме

На этом хочется завершить первую вводную статью. И безо всяких тонкостей она получилось довольно большой. Мы рассмотрели самые основы-основ - создание модели типов и загрузка ее в конфигурацию, а также создание XML документа на основании модели типов.

Далее мы рассмотрим программное создание модели типов, собственных фабрик, а также нюансы работы с объектами XDTO.

Если данная тема вам интересна, отпишитесь в комментариях, продолжение обязательно последует.

Комментарии

2
  • НатальяС

    Хорошая статья, ждём продолжения.

  • gsk

    Спасибо, отличная статья, ждем продолжения!

С 1 мая в России переводы между своими счетами в разных банках станут бесплатными

Сейчас на переводы себе и другим людям действует общий лимит СБП — 100 тысяч рублей в месяц.

Курсы повышения
квалификации

20
Официальное удостоверение с занесением в госреестр Рособрнадзора

«Тинькофф Инвестиции»: 3 мая завершается прием заявок на обмен заблокированных иностранных активов

«Тинькофф Инвестиции» опубликовали инструкцию по обмену заблокированных иностранных активов для своих клиентов в Telegram-канале.

С 29 апреля — новая форма уведомления в налоговую о невозможности подачи документов в срок

ФНС утвердила новые форму и формат уведомления в налоговую о невозможности представления в установленные сроки документов и информации в электронной форме.

Лучшие спикеры, новый каждый день

🔨 Ударные скидки на «Клерке»! Курсы по учету на маркетплейсах, ВЭД, зарплате, финмоделированию, УСН и бухгалтерии с нуля за 3 690 рублей!

На горизонте сразу 4 праздничных дня, потом пара рабочих и снова 2 свободных! Используйте это время с умом — за череду праздников вы сможете пройти весь месячный курс «Клерка» и стать специалистом на еще одном участке, повысить квалификацию в своей сфере или освоить профессию бухгалтера с нуля! До 2 мая популярные онлайн-курсы за 3 690 рублей!

🔨 Ударные скидки на «Клерке»! Курсы по учету на маркетплейсах, ВЭД, зарплате, финмоделированию, УСН и бухгалтерии с нуля за 3 690 рублей!
5
Бухгалтеры

💪 Ударные скидки на «Клерке»! Курсы по учету на маркетплейсах, ВЭД, зарплате, финмоделированию, УСН и бухгалтерии с нуля за 3 690 рублей!

Проведите выходные с пользой! За череду праздников вы сможете пройти весь месячный курс «Клерка» и стать специалистом на еще одном участке, повысить квалификацию в своей сфере или освоить профессию бухгалтера с нуля! До 2 мая популярные онлайн-курсы за 3 690 рублей!

Нет тела — нет дела! Или нет документа — нет уголовного дела!

Мнение адвоката о защите по экономическим преступлениям и спорам.

Опытом делятся эксперты-практики, без воды
Общество

Туристы получили больше гарантий

С 1 мая 2024 года существенно выросла сумма финансового обеспечения ответственности туроператоров перед туристами.

Общество

Словари русского языка включат в единый цифровой ресурс

Внесли изменения в федеральный закон «О государственном языке Российской Федерации».

Шашлыки лучше IPO МТС Банка, укрепление рубля, отпуск у индекса, море дивидендов, новые бонды и другие новости. Воскресный инвестдайджест

Можно бесконечно смотреть на огонь, воду и как укрепляется рубль. А ещё вдыхать аромат шашлыка на майских праздниках. Как раз к первомаю рубль укрепился, индекс уже собрал чемоданы и умотал на отдых, халвинг не помог биткоину. Дивидендами просто заваливают, прошло IPO МТС Банка, вышло много новых выпусков облигаций.

Шашлыки лучше IPO МТС Банка, укрепление рубля, отпуск у индекса, море дивидендов, новые бонды и другие новости. Воскресный инвестдайджест

Фейковых приложений банков стало на 25% больше: причина и как обезопаситься

Мошенники пользуются тем, что иностранные магазины мобильных приложений блокируют официальный банковский софт, и предлагают пользователям скачать фейковые приложения.

Общество

Расширят ответственность за участие в деятельности нежелательных организаций

За участие в деятельности любых нежелательных организаций Госдума хочет ввести административную и уголовную ответственность.

Законопроекты

Тех, кто игнорирует федеральные законы, хотят отстранять от должности

Председатель Госдумы Вячеслав Володин предложил отстранять от должности представителей региональных властей, которые не исполняют федеральные законы.

Миникурсы, текстовые и видеоинструкции для бухгалтеров

Ура! Выходные! Главное в майские не забудьте про уплату налогов. Праздничный выпуск 🎈«Ночной бухгалтер» № 1674

За дачными и диванными выходными легко пропустить очередной срок уплаты. Кто уже заплатил все налоги — тот молодец, остальным — наши напоминалки и подсказки в помощь (мы новые разъяснения сделали по фиксвзносам за 2023 год, которые заплачены только сейчас). Ну и без предвыходных позитивов не обошлось.

Иллюстрация: Вера Ревина / Клерк.ру
Валюта

Банкам будет проще получить разрешение на вывоз валюты

Кредитным организациям больше не нужно представлять в ЦБ заключения об установленных критериях повреждений вместе с заявлениями о вывозе ветхих или поврежденных купюр.

Онлайн-кассы

Как в 2024 году будут идти проверки ККТ

В 2024 году в рамках проверок ККТ налоговики будут проводить профилактические и внеплановые контрольные мероприятия.

Трудовое право

Предложено разрешить больше работать сверхурочно, чем сейчас разрешает ТК

В настоящее время Трудовой кодекс разрешает переработки по 4 часа в течение двух дней подряд, то есть работать по 12 часов в день.

Обзоры новостей

⚡️ Итоги дня: в Питере открылся сезон фонтанов, в Америке поймали аллигатора голыми руками, а врач объяснил, кому нельзя есть шашлык

Подготовили обзор главных событий дня — 27 апреля 2024 года. Все самое интересное, что писали и обсуждали в сети, в одной подборке.

НДФЛ

2 мая заканчивается налоговая декларационная кампания

До этого момента физлицам, ИП, нотариусам, адвокатам и частнопрактикующим специалистам нужно подать в ФНС декларации о доходах по форме 3-НДФЛ за 2023 год.

Бухгалтеры

Обзор сервиса «Клерк.Консультации»: как задать вопрос и на какие темы отвечают эксперты

Есть вопросы? Задайте их экспертам «Клерка»! Вы можете задать 1, 10 или 30 вопросов про налоги, учет, 1С, кадры, работу на маркетплейсах или праву, и уже через несколько часов получите развернутый ответ от наших специалистов. Мы поможем вам быстро решить проблему любой сложности.

Иллюстрация: создано с помощью ИИ OpenAI © Вера Ревина/Клерк.ру

Интересные материалы

ВЭД

Половина платежей из России в Китай проходит через посредников

Банки КНР опасаются работать с российскими предпринимателями из-за рисков попасть под вторичные санкции США. В итоге бизнес отправляет платежи через посредников, которые просят несколько тысяч долларов.