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

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

Как сделать документ в формате XML в 1С 8.3

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

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

Выбор способа зависит от задачи. Если нужно быстро выгрузить несколько полей в файл — достаточно последовательной записи через «ЗаписьXML». Если требуется строгое соответствие формату, утверждённому ведомством или контрагентом (например, УПД, файл для банка), правильнее использовать XDTO-пакеты с проверкой по XSD-схеме. Для типового обмена между базами 1С часто вообще не нужен код — достаточно планов обмена и универсального формата EnterpriseData.

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

Какие способы создания XML есть в 1С 8.3

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

Второй механизм — XDTO (XML Data Transfer Objects). Данные описываются объектами, привязанными к XML-схеме (XSD), и платформа автоматически проверяет типы, обязательность полей и структуру. Это стандарт для формализованных документов: электронных счетов-фактур, УПД, файлов обмена с банками.

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

Сравнение вариантов

ЗаписьXML

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

XDTO

Подходит для формализованных документов по XSD-схеме: валидация типов и обязательных полей из коробки. Ограничение: требуется схема и более сложная настройка.

Планы обмена

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

Как создать XML-файл через ЗаписьXML

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

Типовой пример — выгрузка списка товаров с ценами в простой XML-файл:

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

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

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

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

Запрос = Новый Запрос("ВЫБРАТЬ Наименование, Код ИЗ Справочник.Номенклатура");

Выборка = Запрос.Выполнить().Выбрать();

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

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

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

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

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

КонецЦикла;

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

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

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

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

Как сформировать XML через XDTO по схеме

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

Пример записи объекта XDTO в файл:

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

ТипОбъекта = Фабрика.Тип("http://example.org/doc", "Документ");

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

ОбъектXDTO.Номер = "0001";

ОбъектXDTO.Дата = ТекущаяДатаСеанса();

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

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

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

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

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

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

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

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

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

Как проверить, что XML сформирован правильно

Проверка состоит из трёх уровней. Первый — синтаксис: файл должен открываться в браузере или редакторе без ошибок разбора. Браузер покажет дерево элементов; если структура нарушена, будет указана строка с ошибкой.

Второй уровень — чтение файла обратно в 1С через «ЧтениеXML». Если тестовое чтение проходит без исключений и все ожидаемые элементы на месте, структура корректна. Третий уровень — валидация по XSD-схеме получателя: для формализованных документов используйте проверку на стороне оператора ЭДО, банковское тестирование или онлайн-валидаторы соответствующего ведомства.

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

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

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

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

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

Ошибка разбора с указанием строки — не закрыт элемент или битая кодировка

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

Все элементы читаются, значения атрибутов совпадают с исходными данными

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

Исключение при чтении или пустые значения вместо данных

Валидация по XSD-схеме
Норма

Файл проходит проверку без замечаний

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

Ошибки обязательных полей, типов или пространства имён

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

Чаще всего проблемы возникают из-за кодировки. Внешние системы обычно ждут UTF-8, а при записи в ANSI или UTF-16 кириллица превращается в нечитаемые символы. Кодировка задаётся вторым параметром метода «ОткрытьФайл» — явно указывайте «UTF-8».

Вторая группа ошибок — специальные символы в данных. Символы &, <, > и кавычки в тексте должны экранироваться. «ЗаписьXML» делает это автоматически при записи текста, но при ручной склейке XML строками через конкатенацию экранирование легко забыть — поэтому собирать XML конкатенацией строк не рекомендуется вовсе.

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

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

Часто задаваемые вопросы

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

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

Чем XDTO лучше ЗаписьXML?

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

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

Используйте функции «XMLСтрока» для дат и чисел: они приводят значения к каноническому виду XML (дата в ISO-формате, точка как разделитель дробной части). При чтении применяйте обратную функцию «XMLЗначение».

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

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

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

В универсальной обработке обмена задайте период выгрузки и отбор по организации или виду документа. При программной записи добавьте условия в запрос: период в параметрах запроса, отбор по реквизитам — в секции «ГДЕ».

Можно ли сформировать XML на сервере и отдать пользователю?

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

Итог

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

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