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

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

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

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

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

Выбор способа зависит от задачи. Для простого файла с произвольной структурой достаточно объекта ЗаписьXML — он пишет теги напрямую. Если файл должен соответствовать строгой схеме (например, требованиям ФНС или формату контрагента), надежнее использовать XDTO: платформа сама проверит обязательные поля и типы данных. Для обмена между базами 1С удобнее встроенные планы обмена и универсальный формат EnterpriseData.

Ниже разобраны все три подхода с примерами кода, способами проверки результата и разбором ошибок, которые чаще всего ломают выгрузку.

Какой способ создания XML выбрать под задачу

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

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

Сравнение способов создания XML в 1С

Объект ЗаписьXML

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

Механизм XDTO

Подходит для формализованных форматов (ЭДО, отчетность). Платформа проверяет обязательность полей и типы, но требует описания схемы.

Планы обмена и правила конвертации

Подходят для регулярного обмена между базами 1С. Настройка без кода или с минимальным кодом, но формат файла фиксирован.

Создание XML через объект ЗаписьXML

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

Минимальный пример кода

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

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

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

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

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

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

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

Запись.ЗаписатьТекст("Номенклатура из 1С");

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

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

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

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

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

bsl
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Данные");
Запись.ЗаписатьТекст("Содержимое");
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();

Запись данных из запроса

На практике XML чаще всего строится по данным базы. Типовой прием: выполнить запрос, обойти выборку и записать каждый элемент в цикле. Даты сериализуйте функцией XMLСтрока(), чтобы получить формат ISO 8601, а ссылки на справочники при необходимости преобразуйте в GUID через XMLСтрока(Ссылка).

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

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

Запись.ЗаписатьАтрибут("Номер", Выборка.Номер);

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

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

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

КонецЦикла;

Создание XML через XDTO по схеме

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

Для типовых форматов (EnterpriseData, форматы ЭДО) пакеты уже встроены в конфигурацию. Для собственного формата схему добавляют в конфигураторе: ветка «Общие» → «XDTO-пакеты» → «Добавить», затем импорт XSD-файла. После этого в коде создают объект и записывают его через фабрику.

// Пример обобщенный: имена типов зависят от вашей схемы

Пакет = ФабрикаXDTO.Пакеты.Получить("http://example.org/schema");

ТипЗаказ = Пакет.Получить("Заказ");

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

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

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

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

Запись.ОткрытьФайл(ИмяФайла, "UTF-8");

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

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

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

Если обязательное свойство не заполнено, фабрика выдаст ошибку еще на этапе записи — это и есть главное преимущество XDTO перед ручной записью тегов.

Создание XML без программирования

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

Порядок действий для типовой выгрузки
  1. 1
    Откройте раздел с нужной функцией: например, «Администрирование → Синхронизация данных» или «Обмен электронными документами».
  2. 2
    Настройте узел обмена: укажите каталог или способ передачи и состав выгружаемых данных.
  3. 3
    Выполните выгрузку штатной командой — конфигурация сама сформирует XML-файл.
  4. 4
    Откройте созданный файл в текстовом редакторе и убедитесь, что структура и данные соответствуют ожиданиям.

Если типовой выгрузки нет, а код писать не хочется, посмотрите обработку «Универсальный обмен данными в формате XML» (поставляется с конфигурацией «Конвертация данных» и доступна в составе многих типовых). Она выгружает любые объекты по правилам обмена без доработки конфигурации.

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

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

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

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

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

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

Структура отображается деревом без сообщений об ошибке

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

Браузер показывает ошибку разбора с указанием строки — ищите незакрытый тег или запрещенный символ

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

Русский текст читается корректно, в объявлении указано UTF-8

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

Иероглифы или знаки вопроса — файл записан не в той кодировке

Чтение через ЧтениеXML или фабрику XDTO
Норма

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

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

Исключение на конкретном элементе — нарушена структура или тип данных

Приемка у получателя
Норма

Внешняя система принимает файл без ошибок валидации

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

Отказ с указанием поля — сверьте обязательность и формат этого поля со схемой

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

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

Типичные ошибки
01
Не вызван метод Закрыть() — файл остается пустым или обрезанным, так как буфер не сброшен на диск.
02
Числа и даты записаны через Строка() — формат зависит от региональных настроек, и принимающая система не распознает значения.
03
В текст попали спецсимволы (&, <, >) из наименований — файл становится невалидным; при использовании ЗаписатьТекст платформа экранирует их сама, но при ручной конкатенации строк — нет.
04
Несовпадение имен и регистра тегов со схемой получателя — XML чувствителен к регистру, «Сумма» и «сумма» для валидатора разные элементы.
05
Запись файла на клиенте в тонком клиенте без передачи на сервер — в веб-клиенте прямой доступ к диску ограничен, файл нужно формировать на сервере и передавать через временное хранилище.

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

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

Как выбрать действие

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

FAQ

Как создать XML-файл в 1С без навыков программирования?

Используйте штатные механизмы типовой конфигурации: синхронизацию данных, обмен электронными документами, выгрузку для банка или сайта. Если нужна нестандартная выгрузка, подойдет обработка «Универсальный обмен данными в формате XML» — она работает по настраиваемым правилам без изменения конфигурации.

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

Стандарт де-факто — UTF-8: её ожидают банки, ФНС, маркетплейсы и большинство интеграций. Указывайте кодировку явно вторым параметром метода ОткрытьФайл, иначе платформа использует значение по умолчанию, которое может не совпасть с ожиданиями получателя.

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

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

Почему созданный файл пустой или обрывается на середине?

Почти всегда причина в отсутствии вызова Закрыть() у объекта ЗаписьXML: данные остаются в буфере и не попадают на диск. Вторая возможная причина — исключение в цикле записи, из-за которого код до закрытия файла не дошел; оборачивайте запись в Попытка/Исключение с гарантированным закрытием.

Как выгрузить в XML ссылочный объект, чтобы его можно было загрузить в другую базу?

Передавайте уникальный идентификатор через XMLСтрока(Ссылка) или используйте сериализацию через планы обмена и правила конвертации — они корректно переносят ссылки вместе со связанными объектами. Просто записать наименование недостаточно: в другой базе объект с таким именем может отсутствовать или дублироваться.

Можно ли создать XML на клиенте в веб-клиенте?

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

Итог

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

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