XML в 1С:Предприятии — от выгрузки данных до веб-сервисов и обмена между базами
Содержание
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. Формат выбирают по задаче, а не по моде.
| Критерий | XML | JSON |
|---|---|---|
| Обмен между базами 1С | Да, родной формат | Не используется |
| Веб-сервисы SOAP | Да | Нет (это REST) |
| REST-API, обмен с сайтом | Можно, но многословно | Да, компактнее |
| Проверка по схеме | Есть (XSD) | Слабее |
| Размер файла | Больше | Меньше |
| Читаемость глазами | Структурнее | Проще для простых данных |
Короткий ориентир: для внутренней кухни 1С — планов обмена, РИБ, SOAP-сервисов, регламентированной отчётности — остаётся XML, альтернативы нет. Для интеграции с современными сайтами и мобильными приложениями по REST-API выбирают JSON — он легче и быстрее парсится на стороне веб-разработчиков.
Частые вопросы о XML в 1С
Можно ли открыть и поправить XML-выгрузку вручную?
Чем XDTO отличается от обычной сериализации?
Почему файл выгрузился, но на другой базе не загружается?
Нужно ли знать встроенный язык, чтобы работать с XML в 1С?
В какой кодировке 1С выгружает XML?
ОткрытьФайл() при записи.