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

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

1С и XML: структура файлов обмена и практическая работа с форматом

Как устроена XML-структура в 1С: схемы XDTO, форматы EnterpriseData и CommerceML, чтение и запись XML, проверка файлов обмена и типичные ошибки при работе.

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

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

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

Из чего состоит XML-документ в контексте 1С

Базовая единица XML — элемент с открывающим и закрывающим тегом: <Номенклатура>...</Номенклатура>. Элементы вкладываются друг в друга, образуя дерево, а дополнительные свойства записываются атрибутами внутри открывающего тега. 1С активно использует оба способа: ссылочные значения и идентификаторы чаще уходят в атрибуты, а составные данные — во вложенные элементы.

Критически важное понятие — пространство имён (namespace). Оно задаётся атрибутом xmlns и отделяет элементы одного формата от другого. Например, в выгрузках между конфигурациями 1С встречается пространство http://v8.1c.ru/data, а в обмене с сайтами — urn:1C.ru:commerceml_2. Если пространство имён в файле не совпадает с ожидаемым, типовая загрузка пройдёт «молча»: файл прочитается, но ни один объект не распознается.

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

Стандартные форматы обмена: EnterpriseData, CommerceML и форматы конфигураций

1С использует несколько устоявшихся XML-форматов, и путать их нельзя — у каждого своё назначение и своя схема. Выбор формата определяется не разработчиком, а каналом обмена: сайт, другая конфигурация, банк или оператор ЭДО.

ФорматГде применяетсяОсобенности структуры
EnterpriseDataОбмен между конфигурациями 1С через подсистему обмена данными БСПКорневой элемент с телом сообщения, объекты описываются как «Объект.ИмяТипа»
CommerceMLОбмен с сайтами (каталоги, заказы), интеграция с БитриксОтдельные секции каталога, классификатора, предложений и документов заказов
Формат выгрузки конфигурации (dump)Выгрузка/загрузка базы, перенос данных обработкамиЭлементы по правилам конвертации данных, узлы Объект/Свойство/Ссылка
Отраслевые форматы (ЭДО, отчётность)Счета-фактуры, УПД, регламентированная отчётностьЖёстко заданы приказами и стандартами, изменять структуру нельзя

Практический вывод: прежде чем разбирать «нерабочий» файл, определите его формат по корневому элементу и пространству имён. Файл CommerceML не загрузится механизмом EnterpriseData и наоборот, даже если оба содержат одни и те же товары.

Сравнение подходов к обмену

Стандартный формат (EnterpriseData, CommerceML)

Подходит для типовых интеграций: настройка сводится к сопоставлению данных. Ограничение — нестандартные реквизиты придётся передавать через дополнительные свойства.

Собственная XML-структура через XDTO

Подходит для интеграции с системами, которые диктуют свою схему. Требует описания пакета XDTO и ручной обработки всех полей.

Прямое чтение через ЧтениеXML

Подходит для разового разбора простых файлов без схемы. Хрупко: любое изменение структуры файла ломает обработку.

XDTO-пакеты: как 1С описывает структуру XML

XDTO (XML Data Transfer Objects) — механизм платформы, который связывает XML-структуру с типами данных 1С. Пакет XDTO описывает пространство имён, типы объектов, их свойства, типы свойств и обязательность. Типовые конфигурации содержат десятки готовых пакетов — для EnterpriseData, CommerceML, обмена с банками и контролирующими органами.

Работа через XDTO даёт два ключевых преимущества перед «ручным» разбором. Во-первых, платформа сама проверяет соответствие данных схеме: если обязательное свойство отсутствует или тип не совпадает, вы получите понятную ошибку до записи в базу. Во-вторых, сериализация и десериализация выполняются одной строкой — через СериализаторXDTO или фабрику XDTO.

Для собственного формата пакет XDTO добавляется в конфигураторе: ветка «Общие — XDTO-пакеты». Там задаётся пространство имён, затем создаются типы объектов и их свойства с указанием типа (строка, число, дата, ссылка на другой тип пакета). После этого чтение файла сводится к вызову ФабрикаXDTO.ПрочитатьXML() с указанием чтения XML и ожидаемого типа.

Программное чтение и запись XML без схемы

Когда схемы нет или файл разбирается разово, используются потоковые объекты ЧтениеXML и ЗаписьXML. Они работают последовательно: узел за узлом, без загрузки всего документа в память, что важно для больших выгрузок на сотни мегабайт.

Типовой цикл чтения выглядит так: открыть файл, в цикле вызывать Прочитать(), анализировать ТипУзла (начало элемента, текст, конец элемента) и локальное имя узла. Атрибуты читаются через ЗначениеАтрибута() или ПолучитьАтрибут() в момент, когда текущий узел — начало элемента.

bsl
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("C:\обмен\catalog.xml");
Пока Чтение.Прочитать() Цикл
    Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
        И Чтение.ЛокальноеИмя = "Товар" Тогда
        Ид = Чтение.ПолучитьАтрибут("Ид");
        // обработка товара
    КонецЕсли;
КонецЦикла;
Чтение.Закрыть();

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

Порядок создания собственной XML-выгрузки
  1. 1
    Определите структуру: какие объекты выгружаете, какие поля обязательны, какие типы данных у каждого поля
  2. 2
    Решите, нужна ли схема: для регулярного обмена создайте XDTO-пакет, для разовой задачи достаточно ЗаписьXML
  3. 3
    Сформируйте файл: запишите корневой элемент с пространством имён, затем объекты с атрибутами-идентификаторами
  4. 4
    Проверьте файл валидатором или повторным чтением в тестовой базе
  5. 5
    Передайте файл приёмнику и зафиксируйте результат загрузки в журнале обмена

Как проверить XML-файл перед загрузкой или отправкой

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

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

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

Как проверить результат

Файл открывается как дерево XML
Норма

Структура разворачивается, подсвечиваются элементы

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

Ошибка разбора, указание на строку с некорректным символом

Пространство имён корневого элемента
Норма

Совпадает с пространством, ожидаемым механизмом загрузки

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

Другое значение xmlns — файл будет прочитан, но объекты не распознаются

Идентификаторы ссылок
Норма

Атрибуты Ид/GUID заполнены у всех объектов

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

Пустые идентификаторы — в приёмнике появятся дубли или битые ссылки

Кодировка файла
Норма

UTF-8, кириллица читается корректно

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

Кракозябры в наименованиях — файл сохранён в ANSI

Отдельно проверяйте специальные символы в текстовых значениях. Символы &, <, > и кавычки обязаны быть экранированы. Если выгрузка формируется конкатенацией строк (что само по себе плохая практика), неэкранированный амперсанд в наименовании товара сломает весь файл.

Типичные ошибки при работе с XML в 1С

Большинство проблем с XML-обменом сводится к нескольким повторяющимся сценариям. Их знание позволяет диагностировать сбой за минуты, а не за часы.

Типичные ошибки
01
Формирование XML конкатенацией строк вместо ЗаписьXML — итог: неэкранированные символы и невалидный файл
02
Игнорирование пространства имён при чтении — итог: обработка не находит ни одного узла, хотя файл корректен
03
Чтение большого файла через DOM-построитель целиком — итог: нехватка памяти на сервере при выгрузках в сотни мегабайт
04
Несовпадение версий формата у отправителя и приёмника — итог: часть объектов молча пропускается
05
Передача ссылок без гарантии наличия объекта в приёмнике — итог: битые ссылки и «Объект не найден» в базе-получателе

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

При отладке обмена сохраняйте проблемный файл до его исправления. Сравнение «было/стало» по двум версиям файла — самый быстрый способ понять, какое именно изменение структуры или данных вызвало сбой.
ПЗ
Практическое замечание

Когда XML не подходит: альтернативы и ограничения

XML остаётся стандартом для обменов, регламентированных форматами, но в произвольных интеграциях у него есть альтернативы. JSON компактнее и быстрее разбирается, поэтому веб-сервисы и HTTP-API чаще работают именно с ним — платформа 1С поддерживает ЧтениеJSON/ЗаписьJSON аналогично XML.

Для обмена между двумя базами 1С без промежуточных файлов эффективнее сериализация через СериализаторXDTO в хранилище значения или прямые COM/HTTP-вызовы. А для больших табличных данных (прайсы, остатки) плоский CSV иногда практичнее: его проще формировать и проверять глазами, хотя он не передаёт иерархию и типы.

Маршрут решения

Как выбрать действие

Обмен регламентирован внешней стороной (ЭДО, отчётность, банк)Используйте предписанный XML-формат и типовые механизмы конфигурации, структуру не меняйте
Интеграция с сайтом или внешним APIУточните требования системы: чаще всего это JSON или CommerceML, выбирайте соответствующий механизм
Обмен между двумя конфигурациями 1СНастройте типовой обмен через EnterpriseData и правила конвертации, не пишите свой формат
Разовый перенос данных из нестандартного источникаРазберите файл потоковым ЧтениеXML и сопоставьте поля вручную через обработку

Главное ограничение XML — объём и скорость. Файл на несколько гигабайт нереально ни сформировать, ни загрузить за разумное время; такие задачи решаются порционной выгрузкой (пакетами по N объектов) или прямым подключением к базе-источнику.

Итог

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

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

Частые вопросы

Чем открыть и посмотреть XML-файл выгрузки из 1С?

Для просмотра достаточно браузера или текстового редактора с подсветкой XML — файл отобразится деревом. Для анализа удобнее редакторы с поиском по узлам и сворачиванием веток. Большие файлы (сотни мегабайт) браузер может не открыть — тогда используйте редактор, умеющий работать с большими файлами, или разбейте выгрузку на части.

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

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

Можно ли вручную исправить XML-выгрузку?

Для внутренних обменов между своими базами — да, если вы точно понимаете структуру и сохраняете валидность XML. Для регламентированных документов (УПД, отчётность) ручная правка недопустима: исправляйте данные в учётной системе и формируйте файл заново, иначе он не пройдёт форматный контроль.

Что выбрать для собственной интеграции: XML или JSON?

Если внешняя система уже диктует формат — выбора нет. Для новой интеграции с веб-сервисами JSON обычно удобнее: компактнее и проще в разборе. XML оправдан, когда нужна строгая валидация по схеме, сложная иерархия с пространствами имён или совместимость с существующими механизмами 1С (XDTO, типовые обмены).

Как выгрузить в XML только часть данных, а не весь узел обмена?

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

Почему при формировании XML возникает ошибка о недопустимых символах?

В текстовые значения попали управляющие символы (например, из копирования текста из Word или старых систем) или неэкранированные служебные символы. Формируйте файл только через ЗаписьXML — платформа сама экранирует данные. Если ошибка остаётся, очистите строковые поля от символов с кодами ниже 32 перед записью.