К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как добавить XDTO-пакет в 1С: подробная инструкция

Как добавить XDTO-пакет в конфигурацию 1С: создание вручную, импорт XSD-схемы, настройка пространства имён, типичные ошибки и проверка результата.

XDTO-пакет в 1С — это объект конфигурации, который описывает структуру XML-документов: типы данных, элементы, атрибуты и их вложенность. Он нужен везде, где конфигурация обменивается данными через XML: обмен с сайтом, интеграция по веб-сервисам, выгрузка в форматах ФНС, работа с EnterpriseData и любыми внешними XSD-схемами.

Добавить пакет можно двумя способами: создать пустой пакет в конфигураторе и описать типы вручную или импортировать готовую XSD-схему, которую предоставил контрагент или разработчик внешнего сервиса. Второй вариант используется чаще, потому что исключает ошибки ручного описания сложных структур.

Ниже разобраны оба способа, настройка пространства имён, проверка корректности пакета и типичные ошибки, из-за которых сериализация или чтение XML завершается с ошибкой.

Что такое XDTO-пакет и когда он нужен

XDTO (XML Data Transfer Objects) — механизм платформы 1С для работы с XML-документами через объектную модель. Пакет XDTO описывает схему данных: какие элементы допустимы, какого они типа, обязательны ли, каков порядок следования. На основе пакета платформа сериализует объекты в XML и десериализует XML обратно в объекты.

Типичные сценарии, где без собственного XDTO-пакета не обойтись: обмен с внешним веб-сервисом по заранее согласованной схеме, выгрузка данных в произвольном формате заказчика, чтение XML-файлов от сторонних систем (банков, маркетплейсов, транспортных компаний), расширение типового обмена. В типовых конфигурациях уже есть пакеты для стандартных обменов — например, EnterpriseData, — и их можно использовать как образец.

Как создать пустой XDTO-пакет в конфигураторе

Откройте конфигурацию в конфигураторе и в дереве объектов перейдите в ветку Общие → XDTO-пакеты. Через контекстное меню выберите «Добавить» — появится пустой пакет с редактором свойств.

Заполните два ключевых свойства: Имя — внутреннее имя объекта конфигурации (латиницей, без пробелов, например ОбменССайтом), и Пространство имен — URI, который будет стоять в атрибуте xmlns формируемых XML. Именно по пространству имён платформа находит пакет при чтении XML.

Далее пакет наполняется типами: в редакторе пакета добавляются типы объектов, их свойства, типы значений, перечисления. Каждому свойству задаётся имя, тип (встроенный или из другого пакета), нижняя и верхняя граница количества (0..1, 1..1, 0..-1 и т.д.), а также признак «возможно пустое». Ручное описание оправдано только для простых схем — при сложной структуре проще импортировать XSD.

Создание пустого пакета
  1. 1
    Откройте конфигуратор, ветка Общие → XDTO-пакеты
  2. 2
    Контекстное меню → Добавить
  3. 3
    Укажите имя пакета и пространство имён
  4. 4
    Добавьте типы объектов и их свойства в редакторе пакета
  5. 5
    Сохраните конфигурацию (Ctrl+S) и обновите конфигурацию базы данных при необходимости

Как импортировать XSD-схему

Если у вас есть XSD-файл (файл схемы от внешней системы), импорт занимает меньше минуты. В ветке Общие → XDTO-пакеты откройте контекстное меню и выберите пункт «Импорт XML-схемы». В диалоге укажите путь к XSD-файлу и при необходимости скорректируйте пространство имён и имя пакета.

Платформа разберёт схему и создаст все типы объектов, типы значений и их свойства автоматически, включая вложенные структуры, перечисления и ограничения. Если схема подключает другие схемы через import или include, убедитесь, что связанные XSD-файлы лежат рядом и пути в директиве schemaLocation корректны — иначе импорт завершится ошибкой неразрешённых ссылок.

После импорта откройте пакет и просмотрите структуру: проверьте, что корневой элемент и его тип соответствуют ожиданиям, а обязательные поля имеют нижнюю границу 1. Иногда схемы содержат типы с именами, недопустимыми для конфигуратора, — платформа заменит их, и это стоит учесть при написании кода.

Как обратиться к пакету из кода

После сохранения конфигурации пакет доступен через глобальный контекст как ПакетыXDTO.ИмяПакета либо через фабрику: ФабрикаXDTO.Пакеты.Получить("пространство_имён"). Создание объекта и запись в XML выглядят так:

Пакет = ПакетыXDTO.ОбменССайтом;

ТипЗаказ = Пакет.Получить("Order");

Заказ = ФабрикаXDTO.Создать(ТипЗаказ);

Заказ.Number = "00123";

Заказ.Date = ТекущаяДатаСеанса();

Запись = Новый ЗаписьXML;

Запись.УстановитьСтроку();

ФабрикаXDTO.ЗаписатьXML(Запись, Заказ);

ТекстXML = Запись.Закрыть();

Чтение выполняется зеркально — через ЧтениеXML и ФабрикаXDTO.ПрочитатьXML. Если пространство имён во входящем XML не совпадает с пространством имён пакета, фабрика не сможет сопоставить типы и выдаст ошибку — это самая частая причина сбоев при чтении.

bsl
Пакет = ПакетыXDTO.ОбменССайтом;
Заказ = ФабрикаXDTO.Создать(Пакет.Получить("Order"));
Заказ.Number = "00123";

Проверка результата и типичные ошибки

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

Ошибки при работе с XDTO почти всегда сводятся к нескольким причинам: несовпадение пространства имён, обращение к типу по неверному имени (после импорта имена могли измениться), попытка записать значение, не соответствующее типу свойства, и нарушение обязательности свойств при чтении.

Типичные ошибки
01
Пространство имён пакета не совпадает с xmlns в XML — фабрика не находит типы и падает с ошибкой при чтении
02
Пакет создан в конфигурации, но конфигурация базы данных не обновлена — код не видит пакет
03
Импортированная схема ссылается на другие XSD, которых нет рядом — импорт обрывается с ошибкой неразрешённых ссылок
04
Обращение к типу по имени из XSD, хотя платформа переименовала его при импорте — ошибка «Тип не найден»
05
Присвоение свойству значения несовместимого типа — исключение при записи XML

Ограничения и безопасные границы

Изменение XDTO-пакета — это изменение конфигурации, поэтому все работы ведите на копии базы или в тестовом контуре. Если конфигурация типовая и находится на поддержке, добавление собственного пакета снимет конфигурацию с полной поддержки либо потребует режима «с изменениями». При обновлении типового релиза собственные пакеты сохраняются, но лучше фиксировать их в документации проекта.

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

FAQ

Можно ли добавить XDTO-пакет без конфигуратора?

Нет. Пакет — объект метаданных, он создаётся только в конфигураторе или загружается из файлов конфигурации. В режиме предприятия можно лишь использовать уже существующие пакеты через код.

Чем XDTO-пакет отличается от веб-сервиса?

Веб-сервис — это точка доступа для приёма и передачи данных, а XDTO-пакет — описание структуры самих данных. При публикации веб-сервиса платформа автоматически создаёт для него пакеты на основе WSDL, но пакеты можно использовать и отдельно, например для файлового обмена.

Как импортировать схему, если она состоит из нескольких XSD-файлов?

Импортируйте главный файл схемы, предварительно положив все связанные XSD в одну папку. Платформа подтянет зависимые схемы по директивам import/include, если пути в schemaLocation указаны относительно главного файла.

Почему ФабрикаXDTO.ПрочитатьXML выдаёт ошибку «Ошибка разбора XML»?

Чаще всего пространство имён в читаемом XML не совпадает с пространством имён пакета, либо в документе есть элемент, не описанный в схеме. Сравните атрибут xmlns корневого элемента с пространством имён пакета.

Можно ли использовать пакет из расширения конфигурации?

Да, XDTO-пакеты можно добавлять в расширения. Это удобный способ не трогать основную конфигурацию: пакет живёт в расширении и доступен из кода так же, как обычный.

Как обновить пакет при изменении XSD-схемы?

Удалите старый пакет (проверив, что на него нет ссылок в коде) и импортируйте новую схему заново, либо вручную скорректируйте изменившиеся типы. Полный повторный импорт надёжнее при масштабных изменениях схемы.

Итог

Что важно запомнить

XDTO-пакет добавляется в ветке Общие → XDTO-пакеты: вручную с указанием пространства имён или импортом XSD-схемы. После добавления обновите конфигурацию базы данных, проверьте сериализацию на тестовом объекте и следите за совпадением пространства имён с реальными XML. Работы ведите на копии, типовые пакеты не редактируйте.