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