Разработка и Конфигурация · 11 мин
1С: как создать XML-файл — выгрузка и запись в коде
Как создать XML-файл в 1С: выгрузка через типовые механизмы, запись объектом ЗаписьXML в коде, проверка результата, типичные ошибки и ответы на вопросы.
XML — основной формат обмена данными в 1С: через него выгружают документы для контрагентов, отчётность в госорганы, данные для обмена между базами и загрузки в сторонние системы. Создать XML-файл в 1С можно двумя путями: штатными средствами конфигурации (кнопки выгрузки, обработки обмена) или программно — с помощью объектов встроенного языка ЗаписьXML и XDTO.
Выбор способа зависит от задачи. Если нужен стандартный файл — например, выгрузка контрагентов или документа по формату обмена — сначала стоит проверить типовые механизмы конфигурации. Если формат нестандартный (под требования конкретного контрагента, веб-сервиса или внутренней интеграции), файл формируют программно, задавая структуру тегов вручную.
Ниже разобраны оба подхода: где искать типовую выгрузку, как написать код создания XML с нуля, как проверить корректность результата и каких ошибок стоит избегать.
Какие способы создания XML существуют в 1С
Практически все задачи сводятся к трём вариантам. Первый — типовая выгрузка из конфигурации: во многих решениях (Бухгалтерия, Управление торговлей, ЗУП) есть встроенные команды «Выгрузить в XML», «Электронный документ», обмены с банками, ЭДО и другими базами. Результат — готовый файл, соответствующий утверждённому формату.
Второй вариант — программная запись через объект ЗаписьXML. Он даёт полный контроль над структурой: вы сами определяете имена тегов, атрибуты, вложенность и кодировку. Это универсальный способ для нестандартных интеграций.
Третий вариант — сериализация через XDTO. Платформа сама преобразует объекты 1С (документы, справочники) в XML по описанной схеме. Так работают планы обмена и формат EnterpriseData. Способ мощный, но требует понимания модели XDTO и обычно применяется в задачах обмена между информационными базами.
Сравнение вариантов
Подходит для стандартных форматов (ЭДО, отчётность, обмен с банком). Ограничение: структуру файла изменить нельзя без доработки.
Подходит для произвольных форматов под требования контрагента или сервиса. Ограничение: структуру и валидацию нужно реализовать самостоятельно.
Подходит для регулярного обмена между базами 1С. Ограничение: требует настройки схем и правил, избыточен для разовой выгрузки.
Создание XML штатными средствами конфигурации
Прежде чем писать код, проверьте типовые возможности. В большинстве конфигураций выгрузка доступна из карточки объекта: откройте документ или элемент справочника и найдите в меню «Ещё» команды вроде «Выгрузить», «Сформировать электронный документ» или «Отправить по ЭДО». Для списков часто доступна групповая выгрузка через кнопку выгрузки списка.
Для обмена между базами 1С используется «Универсальный обмен данными в формате XML» — обработка, которая выгружает данные по правилам конвертации. В типовых конфигурациях она входит в поставку или доступна в разделе синхронизации данных. Порядок работы: выбрать файл правил, указать период и объекты, задать имя файла выгрузки, выполнить выгрузку.
Отдельный сценарий — выгрузка отчётности. Регламентированные отчёты формируют XML по утверждённым форматам автоматически при нажатии «Выгрузить» из формы отчёта. Самостоятельно собирать такой файл кодом не нужно и небезопасно: формат периодически обновляется, и ручная сборка почти гарантированно приведёт к отклонению файла приёмной системой.
Создание XML программно: объект ЗаписьXML
Объект ЗаписьXML позволяет сформировать файл произвольной структуры. Логика простая: создать объект, открыть запись в файл (или в строку), последовательно записать объявление XML, элементы и атрибуты, затем закрыть запись. Порядок вызовов строгий: атрибуты пишутся сразу после открытия элемента, до записи текста или дочерних элементов.
Минимальный пример — выгрузка списка товаров с ценами:
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\Товары.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Товары");
Запрос = Новый Запрос("ВЫБРАТЬ Наименование, Код ИЗ Справочник.Номенклатура");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Запись.ЗаписатьНачалоЭлемента("Товар");
Запись.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // Товары
Запись.Закрыть();
Ключевые моменты кода: метод ОткрытьФайл принимает путь и кодировку (обычно UTF-8); ЗаписатьОбъявлениеXML формирует строку <?xml version="1.0" encoding="UTF-8"?>; каждому ЗаписатьНачалоЭлемента обязательно соответствует ЗаписатьКонецЭлемента. Если забыт закрывающий вызов, файл окажется битым и не откроется ни одним парсером.
Если файл нужен не на диске, а для передачи по HTTP или хранения в базе, вместо ОткрытьФайл используйте УстановитьСтроку() — тогда результат забирается методом Закрыть() как строка.
- 1Определите требуемую структуру файла: имена тегов, обязательные атрибуты, кодировку — по спецификации приёмной стороны.
- 2Создайте объект ЗаписьXML и откройте запись в файл с указанием кодировки UTF-8.
- 3Запишите объявление XML и корневой элемент.
- 4В цикле по данным запишите дочерние элементы: сначала атрибуты, затем текст.
- 5Закройте все элементы в обратном порядке и выполните Запись.Закрыть().
- 6Откройте полученный файл и проверьте его структуру и читаемость данных.
Проверка результата: убедиться, что файл корректен
Первичную проверку делает сама платформа: если нарушен порядок вызовов (например, атрибут записан после текста), 1С выдаст исключение ещё на этапе выполнения кода. Но синтаксически правильный файл может быть логически неверным — не соответствовать ожиданиям приёмной системы.
Откройте созданный файл в браузере или текстовом редакторе с поддержкой XML. Браузер сразу покажет ошибку разбора, если структура нарушена. Проверьте: объявление XML на первой строке, кодировка совпадает с заявленной, все элементы закрыты, спецсимволы в тексте экранированы (платформа делает это автоматически при записи через ЗаписатьТекст).
Для обратной проверки прочитайте файл тем же механизмом 1С — объектом ЧтениеXML: обойдите узлы и убедитесь, что количество элементов и значения совпадают с исходными данными. Если файл предназначен внешней системе, запросите у принимающей стороны XSD-схему или тестовый приём — это единственный надёжный способ убедиться в совместимости.
Как проверить результат
Дерево элементов отображается без ошибок разбора
Сообщение об ошибке XML на конкретной строке — ищите незакрытый элемент или битый символ
Русский текст читается корректно, в объявлении указана та же кодировка, что при записи
Кракозябры вместо кириллицы — файл записан не в той кодировке
Число узлов совпадает с количеством записей в выборке
Элементов меньше — проверяйте условия запроса и прерывания цикла
Типичные ошибки и ограничения
Самая частая ошибка — нарушение парности элементов: при сложной вложенности и условной логике легко пропустить ЗаписатьКонецЭлемента. Помогает простое правило: пишите открывающий и закрывающий вызовы сразу, а содержимое вставляйте между ними.
Вторая группа проблем — типы данных. Числа и даты при записи через Строка() получают представление, зависящее от региональных настроек: разделитель дробной части, формат даты. Для машиночитаемых файлов даты приводите к формату ISO (Формат(Дата, "ДФ=yyyy-MM-dd")), а числа записывайте с точкой-разделителем через XMLСтрока().
Третья ошибка — запись в файл, который уже открыт другой программой, или в каталог без прав на запись. Перед записью убедитесь, что каталог существует и доступен; обрабатывайте исключения через Попытка...Исключение, чтобы пользователь получил понятное сообщение, а не дамп ошибки.
Когда нужен XDTO вместо ЗаписьXML
Если задача — регулярный обмен документами между базами 1С или интеграция по формату EnterpriseData, ручная запись тегов становится неудобной: структура сложная, много ссылочных полей, требуется контроль соответствия схеме. Здесь применяется XDTO: объект 1С сериализуется в XML вызовом ЗаписатьXML или через фабрику XDTO, а структура описывается схемой.
Простейший вариант сериализации одного объекта выглядит так:
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку("UTF-8");
ЗаписатьXML(Запись, СсылкаНаДокумент.ПолучитьОбъект());
СтрокаXML = Запись.Закрыть();
Такой файл содержит полное представление объекта во внутреннем формате платформы и подходит для переноса данных между базами с одинаковой конфигурацией. Для обмена с произвольными системами используйте XDTO-пакеты с собственной схемой — это тема отдельной работы с фабрикой XDTO и пространствами имён.
Как выбрать действие
FAQ
Как создать XML-файл в 1С без программирования?
Используйте типовые команды конфигурации: выгрузку из карточки документа или справочника, обработку «Универсальный обмен данными в формате XML», выгрузку регламентированных отчётов. Если нужного формата в конфигурации нет, без доработки кода обойтись не получится.
В какой кодировке сохранять XML из 1С?
Стандарт де-факто — UTF-8: её понимают практически все системы. Кодировку указывайте явно вторым параметром метода ОткрытьФайл. Если приёмная система требует windows-1251, укажите её, но сначала убедитесь, что требование реально существует.
Файл создался, но у получателя не открывается. Что проверить?
В первую очередь — кодировку и парность тегов: откройте файл в браузере, он укажет строку с ошибкой. Затем сверьте структуру со спецификацией приёмной стороны: имена тегов, обязательные атрибуты, форматы дат и чисел. Чаще всего проблема именно в расхождении со спецификацией.
Как записать в XML специальные символы вроде & и кавычек?
Ничего делать вручную не нужно: при записи через ЗаписатьТекст платформа автоматически экранирует &, <, > и кавычки в соответствии со стандартом XML. Ошибки возникают только при склейке XML конкатенацией строк — так делать не следует.
Можно ли создать XML на клиенте в тонком или веб-клиенте?
Работа с файловой системой на клиенте ограничена: в тонком клиенте запись файла возможна, но требует разрешения пользователя, в веб-клиенте — только через расширение работы с файлами или передачу данных на сервер. Практичный подход — формировать XML на сервере и отдавать пользователю готовый файл.
Чем ЗаписьXML отличается от ЗаписьТекста для создания XML?
ЗаписьТекста просто пишет строки в файл и не контролирует структуру XML: легко получить невалидный документ. ЗаписьXML следит за парностью элементов, экранирует спецсимволы и формирует корректное объявление. Для XML всегда используйте ЗаписьXML.
Что важно запомнить
Стандартные форматы выгружайте типовыми средствами конфигурации, произвольные — объектом ЗаписьXML с явным указанием кодировки UTF-8, строгой парностью элементов и машиночитаемыми форматами дат и чисел. Готовый файл проверяйте открытием в браузере и сверкой со спецификацией приёмной стороны.