Автоматизация · 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-файл с данными — обработка «Выгрузка и загрузка данных XML». Она входит в поставку многих типовых конфигураций, а также доступна на диске ИТС. Обработка выгружает объекты вместе со ссылками и при загрузке корректно восстанавливает связи между ними.
Важное условие: конфигурации источника и приёмника должны иметь одинаковые метаданные по выгружаемым объектам. Если в приёмнике у справочника нет реквизита, который есть в источнике, данные этого реквизита при загрузке потеряются без предупреждения.
Обратите внимание на флажок «Выгружать при необходимости» (в разных версиях формулировка отличается): он включает выгрузку связанных по ссылкам объектов. Если его отключить, в приёмнике документы могут ссылаться на несуществующие элементы справочников.
Обмен между разными конфигурациями через правила конвертации
Если источник и приёмник — разные конфигурации (например, выгрузка из «Управления торговлей» в «Бухгалтерию»), простая обработка не подойдёт: структуры объектов не совпадают. Здесь применяется «Универсальный обмен данными в формате XML» вместе с правилами конвертации, созданными в конфигурации «Конвертация данных».
Правила конвертации описывают, какой объект источника в какой объект приёмника превращается и как сопоставляются реквизиты. Для пары типовых конфигураций правила часто уже есть в поставке или на портале 1С — создавать их с нуля требуется только для самописных или сильно доработанных конфигураций.
Порядок работы: загрузите правила в обработку универсального обмена, выберите объекты и период, выгрузите файл, затем в приёмнике выполните загрузку с теми же правилами. При ошибках сопоставления смотрите протокол — обработка пишет, какие объекты не конвертированы и почему.
Сравнение вариантов переноса
Быстро и без настройки, но только между идентичными конфигурациями. Не подходит для разных структур.
Гибко, работает между разными конфигурациями, но требует правил конвертации и времени на их настройку и отладку.
Подходит для регулярной синхронизации: переносит только изменённые данные. Требует первоначальной настройки узлов.
Полный контроль над форматом, любой внешний приёмник. Требует навыков программирования на встроенном языке.
Программное создание XML-файла через ЗаписьXML
Когда нужен файл произвольной структуры — например, для загрузки каталога товаров на сайт или передачи данных в стороннюю систему — XML формируют кодом. Базовый инструмент — объект ЗаписьXML: он последовательно пишет элементы, атрибуты и текст, сам следит за кодировкой и экранированием спецсимволов.
Логика простая: открыть запись в файл или строку, записать объявление XML, затем в цикле по данным записывать элементы, обязательно закрывая каждый открытый элемент. Пропущенный ЗаписатьКонецЭлемента() — самая частая причина невалидного файла.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Товары.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Товары");
Запрос = Новый Запрос("ВЫБРАТЬ Код, Наименование ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Запись.ЗаписатьНачалоЭлемента("Товар");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // Товары
Запись.Закрыть();
Метод Закрыть() обязателен: без него буфер может не сброситься на диск, и файл окажется пустым или обрезанным. Кодировку указывайте явно — для обмена с внешними системами стандарт де-факто UTF-8.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\data.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Корень");
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();Чтение и разбор XML-файла в 1С
Обратная задача — загрузить XML, созданный внешней системой. Для простых файлов достаточно объекта ЧтениеXML: он последовательно проходит по узлам, и вы реагируете на типы узлов «НачалоЭлемента», «Текст», «КонецЭлемента».
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("C:\Обмен\Товары.xml");
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
И Чтение.Имя = "Товар" Тогда
КодТовара = Чтение.ПолучитьАтрибут("Код");
// далее читаем текст элемента и создаём/обновляем номенклатуру
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Для файлов, построенных по форматам самой 1С (выгрузки конфигураций, файлы планов обмена), есть более удобный путь: ПрочитатьXML() и ЗаписатьXML() сериализуют объекты целиком, без ручного разбора узлов. А если внешняя система предоставляет XSD-схему, удобнее всего XDTO: платформа сама проверит структуру и типы данных по схеме.
Проверка результата и типичные ошибки
После формирования или загрузки XML обязательно проверьте результат, а не только факт завершения операции. Файл может быть создан, но содержать неполные данные; загрузка может завершиться с частичными ошибками, которые видны только в протоколе.
Как проверить результат
Структура отображается как дерево, нет сообщения об ошибке синтаксиса XML
Ошибка разбора — чаще всего незакрытый элемент или недопустимый символ
Кириллица читается корректно, в объявлении указана UTF-8
Кракозябры — файл записан в другой кодировке, чем ожидает приёмник
Совпадает с количеством в источнике (с учётом фильтров)
Часть объектов отсутствует — смотрите протокол загрузки
Все поля заполнены реальными элементами справочников
«Объект не найден» — связанные объекты не выгружены или не найдены при загрузке
Если файл большой (сотни мегабайт), не читайте его целиком в строку или через 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С, а не с клиентского компьютера.