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

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

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

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

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

Практически в любой конфигурации есть готовые механизмы: универсальная обработка «Выгрузка и загрузка данных XML», план обмена, выгрузка по правилам конвертации. Для нестандартных задач используют объекты ЗаписьXML и ЧтениеXML либо механизм XDTO. Выбор зависит от того, куда пойдёт файл: в другую базу 1С, во внешнюю систему или на проверку контролирующему органу.

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

Какие задачи решает XML в 1С и какой способ выбрать

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

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

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

Как выбрать способ

Нужно перенести данные между базами 1С с одинаковой конфигурациейИспользуйте обработку «Выгрузка и загрузка данных XML»
Файл требуется внешней системе по её схемеФормируйте XML кодом через ЗаписьXML или XDTO
Это отчётность или электронный документ для ЭДОИспользуйте штатную выгрузку конфигурации, не пишите XML вручную
Обмен регулярный и двустороннийНастройте план обмена вместо разовых файлов

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

Самый быстрый способ получить XML — обработка «Выгрузка и загрузка данных XML» (файл обычно называется ВыгрузкаЗагрузкаДанныхXML.epf). Она входит в поставку многих типовых конфигураций и доступна на диске ИТС. Открывается через меню «Файл — Открыть» в режиме 1С:Предприятие.

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

Порядок действий
  1. 1
    Откройте обработку «Выгрузка и загрузка данных XML» в режиме 1С:Предприятие
  2. 2
    На закладке «Выгрузка» отметьте нужные объекты метаданных
  3. 3
    Задайте период для документов и при необходимости выгрузку связанных объектов
  4. 4
    Укажите путь и имя XML-файла, нажмите «Выполнить»
  5. 5
    На целевой базе откройте ту же обработку, закладку «Загрузка» и загрузите файл
  6. 6
    Проверьте количество загруженных объектов и целостность ссылок

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

Формирование XML кодом через ЗаписьXML

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

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

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

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

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

Выборка = Справочники.Номенклатура.Выбрать();

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

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

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

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

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

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

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

КонецЦикла;

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

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

Ключевые правила: каждый открытый элемент должен быть закрыт, файл должен иметь один корневой элемент, кодировку указывайте явно — чаще всего UTF-8. Если приёмная сторона требует другую кодировку (например, windows-1251), передайте её вторым параметром метода ОткрытьФайл, иначе кириллица превратится в нечитаемые символы.

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

Обмен через XDTO и фабрику типов

XDTO — механизм платформы для работы с XML по формальной схеме (XSD). Вместо ручного разбора тегов вы описываете пакет XDTO в конфигураторе (ветка «Общие — XDTO-пакеты») или загружаете схему, предоставленную внешней системой, а платформа сама проверяет типы, обязательность полей и вложенность.

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

Типовые конфигурации активно используют XDTO внутри себя: форматы обмена с сайтами (CommerceML), банковские выписки, EnterpriseData для обмена между прикладными решениями. Если ваша задача пересекается с этими стандартами, имеет смысл использовать готовые пакеты конфигурации, а не создавать свои.

Загрузка XML в 1С: практические сценарии

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

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

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

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

Проверка результата и валидация файла

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

Если файл уходит во внешнюю систему, запросите у её владельца XSD-схему и проверьте файл по ней. В 1С это делается программно через объект ЧтениеXML с валидацией или сторонними бесплатными валидаторами. Файл, прошедший проверку по схеме, почти гарантированно будет принят приёмником.

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

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

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

Отображается дерево элементов без сообщений об ошибке

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

Браузер показывает ошибку разбора с номером строки

Кодировка
Норма

Русские буквы читаемы, в объявлении XML указана та же кодировка, что задана при записи

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

Кракозябры вместо кириллицы

Структура по схеме приёмника
Норма

Файл проходит валидацию по XSD без замечаний

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

Ошибки обязательных элементов или типов данных

Загрузка в тестовую базу
Норма

Количество объектов совпадает с ожидаемым, ссылки не битые

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

Часть объектов отсутствует или появились дубли

Частые вопросы о работе с XML в 1С

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

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

Можно ли выгрузить из 1С в XML без программирования?

Да. Перенос данных между базами делается типовой обработкой «Выгрузка и загрузка данных XML», отчётность выгружается штатными кнопками конфигурации, документы для ЭДО отправляются встроенными механизмами. Код требуется только когда структуру файла диктует внешняя система и готового механизма под неё нет.

Почему при загрузке XML возникают дубли справочников?

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

Какую кодировку выбирать при записи XML?

По умолчанию — UTF-8: её понимают практически все современные системы. Некоторые старые банковские и государственные форматы требуют windows-1251. Главное правило: кодировка, указанная в объявлении XML, должна совпадать с той, в которой реально записан файл.

Чем XDTO лучше обычной ЗаписьXML?

XDTO работает по формальной схеме: платформа проверяет типы данных, обязательность полей и вложенность автоматически, а разбор чужого файла сводится к одной строке чтения вместо ручного обхода узлов. Для простых плоских файлов преимущество невелико, для сложных форматов с XSD-схемой XDTO заметно надёжнее.

Опасно ли загружать XML из неизвестного источника в рабочую базу?

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

Итог

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

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