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

Автоматизация · 12 мин

Формат XML в 1С: как сделать выгрузку и загрузку данных

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

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

Способ решения зависит от цели. Для разового переноса данных между одинаковыми конфигурациями достаточно типовой обработки «Выгрузка и загрузка данных XML». Для обмена между разными конфигурациями используются правила конвертации и «Универсальный обмен данными в формате XML». Для интеграций и нестандартных задач XML формируют программно — объектами ЗаписьXML и ЧтениеXML либо через XDTO-пакеты.

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

Какие задачи решает XML в 1С и как выбрать инструмент

Прежде чем что-то делать, определите сценарий. От него зависит инструмент, объём работы и риски. Один и тот же файл XML технически можно создать тремя разными способами, но трудозатраты отличаются в разы.

Основные сценарии: перенос данных между информационными базами (миграция, копия справочников), регулярный обмен с другой системой (сайт, WMS, банк), формирование регламентированного файла (отчётность, электронный документооборот) и разовая выгрузка «для анализа» во внешнем инструменте.

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

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

Базы на одинаковой конфигурации, нужен разовый переносИспользуйте типовую обработку «Выгрузка и загрузка данных XML»
Конфигурации разные или структура данных отличаетсяНужны правила конвертации (Конвертация данных 2/3) и универсальный обмен
Нужен файл по своей структуре или по внешней XSD-схемеФормируйте XML программно: ЗаписьXML или XDTO-пакеты
Нужен регулярный автоматический обменНастройте план обмена или регламентное задание с программной выгрузкой

Выгрузка и загрузка данных типовой обработкой

Самый быстрый способ сделать XML-файл с данными — обработка «Выгрузка и загрузка данных XML». Она входит в поставку многих типовых конфигураций, а также доступна на диске ИТС. Обработка выгружает объекты вместе со ссылками и при загрузке корректно восстанавливает связи между ними.

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

Обратите внимание на флажок «Выгружать при необходимости» (в разных версиях формулировка отличается): он включает выгрузку связанных по ссылкам объектов. Если его отключить, в приёмнике документы могут ссылаться на несуществующие элементы справочников.

Обмен между разными конфигурациями через правила конвертации

Если источник и приёмник — разные конфигурации (например, выгрузка из «Управления торговлей» в «Бухгалтерию»), простая обработка не подойдёт: структуры объектов не совпадают. Здесь применяется «Универсальный обмен данными в формате XML» вместе с правилами конвертации, созданными в конфигурации «Конвертация данных».

Правила конвертации описывают, какой объект источника в какой объект приёмника превращается и как сопоставляются реквизиты. Для пары типовых конфигураций правила часто уже есть в поставке или на портале 1С — создавать их с нуля требуется только для самописных или сильно доработанных конфигураций.

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

Сравнение вариантов переноса

Выгрузка и загрузка данных XML

Быстро и без настройки, но только между идентичными конфигурациями. Не подходит для разных структур.

Универсальный обмен с правилами

Гибко, работает между разными конфигурациями, но требует правил конвертации и времени на их настройку и отладку.

План обмена

Подходит для регулярной синхронизации: переносит только изменённые данные. Требует первоначальной настройки узлов.

Программная выгрузка (ЗаписьXML/XDTO)

Полный контроль над форматом, любой внешний приёмник. Требует навыков программирования на встроенном языке.

Программное создание XML-файла через ЗаписьXML

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

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

Запись = Новый ЗаписьXML;

Запись.ОткрытьФайл("C:\Обмен\Товары.xml", "UTF-8");

Запись.ЗаписатьОбъявлениеXML();

Запись.ЗаписатьНачалоЭлемента("Товары");

Запрос = Новый Запрос("ВЫБРАТЬ Код, Наименование ИЗ Справочник.Номенклатура");

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Запись.ЗаписатьНачалоЭлемента("Товар");

Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));

Запись.ЗаписатьТекст(Выборка.Наименование);

Запись.ЗаписатьКонецЭлемента();

КонецЦикла;

Запись.ЗаписатьКонецЭлемента(); // Товары

Запись.Закрыть();

Метод Закрыть() обязателен: без него буфер может не сброситься на диск, и файл окажется пустым или обрезанным. Кодировку указывайте явно — для обмена с внешними системами стандарт де-факто UTF-8.

bsl
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\data.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корень");
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();

Чтение и разбор XML-файла в 1С

Обратная задача — загрузить XML, созданный внешней системой. Для простых файлов достаточно объекта ЧтениеXML: он последовательно проходит по узлам, и вы реагируете на типы узлов «НачалоЭлемента», «Текст», «КонецЭлемента».

Чтение = Новый ЧтениеXML;

Чтение.ОткрытьФайл("C:\Обмен\Товары.xml");

Пока Чтение.Прочитать() Цикл

Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента

И Чтение.Имя = "Товар" Тогда

КодТовара = Чтение.ПолучитьАтрибут("Код");

// далее читаем текст элемента и создаём/обновляем номенклатуру

КонецЕсли;

КонецЦикла;

Чтение.Закрыть();

Для файлов, построенных по форматам самой 1С (выгрузки конфигураций, файлы планов обмена), есть более удобный путь: ПрочитатьXML() и ЗаписатьXML() сериализуют объекты целиком, без ручного разбора узлов. А если внешняя система предоставляет XSD-схему, удобнее всего XDTO: платформа сама проверит структуру и типы данных по схеме.

Проверка результата и типичные ошибки

После формирования или загрузки XML обязательно проверьте результат, а не только факт завершения операции. Файл может быть создан, но содержать неполные данные; загрузка может завершиться с частичными ошибками, которые видны только в протоколе.

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

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

Файл открывается в браузере или редакторе
Норма

Структура отображается как дерево, нет сообщения об ошибке синтаксиса XML

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

Ошибка разбора — чаще всего незакрытый элемент или недопустимый символ

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

Кириллица читается корректно, в объявлении указана UTF-8

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

Кракозябры — файл записан в другой кодировке, чем ожидает приёмник

Количество объектов после загрузки
Норма

Совпадает с количеством в источнике (с учётом фильтров)

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

Часть объектов отсутствует — смотрите протокол загрузки

Ссылки в документах
Норма

Все поля заполнены реальными элементами справочников

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

«Объект не найден» — связанные объекты не выгружены или не найдены при загрузке

Типичные ошибки
01
Не вызван Закрыть() у ЗаписьXML — файл пустой или обрезан в конце.
02
Пропущен ЗаписатьКонецЭлемента() — невалидный XML, приёмник не может его разобрать.
03
Загрузка в рабочую базу без копии — объекты с совпадающими GUID перезаписаны, данные потеряны.
04
Выгрузка без связанных объектов — в приёмнике документы ссылаются на несуществующие элементы.
05
Неверная кодировка — русские названия превращаются в нечитаемые символы в сторонней системе.
06
Создание объектов без поиска существующих — дубли контрагентов и номенклатуры после каждой загрузки.

Если файл большой (сотни мегабайт), не читайте его целиком в строку или через DOM-подобные механизмы — используйте потоковое ЧтениеXML, оно обрабатывает файл последовательно и не требует загрузки всего содержимого в память.

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

Ограничения и когда стоит привлечь специалиста

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

С осторожностью подходите к загрузке в рабочую базу, настройке правил конвертации и регулярным обменам с критичными данными (остатки, цены, взаиморасчёты). Ошибка в правилах сопоставления может незаметно исказить учётные данные, и обнаружится это только при сверке. Такие задачи разумно сначала прогнать на тестовой копии с контрольной сверкой итогов.

Итог

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

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

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

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

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

Почему после загрузки в документах появились записи «Объект не найден»?

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

Можно ли выгрузить в XML не все данные, а только за период?

Да. В типовой обработке выгрузки отбор по периоду доступен для документов и регистров. В универсальном обмене отборы гибче — по периоду, организации и произвольным условиям, задаваемым в правилах или настройках обработки.

Чем XDTO отличается от ЗаписьXML и когда что использовать?

ЗаписьXML — ручная запись элементов и атрибутов: полный контроль, но вся проверка структуры на вас. XDTO работает по схеме (XSD): платформа сама проверяет типы и обязательность полей, удобно для обмена с системами, предоставившими схему. Для простого файла своего формата обычно достаточно ЗаписьXML.

Файл создан, но сторонняя система показывает иероглифы вместо русских букв. Что делать?

Проблема в кодировке. Укажите кодировку явно при открытии записи — Запись.ОткрытьФайл(ИмяФайла, "UTF-8") — и убедитесь, что приёмная система ожидает именно её. Если система требует windows-1251, передайте это значение вторым параметром.

Как автоматизировать регулярную выгрузку XML по расписанию?

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