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

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

Как сформировать файл XML в 1С

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

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

Выбор способа зависит от задачи. Если нужно выгрузить регламентированный отчёт или документ по утверждённому формату — используйте штатные средства конфигурации. Если требуется произвольный файл для обмена с внешней системой — пишите код с использованием «ЗаписьXML» или XDTO. Ниже разобраны все основные варианты с примерами кода и проверкой результата.

Какие способы формирования XML существуют в 1С

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

Второй инструмент — XDTO (XML Data Transfer Objects). Он работает по формальной схеме XSD: вы описываете типы данных в конфигураторе или загружаете готовую схему, а платформа сама сериализует объекты в XML и проверяет соответствие структуре. XDTO незаменим, когда контрагент требует строгое соответствие формату, например при обмене с государственными системами или банками.

Третий путь — типовые механизмы: планы обмена, универсальный формат EnterpriseData, выгрузка регламентированной отчётности. Здесь почти нет программирования, но и гибкость минимальна — вы получаете ровно тот формат, который заложен в конфигурацию.

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

ЗаписьXML

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

XDTO-пакеты

Автоматическая валидация по XSD-схеме, удобен для формализованного обмена. Требует описания или загрузки схемы.

Типовые механизмы

Без программирования, но формат фиксирован конфигурацией и не поддаётся произвольной настройке.

Как сформировать XML программно через ЗаписьXML

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

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

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

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

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

Запись.ЗаписатьАтрибут("ДатаФормирования", XMLСтрока(ТекущаяДатаСеанса()));

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

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

Запись.ЗаписатьТекст("Смартфон");

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

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

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

Метод «ЗаписатьОбъявлениеXML» добавляет строку <?xml version="1.0" encoding="UTF-8"?> — большинство принимающих систем требуют её наличия. Кодировку лучше указывать явно: UTF-8 считается стандартом для обмена, но некоторые устаревшие системы требуют windows-1251, и это нужно уточнить в требованиях к формату.

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

Порядок формирования XML через ЗаписьXML
  1. 1
    Создайте объект: Запись = Новый ЗаписьXML
  2. 2
    Откройте файл методом ОткрытьФайл с указанием пути и кодировки
  3. 3
    Запишите объявление XML и корневой элемент
  4. 4
    В цикле по данным запишите дочерние элементы с атрибутами
  5. 5
    Закройте все элементы в обратном порядке и вызовите Закрыть()
  6. 6
    Откройте полученный файл в браузере и проверьте структуру

Как выгрузить данные в XML через XDTO

XDTO подходит, когда формат описан XSD-схемой. В конфигураторе создайте объект «XDTO-пакет» и импортируйте схему, либо опишите типы вручную. После этого в коде вы работаете не с тегами, а с типизированными объектами: создаёте объект фабрики XDTO, заполняете его свойства, а платформа сама строит XML.

Фабрика = ФабрикаXDTO;

ТипЗаказ = Фабрика.Тип("http://example.org/orders", "Заказ");

Заказ = Фабрика.Создать(ТипЗаказ);

Заказ.Номер = "А-101";

Заказ.Дата = ТекущаяДатаСеанса();

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

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

Фабрика.ЗаписатьXML(Запись, Заказ);

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

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

Как выгрузить XML типовыми средствами конфигурации

В типовых конфигурациях (Бухгалтерия, Управление торговлей, ERP) многие XML-файлы формируются без программирования. Регламентированная отчётность выгружается из формы отчёта кнопкой «Выгрузить» — файл создаётся строго по утверждённому ФНС формату. Электронные документы (счета-фактуры, УПД) формируются через подсистему обмена электронными документами.

Для обмена между базами 1С используется «Универсальный формат обмена» (EnterpriseData) — это тоже XML, который формируется автоматически через настройку синхронизации данных. Пользователю достаточно указать каталог обмена или прямое подключение.

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

Как проверить сформированный файл

Простейшая проверка — открыть файл в браузере: если XML синтаксически корректен, браузер отобразит дерево элементов; при ошибке покажет номер строки и причину. Дополнительно файл можно прочитать обратно из 1С через объект «ЧтениеXML» — успешное чтение до конца подтверждает валидность структуры.

Для файлов по формальной схеме проверьте соответствие XSD: это делается средствами XDTO при чтении или внешними валидаторами, которые предоставляет принимающая сторона (например, тестовые сервисы налоговой или операторов ЭДО). Перед отправкой реального документа всегда прогоняйте файл через тестовый контур получателя, если он доступен.

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

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

Открытие файла в браузере
Норма

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

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

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

Чтение через ЧтениеXML в 1С
Норма

Файл читается до конца без исключений

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

Возникает ошибка на конкретном элементе или символе

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

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

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

Крякозябры или несовпадение кодировки в объявлении и фактической

Соответствие схеме получателя
Норма

Файл проходит валидацию на тестовом контуре

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

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

Типичные ошибки и ограничения

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

Отдельная группа ошибок связана с датами и числами. В XML даты принято записывать в формате ISO (ГГГГ-ММ-ДД), а разделитель дробной части — точка. Используйте функции «XMLСтрока» и «XMLЗначение» для корректного преобразования типов 1С в строковое представление.

Типичные ошибки
01
Сборка XML конкатенацией строк вместо ЗаписьXML — ломается на спецсимволах и не контролирует вложенность
02
Пропуск ЗаписатьКонецЭлемента — файл формируется, но не проходит разбор у получателя
03
Запись даты через Формат() вместо XMLСтрока — получатель не может распарсить значение
04
Несовпадение кодировки: файл записан в UTF-8, а в объявлении указано windows-1251
05
Запись файла в каталог без прав на запись — ошибка появляется только при вызове Закрыть()

Как организовать выгрузку файла в рабочей базе

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

При работе в файловой базе убедитесь, что каталог выгрузки существует и у пользователя есть права на запись. При работе в клиент-серверном варианте метод «ОткрытьФайл» выполняется на сервере — путь «C:\Обмен» будет искаться на сервере, а не на вашем компьютере. Для передачи файла пользователю сформируйте его во временном хранилище и предложите сохранить через диалог.

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

Как выбрать подход

Нужен произвольный XML для внешней системы без строгой схемыИспользуйте ЗаписьXML с ручным формированием структуры
Формат описан XSD-схемой и получатель строго валидирует файлСоздайте XDTO-пакет и сериализуйте объекты через ФабрикуXDTO
Нужно выгрузить отчётность или электронный документИспользуйте штатные команды выгрузки конфигурации
Требуется регулярный обмен между базами 1СНастройте синхронизацию через универсальный формат EnterpriseData

FAQ: частые вопросы о формировании XML в 1С

Можно ли сформировать XML без программирования?

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

Какую кодировку выбрать для XML-файла?

По умолчанию используйте UTF-8 — её понимают все современные системы. Кодировку windows-1251 применяйте только если это явно требует формат принимающей стороны, и следите, чтобы объявление в файле совпадало с фактической кодировкой записи.

Почему получатель не может загрузить мой файл?

Наиболее вероятные причины: незакрытые элементы, несовпадение пространств имён, неверный формат дат и чисел, отсутствие обязательных по схеме полей. Проверьте файл в браузере и на тестовом валидаторе получателя, затем сверьте структуру с XSD-схемой.

Как записать в XML специальные символы вроде амперсанда?

Объект ЗаписьXML экранирует спецсимволы автоматически при вызове ЗаписатьТекст — вручную заменять «&» на «&amp;» не нужно. Ручная подстановка потребуется только если вы формируете XML конкатенацией строк, что само по себе является плохой практикой.

Чем отличается выгрузка на клиенте и на сервере?

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

Как проверить XML на соответствие XSD-схеме?

При чтении через ЧтениеXML с указанием фабрики XDTO платформа выполнит проверку автоматически. Также можно использовать внешние валидаторы и тестовые сервисы принимающей стороны — для регламентированных форматов они обычно доступны бесплатно.

Итог

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

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