Разработка и Конфигурация · 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-файла через объект ЗаписьXML
Базовый сценарий состоит из четырёх действий: создать объект, открыть файл с указанием кодировки, последовательно записать структуру, закрыть файл. Пока файл не закрыт методом Закрыть(), данные могут оставаться в буфере и на диске окажется пустой или обрезанный файл.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Товары.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Каталог");
Для Каждого Строка Из ТаблицаТоваров Цикл
Запись.ЗаписатьНачалоЭлемента("Товар");
Запись.ЗаписатьАтрибут("Код", Строка(Строка.Код));
Запись.ЗаписатьНачалоЭлемента("Наименование");
Запись.ЗаписатьТекст(Строка.Наименование);
Запись.ЗаписатьКонецЭлемента(); // Наименование
Запись.ЗаписатьКонецЭлемента(); // Товар
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // Каталог
Запись.Закрыть();
Ключевые правила работы с ЗаписьXML:
- каждому
ЗаписатьНачалоЭлементадолжен соответствоватьЗаписатьКонецЭлемента— при нарушении парности файл будет невалидным; - атрибуты записываются сразу после открытия элемента, до любого вложенного элемента или текста;
- значения дат, чисел и булево нужно преобразовывать в строку в том формате, который ждёт принимающая сторона — 1С сама этого не делает;
- вместо
ОткрытьФайлможно использоватьУстановитьСтроку(), чтобы получить XML в переменную без записи на диск.
- 1Создайте объект: Запись = Новый ЗаписьXML
- 2Откройте файл с кодировкой: Запись.ОткрытьФайл(Путь, "UTF-8")
- 3Запишите объявление XML и корневой элемент
- 4В цикле запишите элементы данных с атрибутами и текстом
- 5Закройте все элементы и вызовите Запись.Закрыть()
- 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С.
Как проверить результат
Дерево элементов отображается без сообщений об ошибке
Браузер показывает ошибку разбора с номером строки
Цикл чтения доходит до конца без исключений
Исключение с указанием позиции в файле
Наименования читаемы в любом редакторе
Кракозябры — несовпадение кодировок
Точка как разделитель, даты в 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, форматируйте числа и даты явно, закрывайте файл методом Закрыть() и проверяйте результат чтением или валидацией по схеме.