Разработка и Конфигурация · 12 мин
XSD-схема в 1С: что это и как с ней работать
Что такое XSD-схема в 1С, как она связана с пакетами XDTO, где применяется при обмене данными и веб-сервисах, как создать и проверить схему в конфигураторе.
XSD-схема (XML Schema Definition) — это формальное описание структуры XML-документа: какие элементы в нём допустимы, какого они типа, в каком порядке следуют и какие атрибуты могут содержать. В экосистеме 1С XSD-схемы используются как основа механизма XDTO (XML Data Transfer Objects), через который платформа обменивается данными с внешними системами, веб-сервисами и другими информационными базами.
Когда вы загружаете выписку из банка, отправляете данные в ЕГАИС, вызываете веб-сервис контрагента или настраиваете типовой обмен между конфигурациями — где-то «под капотом» почти всегда работает XSD-схема. Она определяет, как платформа сериализует объекты в XML и как проверяет входящие документы на корректность.
Понимание устройства XSD-схем нужно разработчику 1С в трёх типовых ситуациях: при создании собственного пакета XDTO для обмена, при отладке ошибок вида «ошибка проверки данных XDTO» и при подключении внешних веб-сервисов по WSDL-описанию, которое тоже опирается на XML Schema.
Что такое XSD-схема простыми словами
XML-документ сам по себе — просто текст с тегами. Ничто не мешает отправителю положить сумму строкой, а дату записать в произвольном формате. XSD-схема решает эту проблему: она заранее договаривает стороны обмена о «контракте» — какие поля обязательны, какие типы данных допустимы, сколько раз элемент может повторяться.
Сама схема — тоже XML-файл, обычно с расширением .xsd. В нём описываются элементы (xs:element), простые и составные типы (xs:simpleType, xs:complexType), атрибуты, ограничения на значения (длина строки, диапазон чисел, перечисление допустимых значений) и порядок следования элементов.
Ключевое понятие схемы — пространство имён (namespace). Это уникальный идентификатор, обычно в виде URI, который отличает ваш набор типов от чужих. Два разных поставщика могут назвать элемент Contragent, и конфликта не будет, если пространства имён различаются. В 1С пространство имён пакета XDTO задаётся при его создании и менять его потом без крайней необходимости не стоит: все выгрузки, сформированные по старому имени, перестанут проходить проверку.
Как XSD связана с пакетами XDTO в 1С
В конфигураторе 1С XSD-схемы живут в ветке «Общие → Пакеты XDTO». Каждый пакет — это фактически одна схема со своим пространством имён, содержащая набор типов значений и типов объектов. Пакет можно импортировать из готового XSD-файла, полученного от контрагента или из стандарта обмена, либо построить вручную в редакторе.
Платформа использует пакет XDTO в двух направлениях. При выгрузке объект конфигурации (например, документ) преобразуется в объект XDTO по правилам сериализации, затем записывается в XML с проверкой по схеме. При загрузке входящий XML сначала валидируется — и только потом данные читаются в объекты XDTO и далее в объекты базы. Если входящий файл не соответствует схеме, платформа выдаёт ошибку проверки ещё до начала бизнес-логики, что защищает базу от «мусорных» данных.
Кроме пользовательских пакетов, в платформе есть системные: например, пакет http://www.1c.ru/1cFresh/ApplicationExtensions/Manifest/a.b.c.d или стандартные пространства имён для веб-сервисов. Их не нужно редактировать — они обслуживают внутренние механизмы платформы.
Где XSD-схемы применяются на практике
Первый и самый массовый сценарий — веб-сервисы. Когда вы добавляете в конфигурацию WS-ссылку по WSDL-описанию, платформа автоматически разбирает вложенные XSD-схемы и создаёт по ним модель типов: параметры операций, возвращаемые структуры, фабрика XDTO. Ошибки «не удалось разобрать WSDL» почти всегда означают проблему именно в схемах — циклические импорты, недоступные внешние XSD или нестандартные конструкции.
Второй сценарий — обмены данными. Механизм EnterpriseData, обмены с сайтами по CommerceML, выгрузки в банковские системы и государственные порталы построены на формализованных XSD. Типовые конфигурации поставляют нужные пакеты XDTO в составе, но при доработке формата (например, добавлении собственного поля в обмен с сайтом) вам придётся расширять схему самостоятельно.
Третий сценарий — произвольная интеграция «с нуля». Контрагент присылает XSD-файл формата накладной, вы импортируете его в пакет XDTO и дальше работаете с данными как с объектами 1С: заполняете свойства, вызываете проверку, сериализуете в XML. Это заметно удобнее и надёжнее ручной сборки XML через ЗаписьXML.
Способы формирования XML
Подходит для регулярных обменов и интеграций: автоматическая валидация, типизация, удобная работа из кода. Требует актуальной схемы.
Подходит для разовых выгрузок и простых форматов без жёсткого контракта. Нет проверки структуры — ошибки формата обнаружит только принимающая сторона.
Подходят для обменов между базами 1С: платформа сама управляет схемой. Не подходит для внешних систем с собственным форматом.
Как создать и импортировать пакет XDTO в конфигураторе
Работа ведётся в конфигураторе, ветка «Общие → Пакеты XDTO». Два пути: импорт готовой схемы или ручное построение. Импорт быстрее и исключает опечатки, ручное построение даёт полный контроль над структурой.
- 1Откройте конфигуратор, в дереве конфигурации перейдите в «Общие → Пакеты XDTO».
- 2Вызовите контекстное меню ветки и выберите «Импорт XML-схемы…», укажите XSD-файл.
- 3Проверьте, что платформа создала пакет с корректным пространством имён и без ошибок разбора.
- 4Откройте пакет, убедитесь, что типы объектов и их свойства соответствуют документации на формат.
- 5Обновите конфигурацию базы данных, чтобы пакет стал доступен из встроенного языка.
При ручном создании добавьте пакет, задайте ему пространство имён (используйте URI, который контролируете, например домен вашей организации), затем создавайте типы объектов и их свойства. Для каждого свойства указываются имя, тип, нижняя и верхняя границы количества (0..1, 1..1, 0..−1 для неограниченного списка), возможность пустого значения.
После создания пакета работа из кода выглядит типичным образом: получить фабрику, создать объект XDTO по типу, заполнить свойства, проверить и записать в XML.
Фабрика = ФабрикаXDTO;
ТипЗаказ = Фабрика.Тип("http://example.org/order", "Заказ");
Заказ = Фабрика.Создать(ТипЗаказ);
Заказ.Номер = "А-1024";
Заказ.Дата = ТекущаяДатаСеанса();
Заказ.Проверить();
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку("UTF-8");
Фабрика.ЗаписатьXML(Запись, Заказ);
ТекстXML = Запись.Закрыть();Метод Проверить() выполняет валидацию объекта по схеме до записи — вызывайте его всегда. Это дешёвая проверка, которая отлавливает незаполненные обязательные поля и нарушения типов до того, как файл уйдёт контрагенту.
Как проверить XML по схеме и отладить ошибки
Самая частая ошибка при работе с XDTO — «Ошибка проверки данных XDTO» с указанием свойства и причины: несоответствие типа, нарушение обязательности, недопустимое значение фасета. Текст ошибки содержит путь к проблемному свойству — начинайте разбор именно с него, а не с общего пересмотра кода.
Как проверить результат
Метод Проверить() завершается без исключения
Исключение с текстом о несоответствии типа или обязательности свойства
Корневой элемент содержит ожидаемый namespace из пакета XDTO
Пространство имён отсутствует или отличается от схемы контрагента
Файл читается через ЧтениеXML и фабрику без ошибок, данные на местах
Ошибка разбора или пустые свойства после чтения
Полезный приём отладки — выгрузить сформированный XML в файл и открыть его в редакторе с поддержкой XSD-валидации, привязав схему контрагента. Так вы увидите расхождения формата глазами принимающей стороны: лишние элементы, неверный порядок, незаполненные обязательные узлы.
Отдельный класс проблем — даты, числа и булевы значения. XML Schema требует строгих форматов: дата-время вида 2026-01-15T10:30:00, булево как true/false, десятичный разделитель — точка. Фабрика XDTO обычно конвертирует типы 1С корректно, но при ручной сборке XML или заполнении строковых свойств эти правила легко нарушить.
Типичные ошибки и ограничения механизма
Важное ограничение: механизм XDTO — это модель данных, а не маппер на объекты конфигурации. Платформа не превратит объект XDTO в документ автоматически — заполнение реквизитов базы из свойств XDTO (и обратно) вы пишете сами или берёте из типовых правил обмена. Для сложных маппингов имеет смысл использовать Конвертацию данных 3.0, которая как раз работает поверх XDTO и EnterpriseData.
Ещё одна граница: WSDL некоторых внешних сервисов использует конструкции, которые платформа разбирает с ограничениями (сложные циклические ссылки, устаревшие кодировки SOAP). Если WS-ссылка не создаётся, практичный обходной путь — вызывать сервис через HTTPСоединение, формируя тело запроса вручную или через пакет XDTO, построенный по схеме из WSDL.
XSD-схема или ручная сборка XML: что выбрать
Как выбрать подход
Критерий простой: чем дольше живёт интеграция и чем строже контракт формата, тем выше выгода от XSD и XDTO. Разовые задачи дешевле решить прямой записью XML, но как только появляется вторая версия формата или требование валидации, схема окупает время на её внедрение.
Что важно запомнить
XSD-схема — это контракт структуры XML-документа. В 1С она оформляется пакетом XDTO: импортируется из XSD-файла или строится вручную, даёт типизированную работу из кода и автоматическую проверку данных. Перед отправкой всегда вызывайте Проверить(), не меняйте пространство имён действующего пакета и тестируйте изменения схемы на копии базы.
Частые вопросы
Чем пакет XDTO отличается от XSD-файла?
XSD-файл — это текстовое описание схемы на диске. Пакет XDTO — объект конфигурации 1С, в который схема импортируется и на основе которого платформа строит типы, доступные из встроенного языка. Один пакет соответствует одному пространству имён схемы.
Можно ли выгрузить пакет XDTO обратно в XSD-файл?
Да, в конфигураторе для пакета доступна выгрузка схемы в файл через контекстное меню. Это удобно, чтобы передать актуальный формат контрагенту или проверить выгружаемые XML во внешнем валидаторе.
Почему возникает ошибка «Ошибка проверки данных XDTO» при загрузке файла?
Входящий XML не соответствует схеме пакета: нарушен тип значения, отсутствует обязательный элемент, не совпадает пространство имён или порядок элементов. Текст ошибки указывает конкретное свойство — сопоставьте его со схемой и с фактическим содержимым файла.
Обязательно ли создавать пакет XDTO для работы с веб-сервисом?
Нет. При добавлении WS-ссылки платформа сама разбирает WSDL и строит модель типов, включая вложенные XML-схемы. Собственный пакет нужен, когда вы разрабатываете свой формат обмена или публикуете собственный веб-сервис с нестандартными типами данных.
Что делать, если контрагент изменил схему обмена?
Получите новый XSD-файл, обновите пакет XDTO в копии базы, скорректируйте код заполнения и чтения свойств под изменившиеся типы, проверьте выгрузку и загрузку на тестовых данных. Только после согласования даты перехода с контрагентом переносите изменения в рабочую базу.
Поддерживает ли 1С все возможности XML Schema?
Платформа реализует основной практически востребованный подмножество XSD: типы, фасеты, списки, наследование, импорты схем. Экзотические конструкции и некоторые варианты переопределения типов могут разбираться с ограничениями — при импорте чужой схемы всегда проверяйте результат на тестовых документах.