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

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

Схема XML в 1С: что это и как с ней работать

Что такое схема XML в 1С, как устроены XDTO-пакеты, валидация данных по схеме, типовые ошибки при обмене и практические приёмы работы с XSD.

Схема XML (XSD, XML Schema Definition) — это формальное описание структуры XML-документа: какие элементы в нём допустимы, в каком порядке они следуют, какие типы данных имеют атрибуты и вложенные узлы, какие поля обязательны. В экосистеме 1С схемы XML лежат в основе механизма XDTO (XML Data Transfer Objects) — штатного способа обмена данными между конфигурациями, с веб-сервисами и внешними системами.

Когда две системы обмениваются документами в формате XML, схема выступает «договором» между ними. Отправитель формирует файл по схеме, получатель проверяет его по той же схеме и уверенно читает данные, не гадая, где искать сумму документа или ИНН контрагента. В 1С эта проверка называется валидацией, и платформа умеет выполнять её автоматически при чтении и записи XML.

Разобраться в теме важно не только интеграционным разработчикам. Схемы XML встречаются при настройке обмена с банками, ЭДО-операторами, сайтами, при загрузке классификаторов и при работе с EnterpriseData — универсальным форматом обмена между типовыми конфигурациями. Понимание устройства схемы помогает быстро находить причины ошибок вида «ошибка проверки данных XDTO» вместо многочасовой отладки вслепую.

Что такое схема XML и зачем она нужна

XML-документ сам по себе — просто текст с тегами. Ничто не мешает записать в элемент «Количество» строку «много» или забыть обязательный реквизит. Схема устраняет эту неопределённость: она фиксирует перечень элементов, их вложенность, кратность (сколько раз элемент может повторяться), обязательность и типы значений — строки, числа, даты, перечисления.

Физически схема — это тоже XML-файл, обычно с расширением .xsd. В нём объявляются простые типы (ограничения на значения, например строка длиной до 10 символов) и сложные типы (структуры с вложенными элементами и атрибутами). Один файл схемы описывает одно пространство имён — уникальный идентификатор, отделяющий, например, схему банковской выписки от схемы товарного каталога.

Без схемы пришлось бы разбирать XML вручную: искать узлы по именам, приводить строки к числам и датам, самостоятельно отлавливать отсутствующие поля. Схема переносит эту работу на платформу и делает обмен воспроизводимым: один и тот же код одинаково обрабатывает любой файл, соответствующий схеме.

Как схема XML представлена в 1С: XDTO-пакеты

В конфигураторе 1С схемы хранятся в ветке «Общие» — «XDTO-пакеты». Каждый пакет соответствует одному пространству имён и может быть создан двумя способами: импортом готового XSD-файла или описанием типов вручную в редакторе пакета. Типовые конфигурации содержат десятки таких пакетов: для обмена с банками, для формата EnterpriseData, для работы с веб-сервисами.

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

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

bsl
ТипДокумента = ФабрикаXDTO.Тип("http://example.org/orders", "Заказ");
Заказ = ФабрикаXDTO.Создать(ТипДокумента);
Заказ.Номер = "А-1024";
Заказ.Дата = ТекущаяДатаСеанса();
Заказ.Проверить();

Как читать и записывать XML по схеме

Типовой сценарий записи выглядит так: создать объект XDTO нужного типа, заполнить свойства, вызвать проверку и записать объект через объект ЗаписьXML с указанием фабрики. Платформа сама сформирует теги, пространства имён и представления дат в каноническом виде. Ручная сборка строки XML при этом не нужна и считается плохой практикой.

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

Порядок чтения XML по схеме
  1. 1
    Убедитесь, что в конфигурации есть XDTO-пакет с нужным пространством имён, либо создайте фабрику из XSD-файла методом СоздатьФабрикуXDTO
  2. 2
    Откройте файл через ЧтениеXML и установите позицию на корневом элементе
  3. 3
    Вызовите ФабрикаXDTO.ПрочитатьXML() и получите объект нужного типа
  4. 4
    Обратитесь к свойствам объекта и перенесите данные в объекты конфигурации
  5. 5
    Перехватите возможное исключение и запишите текст ошибки в журнал для анализа

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

Валидация и типичные ошибки проверки

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

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

Типичные ошибки при работе со схемами XML
01
Заполнение обязательных полей пустыми строками вместо осмысленных значений — валидация проходит, но получатель получает мусор
02
Игнорирование ограничений длины: наименование контрагента обрезается или вызывает ошибку на стороне приёмника
03
Ручная сборка XML строками вместо XDTO — теряется контроль типов и экранирование спецсимволов
04
Расхождение версий схемы у отправителя и получателя — файл читается, но часть данных молча теряется
05
Правка XDTO-пакета типовой конфигурации без переноса изменений при обновлении — доработка стирается очередным релизом

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

Где схемы XML применяются на практике

Наиболее заметная область — обмен между типовыми конфигурациями через формат EnterpriseData. Документы, справочники и остатки упаковываются в XML по схемам соответствующих XDTO-пакетов, что позволяет связывать, например, ERP и «Управление торговлей» без написания парсеров. Правила конвертации при этом работают поверх объектов XDTO.

Вторая область — веб-сервисы. При публикации web-сервиса в 1С WSDL-описание опирается на XDTO-пакеты, а входящие SOAP-сообщения автоматически валидируются по схеме. Третья — клиент-банк и ЭДО: форматы выписок, платёжных поручений и электронных документов описаны XSD-схемами регуляторов и операторов, которые импортируются в конфигурацию.

Способы работы с XML в 1С

XDTO по схеме

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

Потоковое чтение (ЧтениеXML)

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

DOM (ПостроительDOM)

Удобен для навигации по незнакомой структуре и выборочного извлечения данных; медленнее потокового чтения на больших файлах

Ограничения и подводные камни

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

Есть и технические ограничения. Очень большие файлы при чтении через XDTO целиком загружаются в память как дерево объектов — на файлах в сотни мегабайт это может привести к нехватке памяти на сервере. В таких случаях комбинируют подходы: потоковым чтением файл делят на логические блоки, а каждый блок разбирают через XDTO.

Ещё один подводный камень — кодировки и пространства имён. Файл, сформированный сторонней системой, может использовать другое пространство имён при визуально идентичной структуре. Для платформы это другой тип, и чтение через штатную фабрику завершится ошибкой. Проверка корневого элемента и его пространства имён — первый шаг диагностики, когда «файл вроде правильный, но не читается».

Контрольные точки

Как проверить корректность обмена по схеме

Чтение файла без исключений
Норма

ПрочитатьXML возвращает объект ожидаемого типа

Тревожный признак

Исключение с текстом об ошибке проверки данных XDTO

Заполненность данных после чтения
Норма

Все ключевые свойства объекта содержат значения из файла

Тревожный признак

Свойства пустые — вероятно, другое пространство имён или версия схемы

Обратная запись
Норма

Метод Проверить() проходит без ошибок, файл открывается у получателя

Тревожный признак

Проверить() сообщает о незаполненных обязательных свойствах

FAQ

Чем XDTO-пакет отличается от XSD-файла?

XSD-файл — это текстовое описание схемы в стандарте W3C. XDTO-пакет — представление той же схемы внутри конфигурации 1С, с которым работает платформа. Пакет можно создать импортом XSD-файла, и обратно — выгрузить пакет в XSD.

Можно ли работать со схемой без изменения конфигурации?

Да. Метод СоздатьФабрикуXDTO позволяет построить фабрику из XSD-файла прямо во время выполнения, например загрузив схему из макета или с диска. Это удобно, когда схему поставляет внешняя система и она периодически меняется.

Что делать при ошибке «Ошибка проверки данных XDTO»?

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

Почему файл правильной структуры не читается через ФабрикаXDTO?

Наиболее вероятная причина — несовпадение пространства имён корневого элемента с пространством имён пакета. Для платформы это принципиально разные типы, даже если имена элементов совпадают. Сравните атрибут xmlns в файле с URI пакета в конфигурации.

Когда XDTO избыточен и лучше обойтись без схемы?

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

Итог

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

Схема XML в 1С реализуется через XDTO-пакеты и задаёт структуру, типы и обязательность данных при обмене. Платформа валидирует XML по схеме автоматически, поэтому большинство ошибок обмена сводится к чтению текста исключения и сверке версий схемы у отправителя и получателя.