Разработка и Конфигурация · 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 штатными средствами.
ТипДокумента = ФабрикаXDTO.Тип("http://example.org/orders", "Заказ");
Заказ = ФабрикаXDTO.Создать(ТипДокумента);
Заказ.Номер = "А-1024";
Заказ.Дата = ТекущаяДатаСеанса();
Заказ.Проверить();Как читать и записывать XML по схеме
Типовой сценарий записи выглядит так: создать объект XDTO нужного типа, заполнить свойства, вызвать проверку и записать объект через объект ЗаписьXML с указанием фабрики. Платформа сама сформирует теги, пространства имён и представления дат в каноническом виде. Ручная сборка строки XML при этом не нужна и считается плохой практикой.
Чтение зеркально: объект ЧтениеXML открывает файл, метод ФабрикаXDTO.ПрочитатьXML() разбирает содержимое и возвращает объект XDTO соответствующего типа. Если файл не соответствует схеме — например, отсутствует обязательный элемент или значение не приводится к числу — платформа выбрасывает исключение с указанием позиции в файле и нарушенного ограничения.
- 1Убедитесь, что в конфигурации есть XDTO-пакет с нужным пространством имён, либо создайте фабрику из XSD-файла методом СоздатьФабрикуXDTO
- 2Откройте файл через ЧтениеXML и установите позицию на корневом элементе
- 3Вызовите ФабрикаXDTO.ПрочитатьXML() и получите объект нужного типа
- 4Обратитесь к свойствам объекта и перенесите данные в объекты конфигурации
- 5Перехватите возможное исключение и запишите текст ошибки в журнал для анализа
Важный нюанс: если схема поставляется внешней системой и периодически меняется, пакет можно не встраивать в конфигурацию, а строить фабрику «на лету» из XSD-файла. Это удобно для интеграций, где схему контролирует контрагент, но усложняет поддержку кода, потому что типы становятся недоступны на этапе разработки.
Валидация и типичные ошибки проверки
Валидация — главная практическая ценность схемы. Она выполняется неявно при чтении XML и явно методом Проверить() у объекта XDTO. Проверяются обязательность свойств, соответствие типов, ограничения длины строк, диапазоны чисел и соответствие значений перечислениям, заданным в схеме.
Самая частая ошибка в обменах — «Ошибка проверки данных XDTO» с указанием свойства и значения. Причины почти всегда одни и те же: пустое обязательное поле, строка длиннее ограничения схемы, дата в неподдерживаемом представлении, число с лишними знаками после запятой или значение, не входящее в перечисление схемы. Текст исключения обычно прямо указывает проблемное свойство, поэтому первым делом стоит прочитать сообщение целиком, а не только первую строку.
Отдельный класс проблем — несовпадение версий схемы. Если контрагент обновил формат, а ваша конфигурация работает по старому пакету, возможны два сценария: жёсткая ошибка валидации (если появились новые обязательные элементы) или тихая потеря данных (если новые необязательные элементы просто не читаются). Поэтому при интеграциях версию схемы стоит фиксировать в договорённостях и контролировать при каждом обновлении.
Где схемы XML применяются на практике
Наиболее заметная область — обмен между типовыми конфигурациями через формат EnterpriseData. Документы, справочники и остатки упаковываются в XML по схемам соответствующих XDTO-пакетов, что позволяет связывать, например, ERP и «Управление торговлей» без написания парсеров. Правила конвертации при этом работают поверх объектов XDTO.
Вторая область — веб-сервисы. При публикации web-сервиса в 1С WSDL-описание опирается на XDTO-пакеты, а входящие SOAP-сообщения автоматически валидируются по схеме. Третья — клиент-банк и ЭДО: форматы выписок, платёжных поручений и электронных документов описаны XSD-схемами регуляторов и операторов, которые импортируются в конфигурацию.
Способы работы с XML в 1С
Подходит для устойчивых форматов с договорённостями между системами; даёт валидацию и типизацию, но требует актуальной схемы
Подходит для разовой загрузки больших файлов без схемы; полный контроль, но вся проверка типов ложится на разработчика
Удобен для навигации по незнакомой структуре и выборочного извлечения данных; медленнее потокового чтения на больших файлах
Ограничения и подводные камни
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 по схеме автоматически, поэтому большинство ошибок обмена сводится к чтению текста исключения и сверке версий схемы у отправителя и получателя.