Выгрузка документа и данных в XML-файл из 1С 8.3: способы и код

· 9 мин

Содержание

Сохранить документ в формате XML в 1С 8.3 можно четырьмя путями: кнопкой «Выгрузить» в форме регламентированного документа или ЭДО, универсальным обменом данными, кодом на встроенном языке (ЗаписьXML, СериализаторXDTO) или через XDTO-пакет со схемой. Если нужен просто файл для контрагента или ведомства, начинайте с первого пути: он не требует программирования.

Обычная печатная форма в XML не превращается: она хранится как табличный документ. XML — это формат данных, а не вид документа. Поэтому сначала решите, что именно вы выгружаете: сам объект базы (документ, справочник) или структурированный файл по чужому формату (УПД, отчёт, реестр).

Какой способ выбрать

ЗадачаСпособНужен программист
Файл по формату ФНС, банка, ведомстваШтатная кнопка выгрузки в формеНет
Перенести документы между своими базамиОбмен данными в формате XMLНет
Выгрузить произвольные поля документаКод на встроенном языкеДа
Строгий формат по XSD-схемеXDTOДа
Регулярная выгрузка по расписаниюОбработка или регламентное заданиеДа

Способ 1. Штатная выгрузка в XML из формы

Большинство регламентированных файлов 1С умеет формировать сама. Ничего писать не нужно.

Электронные документы (УПД, счёт-фактура, акты)

  1. Откройте документ реализации или поступления.
  2. В командной панели найдите пункт ЭДО или Электронный документ (название зависит от релиза и конфигурации).
  3. Выберите формирование электронного документа нужного вида.
  4. В форме электронного документа найдите команду сохранения файла на диск и укажите каталог.

Если пункта ЭДО нет, не подключён сервис обмена: Администрирование → Обмен электронными документами. Без включённой настройки меню не появится.

Регламентированные отчёты

  1. Отчёты → Регламентированные отчёты.
  2. Откройте нужную форму и заполните её.
  3. Нажмите Выгрузить и сохраните файл. Расширение будет .xml.
  4. Перед отправкой прогоните файл через проверку: кнопка Проверить выгрузку или проверочная программа ведомства.

Файл регламентированного отчёта нельзя править руками в текстовом редакторе. Нарушится структура, и инспекция вернёт квитанцию с отказом.

Выгрузка списка в файл

Списки документов можно выгрузить через Все действия → Вывести список. Но это табличный вывод в Excel или текст, а не XML. Если на экране нужны именно XML-теги, берите способы ниже.

Способ 2. Обмен данными между базами в формате XML

Подходит, когда нужно перенести документ из одной базы 1С в другую: например, из Бухгалтерии 3.0 в другую копию той же конфигурации.

Как это работает

В типовых конфигурациях правила обмена хранятся в плане обмена. Файл создаётся в формате XML с описанием объектов и их полей. Принимающая база читает его и создаёт те же документы.

Порядок действий

  1. Откройте раздел Администрирование и найдите пункт настройки синхронизации данных (в разных релизах он называется по-разному, поэтому проще найти его через поиск по форме).
  2. Создайте настройку обмена для нужной пары конфигураций.
  3. Задайте отбор: организации, период, виды документов.
  4. Выберите режим «через файл» и укажите каталог.
  5. Запустите выгрузку и заберите файл из каталога.

💡 Для разовой выгрузки удобнее всего режим обмена через каталог на диске: файл виден сразу и его можно передать любым способом.

В некоторых конфигурациях есть обработка универсального обмена данными в формате XML. Её запускают как внешнюю обработку : Файл → Открыть, выбираем файл обработки. Для работы нужны правила обмена, то есть отдельный файл, который описывает соответствие объектов двух баз.

Сопоставление полей
Организация→Организация (по ИНН и КПП)
Контрагент→Контрагент (по ИНН)
Номенклатура→Номенклатура (по артикулу или наименованию)
Договор→Договор контрагента
Номер документа→Номер документа
Дата→Дата документа

Способ 3. Как сохранить документ в XML кодом на встроенном языке

Если штатных средств мало, формат файла задаёте вы. Основной объект для этого называется ЗаписьXML.

Простой пример: свои теги

Сохраняем номер, дату и сумму документа в файл. Код выполняется на сервере.

Процедура ВыгрузитьДокументВXML(ДокументСсылка, ИмяФайла)

    ЗаписьXML = Новый ЗаписьXML;
    ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8");
    ЗаписьXML.ЗаписатьОбъявлениеXML();

    ЗаписьXML.ЗаписатьНачалоЭлемента("Документ");
    ЗаписьXML.ЗаписатьАтрибут("Номер", ДокументСсылка.Номер);
    ЗаписьXML.ЗаписатьАтрибут("Дата", Формат(ДокументСсылка.Дата, "ДФ=yyyy-MM-dd"));

    ЗаписьXML.ЗаписатьНачалоЭлемента("Сумма");
    ЗаписьXML.ЗаписатьТекст(Формат(ДокументСсылка.СуммаДокумента, "ЧДЦ=2; ЧРД=.; ЧГ=0"));
    ЗаписьXML.ЗаписатьКонецЭлемента();

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

КонецПроцедуры

Результат в файле:

<?xml version="1.0" encoding="UTF-8"?>
<Документ Номер="00000012" Дата="2026-10-06">
  <Сумма>118000.00</Сумма>
</Документ>

На что обратить внимание в коде

  • ✅ Кодировку указывайте явно: вторым параметром ОткрытьФайл. Для большинства обменов нужна UTF-8, для старых банковских форматов иногда windows-1251.
  • ✅ Числа выводите через Формат с точкой как разделителем: ЧРД=.. Иначе получите запятую, которую приёмник не разберёт.
  • ✅ Даты пишите в формате ГГГГ-ММ-ДД или ISO, как требует приёмник.
  • ✅ Текст с символами <, > и & ЗаписьXML экранирует сама. Склеивать XML строками не надо.

Реквизит СуммаДокумента есть не у всех документов. Если его нет, обращение вызовет ошибку «Поле объекта не обнаружено». Проверьте состав реквизитов в конфигураторе.

Табличная часть

Для документа с несколькими строками добавьте цикл по табличной части внутри элемента Документ.

ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");
Для Каждого Строка Из ДокументСсылка.Товары Цикл
    ЗаписьXML.ЗаписатьНачалоЭлемента("Строка");
    ЗаписьXML.ЗаписатьАтрибут("Номенклатура", Строка.Номенклатура.Наименование);
    ЗаписьXML.ЗаписатьАтрибут("Количество", Формат(Строка.Количество, "ЧРД=.; ЧГ=0"));
    ЗаписьXML.ЗаписатьАтрибут("Цена", Формат(Строка.Цена, "ЧДЦ=2; ЧРД=.; ЧГ=0"));
    ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();

Имя табличной части у вас может отличаться: для поступления это обычно Товары, для других документов смотрите структуру в конфигураторе.

Сериализация объекта целиком

Если нужно выгрузить документ со всеми реквизитами в «родном» формате 1С, используйте сериализатор.

Объект = ДокументСсылка.ПолучитьОбъект();

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\doc.xml", "UTF-8");
ЗаписатьXML(ЗаписьXML, Объект);
ЗаписьXML.Закрыть();

Метод ЗаписатьXML из глобального контекста превращает объект в XML через XDTO-сериализацию. Такой файл прочитает только 1С: обратно его загружает ПрочитатьXML. Для внешних систем он, как правило, неудобен.

Способ 4. XDTO и работа по схеме

Когда приёмник даёт XSD-схему и проверяет файл по ней, писать теги вручную рискованно. Достаточно пропустить одну обязательную ветку, и файл отвергнут.

В XDTO вы создаёте объект по типу из пакета и заполняете его свойства. Запись в файл делает сама платформа.

Порядок работы

  1. Загрузите схему в конфигурацию: в конфигураторе ветка Общие → Пакеты XDTO → добавить пакет, импортировать XSD.
  2. Создайте объект нужного типа через ФабрикаXDTO.Создать.
  3. Заполните свойства, включая обязательные.
  4. Запишите в файл через ФабрикаXDTO.ЗаписатьXML.
Тип = ФабрикаXDTO.Тип("http://example.org/schema", "Invoice");
Объект = ФабрикаXDTO.Создать(Тип);
Объект.Number = "00000012";
Объект.Date = Дата(2026, 10, 6);

ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Temp\invoice.xml", "UTF-8");
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Объект);
ЗаписьXML.Закрыть();

Адрес пространства имён и имена свойств здесь условные. Подставьте значения из вашей схемы.

💡 Платформа проверит заполнение. Если обязательное свойство пропущено, при записи вы получите ошибку сразу, а не отказ от приёмника через день.

Когда XDTO не нужен

  • 📌 Формат простой и приёмник не проверяет схему: хватит ЗаписьXML.
  • 📌 Нужна разовая выгрузка по запросу руководителя: быстрее обработка с несколькими тегами.
  • 📌 Схема меняется каждый квартал: поддерживать пакет в конфигурации дороже, чем править код.

Куда поместить код: обработка, расширение, регламентное задание

Писать код прямо в типовую конфигурацию нежелательно: обновление его затрёт или вызовет конфликт. Варианты по убыванию удобства:

ВариантПлюсыМинусы
Внешняя обработкаНе трогает конфигурацию, легко передатьНужно подключать вручную
Расширение конфигурацииКнопка прямо в форме документаТребует конфигуратора и сопровождения
Регламентное заданиеВыгрузка идёт по расписаниюНужны права и настройка сервера

Как сделать кнопку в форме без правки типовой

  1. Создайте внешнюю обработку с формой и кнопкой «Выгрузить в XML».
  2. В параметрах выберите документ через ПараметрыСеанса или поле выбора.
  3. Подключите обработку через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки (в конфигурациях с БСП).
  4. Назначьте ей раздел и права пользователей.
Пошаговый помощник
Определить формат
Узнайте у получателя: есть ли XSD, какая кодировка, как оформлять числа и даты.

Типичные ошибки при создании XML

Диагностика: выберите симптом

Как проверить готовый файл

  • 🔍 Откройте в браузере: структура покажет любую синтаксическую ошибку.
  • 🔍 Проверьте первую строку: должна быть декларация <?xml version="1.0" encoding="UTF-8"?> с нужной кодировкой.
  • 🔍 Если есть XSD, проверьте файл валидатором схемы до отправки.
  • 🔍 Для обмена загрузите файл в тестовую копию базы, а не в рабочую.

Перед загрузкой XML в рабочую базу сделайте копию базы. Загрузка может создать или перезаписать документы, и откатить её удобнее из копии, чем удалять руками.

Практические примеры задач

Выгрузка накладной для контрагента с собственной системой

Контрагент просит файл с номером, датой и списком позиций. Формат простой, схемы нет. Берём ЗаписьXML, пишем шапку и табличную часть, кодировка UTF-8. Договариваетесь о формате чисел и дат заранее: один раз согласовать быстрее, чем переделывать.

Выгрузка справочника номенклатуры в другую систему

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

Передача данных по расписанию

Задание на сервере раз в сутки формирует файл и кладёт его в сетевую папку. Обработка должна проверять наличие каталога и логировать результат в журнал регистрации, иначе о сбое вы узнаете от получателя.

Автоматизация: что учесть

  • 🔄 Формируйте имя файла с датой и номером: invoice_00000012_20261006.xml. Так файлы не перезапишут друг друга.
  • 🔄 Старые файлы удаляйте по расписанию, иначе диск заполнится.
  • 🔄 Ошибки пишите в журнал регистрации через ЗаписьЖурналаРегистрации.
  • 🔄 Права на каталог выдайте учётной записи, под которой работает сервер 1С. У вашего пользователя они есть, у службы — нет, и именно из-за этого задание «молча» не пишет файл.
Перед отправкой XML-файла
Выполнено: 0 / 7

Частые вопросы

Можно ли сохранить документ 1С в XML без программирования?
Да, если у документа есть штатная выгрузка: электронный документ (УПД, счёт-фактура) или регламентированный отчёт. Для произвольного документа без кода подойдёт обмен данными между базами.
Чем XML-файл 1С отличается от файла Excel?
В Excel вы получаете таблицу для просмотра. XML хранит структурированные данные с тегами, и его читают программы. Для людей он неудобен, для обмена с системами подходит лучше.
Какая кодировка нужна для XML?
Для большинства задач UTF-8. Для некоторых банковских и старых форматов требуется windows-1251. Кодировку определяет получатель, спросите у него заранее.
Как открыть XML-файл, чтобы посмотреть содержимое?
Откройте в браузере или в текстовом редакторе. В Блокноте он читается, но без отступов. Для удобства используйте редактор с подсветкой XML.
Как загрузить XML обратно в 1С?
Для файла обмена используйте тот же механизм обмена в принимающей базе. Для своего формата нужна обработка с ЧтениеXML или ПрочитатьXML. Сначала проверьте на копии базы.
Почему файл получился пустым или не сохранился?
Чаще всего не вызван Закрыть либо у учётной записи нет прав на каталог. Проверьте путь и права и убедитесь, что код дошёл до закрытия файла.