Разработка и Конфигурация · 11 мин
Как создать XSD-схему в 1С: работа с пакетами XDTO
Пошаговая инструкция по созданию XSD-схемы в 1С через пакеты XDTO: импорт, ручное построение, проверка XML и типичные ошибки при работе.
XSD-схема в 1С нужна там, где конфигурация обменивается данными с внешними системами по XML: веб-сервисы, форматы ФНС, обмены с банками, EDI, интеграции с сайтами. В 1С нет отдельного объекта «XSD-схема» — вместо неё используются пакеты XDTO, которые хранят описание типов, элементов и структуры XML-документов внутри конфигурации.
Пакет XDTO — это по сути импортированная или вручную построенная XSD-схема, преобразованная в объект метаданных. Через него платформа проверяет корректность XML при чтении и записи, контролирует типы данных, обязательность элементов и порядок их следования. Если схема описана неверно, обмен будет падать с ошибками валидации или, что хуже, молча терять данные.
Создать XSD в 1С можно двумя путями: импортировать готовый файл схемы (.xsd) в конфигуратор или построить пакет XDTO вручную, описывая типы и элементы в дереве метаданных. Ниже разобраны оба способа, программная работа с пакетом, проверка результата и типичные ошибки.
Что такое пакет XDTO и когда он нужен
XDTO (XML Data Transfer Objects) — механизм платформы 1С для работы с XML-документами на основе их схем. Пакет XDTO хранит пространство имён, типы данных, элементы и их иерархию — всё то, что обычно описывается в XSD-файле. Платформа использует пакет как контракт: любой XML, создаваемый или читаемый через этот пакет, проверяется на соответствие схеме.
Пакеты XDTO нужны в нескольких ситуациях: при обмене с государственными сервисами (ФНС, ПФР, Росстат публикуют официальные XSD-форматы), при интеграции с веб-сервисами партнёров, при выгрузке данных в сторонние учётные системы и при приёме XML-файлов от контрагентов. Если формат опубликован в виде XSD — почти всегда выгоднее импортировать его, чем разбирать XML вручную через ЧтениеXML.
Способ 1: импорт готового XSD-файла
Самый быстрый путь — импортировать схему, предоставленную контрагентом или регулятором. Откройте конфигуратор, в дереве конфигурации найдите ветку «Общие» → «XDTO-пакеты». Вызовите контекстное меню и выберите «Добавить», затем в свойствах пакета укажите пространство имён — оно должно совпадать с targetNamespace из XSD-файла.
Далее в контекстном меню созданного пакета выберите «Импорт XML-схемы» и укажите путь к .xsd-файлу. Платформа прочитает схему и построит дерево типов: объектные типы, типы значений, элементы, атрибуты. Если схема состоит из нескольких связанных файлов (директивы include и import), импортируйте их последовательно, начиная с файлов без зависимостей, либо укажите главный файл — платформа попытается подтянуть связанные схемы автоматически.
После импорта обязательно пролистайте дерево пакета. Сложные схемы с наследованием типов, группами элементов и подстановками могут импортироваться с потерями — платформа поддерживает не все конструкции XSD. Сверьте количество корневых элементов и ключевые типы с оригинальным файлом.
- 1Откройте конфигуратор, ветка «Общие» → «XDTO-пакеты»
- 2Добавьте новый пакет и задайте пространство имён из схемы
- 3В контекстном меню пакета выберите «Импорт XML-схемы» и укажите .xsd-файл
- 4Проверьте дерево типов: элементы, атрибуты, обязательность
- 5Сохраните конфигурацию и обновите конфигурацию базы данных
Способ 2: ручное создание пакета XDTO
Если готовой схемы нет — например, вы сами проектируете формат обмена — пакет строится вручную. Создайте пакет, задайте пространство имён, затем добавляйте элементы структуры через контекстное меню: «Добавить объектный тип» для сложных сущностей (документ, строка табличной части) и свойства внутри них для полей.
Для каждого свойства задайте имя, тип и кратность. Тип может быть простым (строка, число, дата, булево из пространства имён http://www.w3.org/2001/XMLSchema) или ссылкой на другой объектный тип пакета. Кратность определяет обязательность: минимальное значение 0 делает поле необязательным, значение больше 1 — массивом, аналогом maxOccurs в XSD.
Для ограниченных списков значений создайте тип значения с перечислением допустимых вариантов — это аналог enumeration в XSD. Полезно также задавать ограничения на длину строк и диапазоны чисел: платформа будет проверять их при записи XML и выдаст понятную ошибку вместо некорректного файла.
Программная работа с пакетом: запись и чтение XML
После создания пакета работа с XML идёт через глобальную ФабрикуXDTO. Чтобы сформировать документ, создайте объект XDTO нужного типа, заполните свойства и запишите через ЗаписьXML. Платформа проверит обязательные поля и типы при записи.
Пакет = ФабрикаXDTO.Пакеты.Получить("http://example.com/exchange");
ТипДокумент = Пакет.КорневыеСвойства.Получить("Документ").Тип;
Док = ФабрикаXDTO.Создать(ТипДокумент);
Док.Номер = "А-125";
Док.Дата = ТекущаяДатаСеанса();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\document.xml");
ФабрикаXDTO.ЗаписатьXML(Запись, Док);
Запись.Закрыть();Чтение выполняется симметрично: откройте файл через ЧтениеXML и вызовите ФабрикаXDTO.ПрочитатьXML с указанием ожидаемого типа. Если входящий файл не соответствует схеме — отсутствует обязательный элемент или тип данных не совпадает — платформа выбросит исключение с описанием проблемного элемента. Это и есть главная ценность схемы: ошибки формата выявляются на входе, а не в середине бизнес-логики.
Для проверки файла без загрузки данных используйте метод Проверить объектов XDTO или чтение с валидацией. Это удобно для приёмки файлов от контрагентов: сначала валидация по схеме, потом разбор содержимого.
Проверка результата и контрольные точки
После создания или импорта схемы проверьте её на реальных данных. Сформируйте тестовый XML через пакет, затем прочитайте его обратно — структура должна совпадать без потерь. Если обмен идёт с внешней системой, возьмите эталонный файл контрагента и попробуйте прочитать его своим пакетом.
Как проверить результат
Совпадает с targetNamespace из XSD-файла или спецификации формата
Пустое или произвольное — XML не пройдёт валидацию на стороне приёмника
Файл читается без исключений, все поля заполнены
Ошибка валидации или пустые свойства после чтения
При записи пустого обязательного поля платформа выдаёт ошибку
Записывается XML без обязательных элементов — схема описана мягко
Совпадает со спецификацией формата
Приёмная система отклоняет файл из-за неверной последовательности
Отдельно проверьте граничные случаи: пустые необязательные поля, максимальные длины строк, спецсимволы в текстах (амперсанд, кавычки — они должны корректно экранироваться), даты в нужном формате. Большинство расхождений с внешними системами возникает именно на форматах дат и чисел, а не на структуре.
Типичные ошибки и ограничения механизма
Частая проблема — расхождение пространств имён. Если в XSD указано одно пространство, а в пакете задано другое, чтение файлов внешней системы будет завершаться ошибкой «не найден корневой элемент». Всегда копируйте targetNamespace из исходной схемы точно, включая регистр символов и завершающие слэши.
Вторая группа ошибок — неподдерживаемые конструкции XSD. Платформа 1С не реализует полный стандарт XML Schema: сложные сценарии с группами подстановки, рекурсивными ссылками через import, некоторыми видами ограничений могут импортироваться частично или не импортироваться вовсе. В таких случаях схему упрощают вручную до рабочего подмножества либо обрабатывают XML без пакета, через ЧтениеXML.
Альтернативы: когда пакет XDTO не нужен
Не каждый XML требует схемы. Если формат простой, стабильный и полностью под вашим контролем (например, выгрузка между двумя своими базами), достаточно ЗаписьXML/ЧтениеXML без пакета — кода меньше, а гибкости больше. Схема здесь добавит только затраты на сопровождение.
Как выбрать подход
Для обменов по стандартам EnterpriseData или через планы обмена пакеты XDTO уже встроены в типовые конфигурации — создавать свои не требуется. Проверьте существующие пакеты в конфигурации перед тем, как добавлять новый: возможно, нужный формат уже описан.
Частые вопросы
Чем пакет XDTO отличается от XSD-файла?
XSD-файл — это текстовое описание схемы в стандарте W3C. Пакет XDTO — то же описание, но в виде объекта метаданных 1С, с которым платформа умеет работать напрямую: валидировать XML, создавать типизированные объекты. Пакет можно получить импортом XSD или построить вручную.
Можно ли выгрузить пакет XDTO обратно в XSD-файл?
Да, в контекстном меню пакета есть команда экспорта в XML-схему. Это удобно, чтобы передать формат контрагенту: вы описали структуру в конфигураторе, выгрузили .xsd и отправили как спецификацию обмена.
Ошибка «Не найден корневой элемент» при чтении XML — что проверять?
В первую очередь пространство имён: оно в пакете должно символ в символ совпадать с пространством корневого элемента входящего файла. Затем проверьте имя корневого элемента и то, что оно объявлено в пакете как корневое свойство, а не только как тип.
Нужно ли обновлять конфигурацию базы данных после изменения пакета?
Да. Пакеты XDTO — полноценные объекты метаданных, поэтому после их добавления или изменения требуется обновление конфигурации базы данных. Без него код, обращающийся к пакету, в пользовательском режиме завершится ошибкой.
Как проверить XML-файл по схеме без загрузки данных в базу?
Прочитайте файл через ФабрикаXDTO.ПрочитатьXML в попытке-исключении: если файл не соответствует схеме, будет выброшено исключение с указанием проблемного элемента. Данные при этом никуда не записываются — это чистая валидация, безопасная для базы.
Платформа не импортирует сложную схему ФНС полностью. Что делать?
Импортируйте только те части схемы, которые реально используются в обмене: уберите неподдерживаемые конструкции, замените группы выбора на необязательные элементы. Рабочего подмножества схемы обычно достаточно для валидации конкретных документов, а полноту проверки обеспечит приёмная сторона.
Что важно запомнить
XSD-схема в 1С реализуется как пакет XDTO: импортируйте готовый .xsd или опишите типы вручную, точно сохраняя пространство имён. Работа с XML идёт через ФабрикуXDTO с автоматической валидацией. Проверяйте схему на эталонных файлах, а изменения рабочих пакетов согласовывайте с контрагентами.