Документ 1С в XML-файле: обработки обмена, электронные форматы и свой код
Содержание
Чтобы выгрузить документ в формате XML из 1С 8.3, чаще всего хватает внешней обработки ВыгрузкаЗагрузкаДанныхXML83.epf: открываете её через Файл → Открыть, отмечаете вид документа и период, указываете имя файла и жмёте «Выгрузить данные». Получится XML, который загружается в базу с такой же конфигурацией.
Если файл нужен не для переноса между одинаковыми базами, а для налоговой, контрагента или другой программы, подходит иной путь: регламентированный отчёт, электронный документ в формате ФНС, обмен EnterpriseData или собственный код на ЗаписьXML. Ниже каждый способ разобран по шагам, с проверкой готового файла и разбором ошибок.
Какой способ выгрузки в XML выбрать
Один и тот же «документ в XML» означает четыре разные задачи. Сначала определите, кто будет читать файл.
| Кто читает файл | Способ | Формат внутри |
|---|---|---|
| Другая база с той же конфигурацией | ВыгрузкаЗагрузкаДанныхXML83.epf | Стандартная XML-сериализация платформы |
| База с другой конфигурацией | Синхронизация через EnterpriseData или универсальный обмен по правилам | EnterpriseData или формат правил конвертации |
| Налоговая, СФР, контрагент по ЭДО | Регламентированный отчёт или электронный документ | Утверждённый XML-формат ФНС (XSD-схема) |
| Сайт, склад, самописная система | Своя внешняя обработка | Любая структура, которую вы задали |
Подготовка базы и прав перед выгрузкой документов в XML
Перед выгрузкой проверьте три вещи. Это займёт пару минут и снимет половину вопросов из раздела про ошибки.
Права пользователя. Внешние обработки открывает тот, у кого есть право на интерактивное открытие внешних обработок. В типовых конфигурациях на БСП оно входит в профиль «Администратор». Обычному бухгалтеру проще зарегистрировать обработку один раз как дополнительную, тогда права на открытие файлов не понадобятся.
Предупреждение безопасности. Платформа 8.3 при открытии внешнего файла показывает окно о возможной угрозе. Это штатная защита от опасных действий. Открывайте только обработки из известного источника и подтверждайте запуск.
Видимость команды «Все функции». Встроенные обработки БСП ищут через меню «Все функции». Включается оно так: Главное меню → Сервис → Параметры → Отображать команду "Все функции".
Порядок регистрации обработки в БП 3.0, ЗУП 3.1 и УТ 11 одинаковый:
- Откройте
Администрирование → Печатные формы, отчеты и обработки. - Включите флажок «Дополнительные отчеты и обработки» и перейдите по одноимённой ссылке.
- Нажмите «Добавить из файла» и выберите
.epf. - На вкладке размещения укажите разделы, где обработка появится, и пользователей с доступом.
- Нажмите «Записать и закрыть».
Обработка ВыгрузкаЗагрузкаДанныхXML83 создана для любых конфигураций и не содержит сведений о регистрации для БСП. Если «Добавить из файла» отказывается её принимать, открывайте её через Файл → Открыть под пользователем с правами администратора.
Выгрузка документа в XML через обработку обмена данными
Обработка ВыгрузкаЗагрузкаДанныхXML83
Это служебная обработка фирмы 1С, она распространяется на диске ИТС и в составе материалов для разработчиков. Не путайте её с вариантом для 8.2: для 8.3 с управляемыми формами нужен файл с «83» в имени.
- Запустите базу в режиме «1С:Предприятие».
- Откройте
Файл → Открытьи выберитеВыгрузкаЗагрузкаДанныхXML83.epf. - На вкладке «Выгрузка» задайте период: дату начала и дату окончания.
- В дереве объектов раскройте ветку «Документы» и отметьте флажком нужный вид, например «Реализация (акт, накладная, УПД)».
- Нужен один конкретный документ? Сузьте период до его даты: в файл попадут только документы этого вида за выбранные дни.
- Укажите имя файла выгрузки, например
D:\Obmen\realizaciya.xml. - Нажмите «Выгрузить данные».
Обработка сама добавит в файл объекты, на которые ссылается документ: контрагента, номенклатуру, договор, склад. Поэтому файл получается заметно больше одного документа, и это нормально: без справочников приёмник не сможет заполнить реквизиты.
💡 На приёмной стороне та же обработка, вкладка «Загрузка». Перед загрузкой сделайте резервную копию: документы с теми же идентификаторами перезапишутся без вопросов.
Универсальный обмен по правилам конвертации
Когда конфигурации разные, нужна обработка «Универсальный обмен данными в формате XML». В типовых конфигурациях на БСП она встроена, найдите её через Все функции → Обработки. Отдельно она поставляется как V8Exchan83.epf вместе с конфигурацией «Конвертация данных
» 2.x.
Работает она только с файлом правил обмена. Правила для пар типовых конфигураций есть в поставке, свои пишут в «Конвертации данных». В обработке на вкладке выгрузки указываете файл правил, период и имя XML-файла, затем выбираете, какие правила выгрузки включить.
Синхронизация в формате EnterpriseData
В БП 3.0, УТ 11, КА 2 и ERP обмен между разными программами идёт через формат EnterpriseData. Это XML с открытой схемой, его понимают типовые конфигурации и многие сторонние системы.
- Откройте
Администрирование → Синхронизация данных. - Включите флажок «Синхронизация данных».
- Создайте новую синхронизацию и выберите программу-приёмник из списка.
- В качестве транспорта укажите каталог на диске или FTP-ресурс.
- Настройте правила отправки: с какой даты и какие документы выгружать.
- Запустите синхронизацию. В каталоге появится XML-файл сообщения обмена, обычно в zip-архиве.
Выгрузка в XML из печатных форм и регламентированных отчётов
Почему печатная форма не сохраняется в XML
Печатная форма в 1С — табличный документ. В окне печати кнопка сохранения предлагает MXL, XLS, XLSX, ODS, PDF, DOCX, HTML и TXT. Отдельного формата XML среди них нет.
Если вам нужен XML «как в печатной форме», значит, на самом деле требуется электронный документ установленного формата или своя выгрузка. Переименовать HTML в .xml не получится: принимающая сторона ждёт конкретную структуру.
Электронные документы ФНС: УПД, счёт-фактура, акт
Счета-фактуры, УПД, товарные накладные и акты имеют утверждённые ФНС XML-форматы. В БП 3.0 и УТ 11 такой файл формирует подсистема ЭДО даже без подключённого оператора.
- Откройте проведённый документ, например «Реализация (акт, накладная, УПД)».
- В командной панели формы найдите подменю «ЭДО».
- Выберите команду выгрузки электронного документа в файл.
- Укажите каталог. Программа сохранит XML с именем по правилам ФНС: для УПД оно начинается с
ON_NSCHFDOPPR.
Файл открывается контрагентом в его учётной программе или загружается через «Загрузить из файла» в той же подсистеме.
Регламентированные отчёты
Декларации и расчёты выгружаются в XML прямо из формы отчёта.
- Откройте
Отчеты → Регламентированные отчеты. - Откройте нужный отчёт, например декларацию по НДС.
- Нажмите «Проверить», чтобы программа сверила контрольные соотношения и заполнение.
- Нажмите «Выгрузить» и выберите каталог.
Имя файла начинается с префикса формата, например NO_NDS. Кодировка — windows-1251, как требует ФНС. Пересохранять такой файл в другой кодировке нельзя.
Программная выгрузка документа в XML внешней обработкой
Стандартная сериализация одной строкой кода
Платформа умеет записать объект целиком методом глобального контекста ЗаписатьXML. Получится тот же формат, что у обработки ВыгрузкаЗагрузкаДанныхXML83.
&НаСервереБезКонтекста
Процедура ВыгрузитьДокумент(Ссылка, ИмяФайла)
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
ЗаписатьXML(Запись, Ссылка.ПолучитьОбъект());
Запись.Закрыть();
КонецПроцедуры
Процедура выполняется на сервере. В клиент-серверной базе путь ИмяФайла указывает на диск сервера 1С, а не на компьютер пользователя.
Своя структура для сторонней программы
Обычно получателю нужен не служебный формат 1С, а простой и понятный файл: номер, дата, контрагент, строки товаров. Его собирают вручную методами ЗаписьXML.
&НаСервереБезКонтекста
Функция ДокументВСтрокуXML(Ссылка)
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку("UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Документ");
Запись.ЗаписатьАтрибут("Номер", Ссылка.Номер);
Запись.ЗаписатьАтрибут("Дата", XMLСтрока(Ссылка.Дата));
Запись.ЗаписатьАтрибут("Контрагент", Строка(Ссылка.Контрагент));
Запись.ЗаписатьНачалоЭлемента("Товары");
Для Каждого СтрокаТЧ Из Ссылка.Товары Цикл
Запись.ЗаписатьНачалоЭлемента("Строка");
Запись.ЗаписатьАтрибут("Номенклатура", Строка(СтрокаТЧ.Номенклатура));
Запись.ЗаписатьАтрибут("Количество", XMLСтрока(СтрокаТЧ.Количество));
Запись.ЗаписатьАтрибут("Сумма", XMLСтрока(СтрокаТЧ.Сумма));
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // Товары
Запись.ЗаписатьКонецЭлемента(); // Документ
Возврат Запись.Закрыть();
КонецФункции
Пример рассчитан на документ с табличной частью «Товары» и реквизитом «Контрагент», как у реализации в БП 3.0. Для другого документа поменяйте имена реквизитов на свои: их видно в конфигураторе в дереве метаданных.
Пояснения к коду:
- 🔹
УстановитьСтрокупишет XML в память, аЗакрыть()возвращает готовый текст. Его удобно передать на клиент и сохранить там, где выберет пользователь. - 🔹
XMLСтрокапереводит дату и число в стандартный вид: дата станет2026-10-07T00:00:00, дробная часть отделится точкой. Без неё в файл попадёт «1 250,50» с пробелом, и принимающая программа его не разберёт. - 🔹 Каждому
ЗаписатьНачалоЭлементанужен свойЗаписатьКонецЭлемента. Пропуск даёт ошибку при закрытии или битый файл.
На клиенте текст сохраняют через ТекстовыйДокумент: создаёте объект, вызываете УстановитьТекст и записываете файл с кодировкой UTF-8.
Если получатель дал XSD-схему, загрузите её в «Пакеты XDTO» конфигурации или расширения и стройте объекты через ФабрикаXDTO. Тогда платформа сама не даст записать элемент, которого нет в схеме.
Где хранить свою выгрузку
Оформляйте код как внешнюю обработку или как расширение конфигурации . Правка типовой конфигурации ради выгрузки ломает автоматическое обновление . Расширение переживает обновления и подключается без снятия конфигурации с поддержки.
Как проверить сформированный XML-файл
Файл выгрузился без сообщений — это ещё не значит, что он правильный. Проверка занимает пару минут.
- Откройте файл в браузере. Chrome, Firefox или Edge покажут дерево элементов. Если структура нарушена, браузер выведет ошибку разбора с номером строки.
- Посмотрите кодировку в первой строке:
<?xml version="1.0" encoding="UTF-8"?>илиwindows-1251. Она должна совпадать с той, что ждёт получатель. - Сверьте суммы и количество строк с документом в 1С. Пустой элемент «Товары» обычно значит, что выгружали непроведённый документ или неверное имя табличной части.
- Проверьте по XSD-схеме, если она есть. На Linux и в WSL это делает утилита
xmllint:
xmllint --noout --schema schema.xsd document.xml
При успехе она напишет document.xml validates. Иначе покажет элемент, который не соответствует схеме.
- Пробная загрузка. Для обмена между базами загрузите файл в копию базы -приёмника. Пробовать сразу на рабочей базе не стоит: исправлять загруженные дубли дольше, чем сделать копию.
Для отчётов ФНС достаточно кнопки «Проверить» в форме отчёта. Она проверяет и заполнение, и соответствие формату.
Ошибки при выгрузке документов в формат XML
Автоматическая выгрузка документов в XML по расписанию
Ручная выгрузка раз в месяц — нормально. Ежедневная — уже повод автоматизировать. Варианта три.
Расписание синхронизации. В настройке синхронизации данных включите автоматический запуск и задайте расписание, например каждые 30 минут в рабочее время. Это самый простой путь для обмена EnterpriseData или по правилам.
Регламентное задание в расширении. Добавьте в расширение регламентное задание и общий модуль с процедурой выгрузки. Расписание редактируется в Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. В клиент-серверной базе задания выполняет сервер 1С, пользователь может быть не в программе.
Пакетный запуск из Планировщика заданий Windows. Для файловой базы годится bat-файл, который открывает базу и сразу выполняет внешнюю обработку:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Obmen" /P"пароль" /Execute"D:\Obmen\VygruzkaXML.epf"
Обработка должна сама выполнить выгрузку при открытии формы и завершить работу программы методом ЗавершитьРаботуСистемы(Ложь).
Пароль в bat-файле лежит открытым текстом. Заведите под выгрузку отдельного пользователя только с нужными правами и закройте папку со скриптом от посторонних.
Сеанс такого пользователя занимает лицензию на время работы. Ставьте запуск на время, когда лицензий заведомо хватает, например на раннее утро.