При разработке систем интеграции и обмена данными в среде 1С часто возникает вопрос: зачем использовать специализированный объект метаданных XDTO-пакет, если структуру данных можно описать простыми функциями в общих модулях? В этой статье мы подробно разберем, что такое XDTO, почему это не просто «сумрачное изобретение 1С», а мощный инструмент стандартизации, и как он упрощает жизнь разработчику при работе с внешними системами.
Аббревиатура XDTO расшифровывается как XML Data Transfer Objects. По своей сути это механизм, который позволяет представить структуру XML-документа в виде привычных объектов 1С. Если рассматривать этот инструмент шире, то XDTO — это визуальный редактор и интерпретатор стандарта XSD (XML Schema Definition), который используется во всем мире для описания структуры данных.
Рассмотрим ситуацию: вам нужно передать данные о физическом лице во внешнюю систему. Можно собрать строку XML вручную или через ЗаписьXML. Однако, если у вас 50 различных правил обмена, в каждом из которых структура «ФизЛицо» должна быть одинаковой, использование функций общего модуля становится неудобным. Любое изменение формата потребует переписывания кода во многих местах. XDTO-пакет позволяет описать эту сущность один раз как тип данных и использовать её повсеместно, гарантируя идентичность структуры.
Многих разработчиков смущает наличие отдельного узла в дереве конфигурации. Рассмотрим основные причины, по которым выделение XDTO в метаданные оправдано:
Для работы с данными используется объект ФабрикаXDTO. Проанализируем, как происходит взаимодействие. Фабрика — это «чертеж», на основе которого создаются конкретные объекты. Вы можете использовать глобальную фабрику (содержащую все пакеты вашей конфигурации) или создавать локальные фабрики из внешних файлов .xsd.
Рассмотрим пример создания объекта программно:
// Получаем тип из пакета с пространством имен "http://www.my-company.ru/data"
ТипКонтрагент = ФабрикаXDTO.Тип("http://www.my-company.ru/data", "Контрагент");
// Создаем сам объект на основе этого типа
НовыйКонтрагент = ФабрикаXDTO.Создать(ТипКонтрагент);
// Заполняем свойства через точку, как у обычного объекта или структуры
НовыйКонтрагент.Наименование = "ООО Ромашка";
НовыйКонтрагент.ИНН = "7701234567";
Обратите внимание на удобство: разработчик обращается к свойствам через точку: ОбъектXDTO.Контрагент.ИНН. Это значительно ускоряет написание кода и снижает количество ошибок по сравнению с навигацией по узлам дерева через ЧтениеXML.
XDTO-пакеты позволяют задавать строгие ограничения для данных на уровне описания, называемые фасетами. Выясним, что мы можем ограничить:
Проанализируем ситуацию: если вы попытаетесь записать в объект XDTO значение, не соответствующее фасету, система выдаст ошибку на этапе заполнения или валидации. Это предотвращает «замусоривание» информационной системы некорректными данными при интеграции.
Важно понимать, что XDTO — это фундамент современной технологии обмена EnterpriseData, используемой во всех типовых решениях (ERP, УТ 11, БП 3.0). Весь универсальный формат обмена описан именно через пакеты XDTO. Это позволяет разным конфигурациям «понимать» друг друга без жесткой привязки к метаданным конкретной базы.
Кроме того, начиная с версии платформы 8.3.6, механизм XDTO полноценно поддерживает формат JSON. Разберем по шагам, как это работает: вы описываете структуру один раз в XDTO-пакете, а затем можете одной командой выгрузить её как в XML для старого сервера, так и в JSON для современного мобильного приложения. Платформа сама позаботится о правильном форматировании.
Пример записи в JSON через фабрику:
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьJSON(ЗаписьJSON, МойОбъектXDTO);
Результат = ЗаписьJSON.Закрыть();
Не всегда удобно хранить пакеты внутри конфигурации. Рассмотрим случай работы с государственными сервисами (например, ГИС ЖКХ или «Честный знак»). Их структуры часто меняются и состоят из десятков взаимосвязанных файлов. В таких ситуациях мы можем создавать фабрику динамически:
// Создаем массив путей к файлам схем
МассивСхем = Новый Массив;
МассивСхем.Добавить("C:\Schemas\CommonTypes.xsd");
МассивСхем.Добавить("C:\Schemas\Order.xsd");
// Создаем фабрику на основе этих файлов
МояФабрика = СоздатьФабрикуXDTO(МассивСхем);
Это позволяет поддерживать актуальность обмена без необходимости вносить изменения в метаданные основной конфигурации и обновлять её у пользователей.
Подведем итоги нашего анализа. Использование XDTO-пакетов вместо самописных функций в общих модулях дает следующие преимущества:
Таким образом, XDTO-пакеты являются незаменимым инструментом для профессиональной разработки распределенных систем и интеграций, обеспечивая надежность и чистоту кода.