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

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

Как создать XML-файл в 1С 8.3

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

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

Выбор способа зависит от задачи. Если нужно быстро выгрузить простую структуру — справочник, таблицу значений, результат запроса — достаточно ЗаписьXML. Если файл должен строго соответствовать схеме XSD (например, для обмена с государственными сервисами или по формату EnterpriseData), правильнее использовать XDTO-пакеты, где платформа сама контролирует типы и обязательность элементов.

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

Когда какой способ выбрать: ЗаписьXML или XDTO

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

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

Сравнение подходов

ЗаписьXML

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

XDTO

Подходит для обмена по формальным форматам (ЭДО, ФНС, банки). Контроль типов и обязательности, но требует подготовки модели или схемы.

СериализаторXDTO

Подходит для выгрузки объектов конфигурации (справочников, документов) без ручного описания полей — платформа сериализует объект сама.

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

Базовый сценарий состоит из четырёх действий: создать объект, открыть файл с указанием кодировки, последовательно записать структуру, закрыть файл. Пока файл не закрыт методом Закрыть(), данные могут оставаться в буфере и на диске окажется пустой или обрезанный файл.

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

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

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

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

Для Каждого Строка Из ТаблицаТоваров Цикл

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

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

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

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

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

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

КонецЦикла;

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

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

Ключевые правила работы с ЗаписьXML:

  • каждому ЗаписатьНачалоЭлемента должен соответствовать ЗаписатьКонецЭлемента — при нарушении парности файл будет невалидным;
  • атрибуты записываются сразу после открытия элемента, до любого вложенного элемента или текста;
  • значения дат, чисел и булево нужно преобразовывать в строку в том формате, который ждёт принимающая сторона — 1С сама этого не делает;
  • вместо ОткрытьФайл можно использовать УстановитьСтроку(), чтобы получить XML в переменную без записи на диск.
Порядок создания файла через ЗаписьXML
  1. 1
    Создайте объект: Запись = Новый ЗаписьXML
  2. 2
    Откройте файл с кодировкой: Запись.ОткрытьФайл(Путь, "UTF-8")
  3. 3
    Запишите объявление XML и корневой элемент
  4. 4
    В цикле запишите элементы данных с атрибутами и текстом
  5. 5
    Закройте все элементы и вызовите Запись.Закрыть()
  6. 6
    Откройте файл в браузере или редакторе и проверьте структуру

Запись файла на сервере и в файловой базе

В клиент-серверном варианте код с ЗаписьXML обычно выполняется на сервере, и путь в ОткрытьФайл интерпретируется относительно сервера 1С, а не компьютера пользователя. Учётная запись агента сервера 1С должна иметь право записи в указанный каталог — это частая причина ошибки «Ошибка доступа к файлу».

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

Создание XML через XDTO и сериализацию объектов

Для выгрузки объектов конфигурации удобен СериализаторXDTO: он преобразует ссылочные объекты (элементы справочников, документы) в XML без ручного перебора реквизитов.

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

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

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

СериализаторXDTO.ЗаписатьXML(Запись, КонтрагентСсылка);

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

Если формат задан XSD-схемой, создайте в конфигураторе объект «Пакет XDTO», импортируйте схему, затем заполняйте объект через фабрику:

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

Корень = ФабрикаXDTO.Создать(Пакет.КорневыеСвойства[0].Тип);

Корень.Наименование = "ООО Ромашка";

Корень.ИНН = "7701234567";

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

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

ФабрикаXDTO.ЗаписатьXML(Запись, Корень);

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

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

Кодировка, спецсимволы и форматирование значений

Стандарт для обмена — UTF-8, и именно её стоит указывать вторым параметром ОткрытьФайл. Кодировку windows-1251 используют только если её явно требует принимающая система; смешение кодировок приводит к «кракозябрам» в русских наименованиях.

Спецсимволы &, <, >, кавычки внутри текста ЗаписьXML экранирует автоматически при записи через ЗаписатьТекст и атрибуты. А вот если вы собираете XML конкатенацией строк (чего делать не стоит), экранировать придётся вручную — и это типичный источник битых файлов.

Отдельное внимание — форматам значений:

  • даты обычно требуются в ISO-виде 2026-01-15 или 2026-01-15T10:30:00 — формируйте их функцией Формат(Дата, "ДФ=yyyy-MM-dd");
  • разделитель дробной части в XML — точка, а не запятая, поэтому Строка(Число) может не подойти из-за региональных настроек; надёжнее Формат(Число, "ЧРД=.; ЧН=0; ЧГ=0");
  • булево записывается как true/false, а не «Истина/Ложь».

Проверка результата и типичные ошибки

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

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

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

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

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

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

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

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

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

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

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

Исключение с указанием позиции в файле

Русский текст
Норма

Наименования читаемы в любом редакторе

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

Кракозябры — несовпадение кодировок

Числа и даты
Норма

Точка как разделитель, даты в ISO-формате

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

Запятые в числах, даты вида 15.01.2026

FAQ

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

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

Как получить XML в переменную, не сохраняя файл на диск?

Вместо ОткрытьФайл вызовите Запись.УстановитьСтроку("UTF-8"), запишите структуру как обычно, а затем получите результат методом Запись.Закрыть() — он вернёт строку с готовым XML. Это удобно для передачи данных через веб-сервисы и временное хранилище.

Почему файл создаётся пустым, хотя ошибок в коде нет?

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

Как записать в XML вложенные табличные части документа?

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

Какой размер файла можно сформировать через ЗаписьXML?

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

Чем отличается ЗаписьXML от ЗаписьТекста при создании XML?

ЗаписьТекста пишет произвольные строки «как есть» и ничего не знает о структуре XML: не экранирует спецсимволы, не контролирует парность тегов. ЗаписьXML гарантирует синтаксически корректный документ. Собирать XML через ЗаписьТекста конкатенацией — распространённая ошибка, приводящая к невалидным файлам.

Итог

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

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