Выгрузка документа и данных в XML-файл из 1С 8.3: способы и код
Содержание
Сохранить документ в формате XML в 1С 8.3 можно четырьмя путями: кнопкой «Выгрузить» в форме регламентированного документа или ЭДО, универсальным обменом данными, кодом на встроенном языке (ЗаписьXML, СериализаторXDTO) или через XDTO-пакет со схемой. Если нужен просто файл для контрагента или ведомства, начинайте с первого пути: он не требует программирования.
Обычная печатная форма в XML не превращается: она хранится как табличный документ. XML — это формат данных, а не вид документа. Поэтому сначала решите, что именно вы выгружаете: сам объект базы (документ, справочник) или структурированный файл по чужому формату (УПД, отчёт, реестр).
Какой способ выбрать
| Задача | Способ | Нужен программист |
|---|---|---|
| Файл по формату ФНС, банка, ведомства | Штатная кнопка выгрузки в форме | Нет |
| Перенести документы между своими базами | Обмен данными в формате XML | Нет |
| Выгрузить произвольные поля документа | Код на встроенном языке | Да |
| Строгий формат по XSD-схеме | XDTO | Да |
| Регулярная выгрузка по расписанию | Обработка или регламентное задание | Да |
Способ 1. Штатная выгрузка в XML из формы
Большинство регламентированных файлов 1С умеет формировать сама. Ничего писать не нужно.
Электронные документы (УПД, счёт-фактура, акты)
- Откройте документ реализации или поступления.
- В командной панели найдите пункт
ЭДОилиЭлектронный документ(название зависит от релиза и конфигурации). - Выберите формирование электронного документа нужного вида.
- В форме электронного документа найдите команду сохранения файла на диск и укажите каталог.
Если пункта ЭДО нет, не подключён сервис обмена: Администрирование → Обмен электронными документами. Без включённой настройки меню не появится.
Регламентированные отчёты
Отчёты→Регламентированные отчёты.- Откройте нужную форму и заполните её.
- Нажмите
Выгрузитьи сохраните файл. Расширение будет.xml. - Перед отправкой прогоните файл через проверку: кнопка
Проверить выгрузкуили проверочная программа ведомства.
Файл регламентированного отчёта нельзя править руками в текстовом редакторе. Нарушится структура, и инспекция вернёт квитанцию с отказом.
Выгрузка списка в файл
Списки документов можно выгрузить через Все действия → Вывести список. Но это табличный вывод в Excel или текст, а не XML. Если на экране нужны именно XML-теги, берите способы ниже.
Способ 2. Обмен данными между базами в формате XML
Подходит, когда нужно перенести документ из одной базы 1С в другую: например, из Бухгалтерии 3.0 в другую копию той же конфигурации.
Как это работает
В типовых конфигурациях правила обмена хранятся в плане обмена. Файл создаётся в формате XML с описанием объектов и их полей. Принимающая база читает его и создаёт те же документы.
Порядок действий
- Откройте раздел
Администрированиеи найдите пункт настройки синхронизации данных (в разных релизах он называется по-разному, поэтому проще найти его через поиск по форме). - Создайте настройку обмена для нужной пары конфигураций.
- Задайте отбор: организации, период, виды документов.
- Выберите режим «через файл» и укажите каталог.
- Запустите выгрузку и заберите файл из каталога.
💡 Для разовой выгрузки удобнее всего режим обмена через каталог на диске: файл виден сразу и его можно передать любым способом.
В некоторых конфигурациях есть обработка универсального обмена данными в формате 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 вы создаёте объект по типу из пакета и заполняете его свойства. Запись в файл делает сама платформа.
Порядок работы
- Загрузите схему в конфигурацию: в конфигураторе ветка
Общие→Пакеты XDTO→ добавить пакет, импортировать XSD. - Создайте объект нужного типа через
ФабрикаXDTO.Создать. - Заполните свойства, включая обязательные.
- Запишите в файл через
Фабрика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. - 📌 Нужна разовая выгрузка по запросу руководителя: быстрее обработка с несколькими тегами.
- 📌 Схема меняется каждый квартал: поддерживать пакет в конфигурации дороже, чем править код.
Куда поместить код: обработка, расширение, регламентное задание
Писать код прямо в типовую конфигурацию нежелательно: обновление его затрёт или вызовет конфликт. Варианты по убыванию удобства:
| Вариант | Плюсы | Минусы |
|---|---|---|
| Внешняя обработка | Не трогает конфигурацию, легко передать | Нужно подключать вручную |
| Расширение конфигурации | Кнопка прямо в форме документа | Требует конфигуратора и сопровождения |
| Регламентное задание | Выгрузка идёт по расписанию | Нужны права и настройка сервера |
Как сделать кнопку в форме без правки типовой
- Создайте внешнюю обработку с формой и кнопкой «Выгрузить в XML».
- В параметрах выберите документ через
ПараметрыСеансаили поле выбора. - Подключите обработку через
Администрирование→Печатные формы, отчёты и обработки→Дополнительные отчёты и обработки(в конфигурациях с БСП). - Назначьте ей раздел и права пользователей.
Типичные ошибки при создании XML
Как проверить готовый файл
- 🔍 Откройте в браузере: структура покажет любую синтаксическую ошибку.
- 🔍 Проверьте первую строку: должна быть декларация
<?xml version="1.0" encoding="UTF-8"?>с нужной кодировкой. - 🔍 Если есть XSD, проверьте файл валидатором схемы до отправки.
- 🔍 Для обмена загрузите файл в тестовую копию базы, а не в рабочую.
Перед загрузкой XML в рабочую базу сделайте копию базы. Загрузка может создать или перезаписать документы, и откатить её удобнее из копии, чем удалять руками.
Практические примеры задач
Выгрузка накладной для контрагента с собственной системой
Контрагент просит файл с номером, датой и списком позиций. Формат простой, схемы нет. Берём ЗаписьXML, пишем шапку и табличную часть, кодировка UTF-8. Договариваетесь о формате чисел и дат заранее: один раз согласовать быстрее, чем переделывать.
Выгрузка справочника номенклатуры в другую систему
Для справочников удобно выбрать выборкой запроса всех элементов и записать каждый как тег с атрибутами: код, наименование, артикул, единица. Для больших справочников выгружайте частями (например, по группам), иначе файл разрастётся и обработка начнёт тормозить.
Передача данных по расписанию
Задание на сервере раз в сутки формирует файл и кладёт его в сетевую папку. Обработка должна проверять наличие каталога и логировать результат в журнал регистрации, иначе о сбое вы узнаете от получателя.
Автоматизация: что учесть
- 🔄 Формируйте имя файла с датой и номером:
invoice_00000012_20261006.xml. Так файлы не перезапишут друг друга. - 🔄 Старые файлы удаляйте по расписанию, иначе диск заполнится.
- 🔄 Ошибки пишите в журнал регистрации через
ЗаписьЖурналаРегистрации. - 🔄 Права на каталог выдайте учётной записи, под которой работает сервер 1С. У вашего пользователя они есть, у службы — нет, и именно из-за этого задание «молча» не пишет файл.
Частые вопросы
Можно ли сохранить документ 1С в XML без программирования?
Чем XML-файл 1С отличается от файла Excel?
Какая кодировка нужна для XML?
Как открыть XML-файл, чтобы посмотреть содержимое?
Как загрузить XML обратно в 1С?
ЧтениеXML или ПрочитатьXML. Сначала проверьте на копии базы.Почему файл получился пустым или не сохранился?
Закрыть либо у учётной записи нет прав на каталог. Проверьте путь и права и убедитесь, что код дошёл до закрытия файла.