Разработка и Конфигурация · 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 и наоборот, даже если оба содержат одни и те же товары.
Сравнение подходов к обмену
Подходит для типовых интеграций: настройка сводится к сопоставлению данных. Ограничение — нестандартные реквизиты придётся передавать через дополнительные свойства.
Подходит для интеграции с системами, которые диктуют свою схему. Требует описания пакета XDTO и ручной обработки всех полей.
Подходит для разового разбора простых файлов без схемы. Хрупко: любое изменение структуры файла ломает обработку.
XDTO-пакеты: как 1С описывает структуру XML
XDTO (XML Data Transfer Objects) — механизм платформы, который связывает XML-структуру с типами данных 1С. Пакет XDTO описывает пространство имён, типы объектов, их свойства, типы свойств и обязательность. Типовые конфигурации содержат десятки готовых пакетов — для EnterpriseData, CommerceML, обмена с банками и контролирующими органами.
Работа через XDTO даёт два ключевых преимущества перед «ручным» разбором. Во-первых, платформа сама проверяет соответствие данных схеме: если обязательное свойство отсутствует или тип не совпадает, вы получите понятную ошибку до записи в базу. Во-вторых, сериализация и десериализация выполняются одной строкой — через СериализаторXDTO или фабрику XDTO.
Для собственного формата пакет XDTO добавляется в конфигураторе: ветка «Общие — XDTO-пакеты». Там задаётся пространство имён, затем создаются типы объектов и их свойства с указанием типа (строка, число, дата, ссылка на другой тип пакета). После этого чтение файла сводится к вызову ФабрикаXDTO.ПрочитатьXML() с указанием чтения XML и ожидаемого типа.
Программное чтение и запись XML без схемы
Когда схемы нет или файл разбирается разово, используются потоковые объекты ЧтениеXML и ЗаписьXML. Они работают последовательно: узел за узлом, без загрузки всего документа в память, что важно для больших выгрузок на сотни мегабайт.
Типовой цикл чтения выглядит так: открыть файл, в цикле вызывать Прочитать(), анализировать ТипУзла (начало элемента, текст, конец элемента) и локальное имя узла. Атрибуты читаются через ЗначениеАтрибута() или ПолучитьАтрибут() в момент, когда текущий узел — начало элемента.
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("C:\обмен\catalog.xml");
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
И Чтение.ЛокальноеИмя = "Товар" Тогда
Ид = Чтение.ПолучитьАтрибут("Ид");
// обработка товара
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();При записи соблюдайте парность: каждому ЗаписатьНачалоЭлемента() должен соответствовать ЗаписатьКонецЭлемента(). Пропущенный закрывающий тег делает весь файл невалидным, причём ошибка проявится только на стороне приёмника. После записи вызывайте Закрыть() — иначе буфер может не сброситься в файл.
- 1Определите структуру: какие объекты выгружаете, какие поля обязательны, какие типы данных у каждого поля
- 2Решите, нужна ли схема: для регулярного обмена создайте XDTO-пакет, для разовой задачи достаточно ЗаписьXML
- 3Сформируйте файл: запишите корневой элемент с пространством имён, затем объекты с атрибутами-идентификаторами
- 4Проверьте файл валидатором или повторным чтением в тестовой базе
- 5Передайте файл приёмнику и зафиксируйте результат загрузки в журнале обмена
Как проверить XML-файл перед загрузкой или отправкой
Проверка файла до отправки экономит часы разбора на стороне приёмника. Минимальный набор проверок: файл открывается как XML (нет синтаксических ошибок), корневой элемент и пространство имён соответствуют ожидаемому формату, обязательные узлы присутствуют, а ссылочные идентификаторы не пустые.
Синтаксическую валидность быстро проверяет любой браузер или текстовый редактор с поддержкой XML: некорректный файл не откроется деревом. Проверку по схеме удобно делать прямо в 1С — чтением через фабрику XDTO нужного пакета: если файл не соответствует схеме, платформа выдаст ошибку с указанием свойства.
Как проверить результат
Структура разворачивается, подсвечиваются элементы
Ошибка разбора, указание на строку с некорректным символом
Совпадает с пространством, ожидаемым механизмом загрузки
Другое значение xmlns — файл будет прочитан, но объекты не распознаются
Атрибуты Ид/GUID заполнены у всех объектов
Пустые идентификаторы — в приёмнике появятся дубли или битые ссылки
UTF-8, кириллица читается корректно
Кракозябры в наименованиях — файл сохранён в ANSI
Отдельно проверяйте специальные символы в текстовых значениях. Символы &, <, > и кавычки обязаны быть экранированы. Если выгрузка формируется конкатенацией строк (что само по себе плохая практика), неэкранированный амперсанд в наименовании товара сломает весь файл.
Типичные ошибки при работе с XML в 1С
Большинство проблем с XML-обменом сводится к нескольким повторяющимся сценариям. Их знание позволяет диагностировать сбой за минуты, а не за часы.
Отдельно стоит проблема «молчаливых» пропусков: типовая загрузка часто пишет ошибки в журнал регистрации, а не в интерфейс. Если объектов в базе меньше, чем ожидалось, первым делом откройте журнал регистрации с отбором по событию обмена данными — там обычно указаны и причина, и конкретный объект.
При отладке обмена сохраняйте проблемный файл до его исправления. Сравнение «было/стало» по двум версиям файла — самый быстрый способ понять, какое именно изменение структуры или данных вызвало сбой.
Когда XML не подходит: альтернативы и ограничения
XML остаётся стандартом для обменов, регламентированных форматами, но в произвольных интеграциях у него есть альтернативы. JSON компактнее и быстрее разбирается, поэтому веб-сервисы и HTTP-API чаще работают именно с ним — платформа 1С поддерживает ЧтениеJSON/ЗаписьJSON аналогично XML.
Для обмена между двумя базами 1С без промежуточных файлов эффективнее сериализация через СериализаторXDTO в хранилище значения или прямые COM/HTTP-вызовы. А для больших табличных данных (прайсы, остатки) плоский CSV иногда практичнее: его проще формировать и проверять глазами, хотя он не передаёт иерархию и типы.
Как выбрать действие
Главное ограничение 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 перед записью.