XML в 1С:Предприятии — от выгрузки данных до веб-сервисов и обмена между базами

· 9 мин

Содержание

XML в 1С — это текстовый формат, в котором платформа сериализует объекты: справочники, документы, регистры. На нём держатся выгрузка и загрузка данных между базами, сообщения планов обмена, веб-сервисы и файлы регламентированной отчётности для ФНС и СФР. Если упростить: когда одна база 1С должна «рассказать» другой программе о своих данных, она чаще всего делает это через XML.

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

Что такое XML и чем он удобен платформе 1С

XML (eXtensible Markup Language) — язык разметки, в котором данные описываются вложенными тегами. Файл человекочитаемый: открывается блокнотом, структура видна глазами. Для обмена между разными программами это важно — принимающая сторона понимает, где заканчивается один объект и начинается другой, без знания внутреннего устройства 1С.

Платформа выбрала XML как основной формат сериализации по нескольким причинам:

  • 📄 Самоописательность — имена элементов и атрибутов несут смысл, файл понятен и без отдельной документации.
  • 🔗 Поддержка схем — структуру можно жёстко задать XML-схемой (XSD), и платформа проверит файл на соответствие.
  • 🌍 Стандарт для интеграций — веб-сервисы, ЭДО, обмен с госсистемами исторически построены вокруг XML.
  • 🧩 Встроенные средства — в языке 1С есть готовые объекты для записи, чтения и сериализации, внешние библиотеки не нужны.

У каждого XML-файла из 1С в первой строке стоит объявление вида <?xml version="1.0" encoding="UTF-8"?>. По кодировке в этой строке принимающая сторона понимает, как читать русский текст. Если файл сохранён в одной кодировке, а в объявлении указана другая, при загрузке будут «кракозябры».

Форматы XML-файлов в 1С и где каждый применяется

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

ФорматЧто внутриГде встречается
Сериализация объектовВыгрузка справочников, документов, регистров средствами платформыОбработка «Выгрузка и загрузка данных XML», ручная сериализация
Сообщения планов обменаПакет изменённых данных + служебный заголовок с номерами сообщенийРаспределённые базы (РИБ), обмен между конфигурациями
Формат по правилам конвертацииСтруктура задаётся в «Конвертации данных», поля сопоставлены вручнуюОбмен между разными конфигурациями (БП ↔ УТ и т. п.)
Регламентированная отчётностьXML по утверждённому формату приёмной стороныВыгрузка деклараций и расчётов для ФНС, СФР, Росстата
XDTO-пакетыТипы данных веб-сервиса, описанные XML-схемойSOAP-веб-сервисы, интеграция с внешними системами

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

Как записать XML-файл в 1С: три способа

Выбор способа зависит от того, кто диктует структуру файла — сама 1С или внешняя система.

Способ 1. Готовая обработка без единой строки кода

Самый быстрый путь — типовая обработка «Выгрузка и загрузка данных XML». Её берут с диска ИТС или из поставки и открывают через Файл → Открыть, указав файл обработки (.epf). В окне отмечают галочками, какие объекты выгрузить, задают отбор по датам и получают файл. На другой базе той же конфигурации этот файл так же загружают.

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

Способ 2. Сериализация — объект в XML одной строкой

Когда объект 1С нужно сохранить «как есть», используют сериализацию. Платформа сама обходит все реквизиты и записывает их:

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

Элемент = Справочники.Номенклатура.НайтиПоКоду("000001");
ЗаписатьXML(ЗаписьXML, Элемент.ПолучитьОбъект());

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

Глобальная функция ЗаписатьXML() принимает поток записи и значение. Обратно объект восстанавливают функцией ПрочитатьXML(). Этот способ хорош внутри экосистемы 1С: и выгрузка, и загрузка — на платформе 1С, формат согласован автоматически.

Способ 3. Ручная запись под чужой формат

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

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Обмен\Выгрузка.xml", "UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();

ЗаписьXML.ЗаписатьНачалоЭлемента("Товар");
ЗаписьXML.ЗаписатьАтрибут("Код", "000001");
ЗаписьXML.ЗаписатьТекст("Бумага А4");
ЗаписьXML.ЗаписатьКонецЭлемента();

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

Результат — файл с одним элементом <Товар Код="000001">Бумага А4</Товар>. Так собирают файлы любой вложенности: перед ЗаписатьКонецЭлемента() можно открыть вложенные элементы циклом по табличной части или выборке.

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

Как прочитать XML-файл в 1С

Чтение — зеркало записи. Объект ЧтениеXML движется по файлу узел за узлом, а код реагирует на тип узла:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("C:\Обмен\Выгрузка.xml");

Пока ЧтениеXML.Прочитать() Цикл
    Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
        ИмяЭлемента = ЧтениеXML.Имя;
    ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
        Сообщить(ИмяЭлемента + ": " + ЧтениеXML.Значение);
    КонецЕсли;
КонецЦикла;

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

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

Для файлов, записанных сериализацией 1С, ручной разбор не нужен — весь файл восстанавливается одним вызовом ПрочитатьXML(ЧтениеXML, ТипЗначения).

Обмен данными между базами 1С через XML

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

Одинаковые конфигурации — план обмена и РИБ. Распределённая информационная база (РИБ) — это главный узел и подчинённые, которые обмениваются сообщениями. Настройка живёт в разделе Администрирование → Синхронизация данных (в типовых конфигурациях) либо в самом плане обмена в конфигураторе. Каждое сообщение — XML-файл с заголовком: номерами отправленного и принятого сообщений. По этим номерам узлы понимают, какие изменения уже доехали, и не задваивают данные.

Разные конфигурации — правила конвертации. Чтобы данные из Бухгалтерии попали в Управление торговлей, поля одной конфигурации сопоставляют полям другой. Это делают в отдельной конфигурации «Конвертация данных »: там задают правила выгрузки и правила загрузки, из них получается файл правил. 1С по этим правилам формирует XML и загружает его на приёмнике. В свежих типовых решениях используют формат EnterpriseData — универсальный XML-формат обмена, который понимают разные конфигурации без индивидуальных правил под каждую пару.

Поля источника и приёмника при настройке сопоставляют примерно так:

Сопоставление полей
Контрагент (БП)→Партнёр + Контрагент (УТ)
Номенклатура.Код→Номенклатура.Артикул
Договор→Договор + Соглашение
Ставка НДС→Справочник ставок НДС

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

XML и веб-сервисы: интеграция 1С с внешними системами

Когда данными нужно обмениваться не файлами, а запросами в реальном времени, 1С публикует веб-сервис. Внешняя система шлёт SOAP-запрос в XML, 1С отвечает XML. Так подключают сайты, мобильные приложения, оборудование, другие учётные системы.

Структуру данных веб-сервиса описывают XDTO-пакеты — это ветка в дереве конфигурации, где типы (например, «Заказ», «Строка заказа») заданы XML-схемой. На основе пакета создают объект Web-сервис, задают его операции и публикуют на веб-сервере (Apache или IIS) через Администрирование → Публикация на веб-сервере в конфигураторе.

Внутри кода веб-сервиса данные собирают через фабрику XDTO:

Фабрика = Определения.ФабрикаXDTO;
ТипЗаказа = Фабрика.Тип("http://example.org/orders", "Заказ");
Заказ = Фабрика.Создать(ТипЗаказа);
Заказ.Номер = "000123";
Заказ.Сумма = 15000;

Пространство имён (http://example.org/orders) и имя типа берут из описания XDTO-пакета. Пространство имён в запросе и в пакете должны совпадать символ в символ — иначе внешняя система получит отказ, хотя данные корректны.

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

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

Большинство проблем с XML — не в данных, а в несовпадении формата, кодировки или прав. Типовые ситуации и что делать:

Диагностика: выберите симптом

Прежде чем грузить XML из внешнего источника в рабочую базу, сделайте резервную копию. Ошибка в сопоставлении полей может перезаписать справочники, и откатить это без копии будет нечем.

XML или JSON в 1С: что выбрать для обмена

С версии 8.3.6 платформа умеет работать и с JSON — объектами ЗаписьJSON и ЧтениеJSON, по той же логике, что и с XML. Формат выбирают по задаче, а не по моде.

КритерийXMLJSON
Обмен между базами 1СДа, родной форматНе используется
Веб-сервисы SOAPДаНет (это REST)
REST-API, обмен с сайтомМожно, но многословноДа, компактнее
Проверка по схемеЕсть (XSD)Слабее
Размер файлаБольшеМеньше
Читаемость глазамиСтруктурнееПроще для простых данных

Короткий ориентир: для внутренней кухни 1С — планов обмена, РИБ, SOAP-сервисов, регламентированной отчётности — остаётся XML, альтернативы нет. Для интеграции с современными сайтами и мобильными приложениями по REST-API выбирают JSON — он легче и быстрее парсится на стороне веб-разработчиков.

Проверьте себя
Какой формат использует распределённая информационная база (РИБ) для сообщений обмена?
Чем восстанавливают объект 1С из файла, записанного сериализацией?
Что описывает структуру данных веб-сервиса 1С?

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

Можно ли открыть и поправить XML-выгрузку вручную?
Технически да — это текстовый файл, открывается блокнотом. Но править выгрузку сериализации или обмена опасно: собьёте структуру, и файл перестанет загружаться. Безопасно так поступать только с простыми файлами, которые вы сами и формируете под внешнюю систему.
Чем XDTO отличается от обычной сериализации?
Сериализация выгружает объект 1С «как есть», в формате платформы. XDTO описывает типы данных независимо от 1С — через XML-схему, которую понимает внешняя система. XDTO применяют для веб-сервисов и обмена с не-1С программами, сериализацию — внутри экосистемы 1С.
Почему файл выгрузился, но на другой базе не загружается?
Чаще всего конфигурации или их версии различаются, и состав объектов не совпадает. Выгрузка механизмом «Выгрузка и загрузка данных XML» рассчитана на одинаковые конфигурации. Для разных решений нужен обмен через правила конвертации или формат EnterpriseData.
Нужно ли знать встроенный язык, чтобы работать с XML в 1С?
Для типовых задач — нет. Перенос данных между копиями базы, настройка синхронизации, выгрузка отчётности делаются интерфейсом и готовыми обработками. Код нужен, когда формат файла диктует внешняя система и типовых средств не хватает.
В какой кодировке 1С выгружает XML?
По умолчанию UTF-8, и это указано в объявлении в первой строке файла. Если приёмник требует другую кодировку (встречается у старых госсистем), её задают вторым параметром метода ОткрытьФайл() при записи.