Выгрузка документа из 1С в файл XML: ручные способы, обработки и программный код
Содержание
Готового пункта «Сохранить как XML» в карточке документа 1С нет. Выгрузку делают либо типовой обработкой Выгрузка и загрузка данных XML, либо через синхронизацию данных в формате EnterpriseData, либо коротким кодом на встроенном языке через СериализаторXDTO. Какой вариант выбрать — зависит от того, куда поедет файл: в такую же базу, в чужую программу или в руки программисту для разбора.
Ниже — все три способа с точными путями и проверенным примером кода, разбор массовой выгрузки нескольких документов сразу, типичные ошибки платформы и способ проверить, что XML получился корректным. Ориентируемся на 1С 8.3, интерфейс «Такси», типовые конфигурации (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) — но сам механизм XML один для всех конфигураций на управляемых формах.
Когда документ нужно выгрузить именно в XML
XML в 1С — это текстовый формат, в котором каждый реквизит документа записан отдельным тегом. Его читают и люди, и сторонние программы, поэтому выгрузка пригодится в нескольких ситуациях:
- 📤 перенос в другую базу 1С — когда данные нужно забрать из одной базы и загрузить в такую же или родственную конфигурацию;
- 🔗 интеграция со сторонней системой — сайтом, складской программой, банковским сервисом, которые принимают данные тегами;
- 🗄️ архив или выгрузка для аудитора — отдать документ в формате, не привязанном к конкретной версии 1С;
- 🛠️ разбор проблемного документа — программист смотрит в тегах, какие именно значения реквизитов записаны в базе.
Важно понимать разницу: выгрузка в XML сохраняет данные документа (реквизиты, табличные части, ссылки), а не его печатную форму. Если нужен документ «как на бумаге», это печать в PDF, а не XML. Для печатной формы XML не подходит.
Что именно попадёт в файл: реквизиты шапки (номер, дата, организация, контрагент), все строки табличных частей и служебные свойства — проведён документ или нет, пометка удаления. Ссылочные реквизиты записываются как идентификаторы объектов, а не как их наименования. Поэтому при загрузке в другую базу система ищет объект по этому идентификатору — и либо находит ранее перенесённый, либо создаёт новый. Это ключевая причина, по которой при межбазовой выгрузке так важна выгрузка по ссылкам.
Какими способами выгрузить документ в XML
Прямой кнопки в документе нет, зато есть три рабочих механизма. Они решают разные задачи, поэтому выбор способа важнее, чем кажется.
| Способ | Когда применять | Что нужно |
|---|---|---|
Обработка Выгрузка и загрузка данных XML | Перенос в такую же или близкую конфигурацию | Файл обработки с диска ИТС |
| Синхронизация в формате EnterpriseData | Регулярный обмен между типовыми конфигурациями | Настроенная синхронизация данных |
Код на СериализаторXDTO | Разовая или автоматизированная выгрузка под свою задачу | Доступ к Конфигуратору или внешняя обработка |
Если документ едет в чужую программу (не 1С), договаривайтесь о структуре заранее: универсальной выгрузки «понятной всем» не бывает, принимающая сторона должна знать, какие теги ждать. Для обмена между двумя базами 1С проще всего обработка Выгрузка и загрузка данных XML — она сама тянет за документом все связанные объекты (контрагента, номенклатуру, организацию), чтобы ссылки не «повисли».
Выгрузка документа типовой обработкой
Самый частый способ без программирования — обработка Выгрузка и загрузка данных XML (файл ВыгрузкаЗагрузкаДанныхXML.epf). Она не входит в конфигурацию, её берут с диска ИТС или из поставки.
Порядок действий:
- Включите команду «Все функции», если её не видно:
Главное меню → Настройки → Параметрыи поставьте галкуОтображать команду "Все функции". - Откройте файл обработки:
Главное меню → Файл → Открытьи укажитеВыгрузкаЗагрузкаДанныхXML.epf. - На закладке выгрузки в дереве метаданных найдите нужный документ (например,
Документы → РеализацияТоваровУслуг). - Отберите конкретные документы — по периоду или галками в списке, чтобы не выгружать всё подряд.
- Проверьте, что включена выгрузка по ссылкам — иначе в другой базе документ загрузится с пустыми реквизитами.
- Укажите имя файла, нажмите кнопку выгрузки. На выходе — один
.xmlсо всеми отобранными объектами.
Обработка выгружает объекты вместе со ссылочными данными. Если выгружаете реализацию, в файл автоматически попадут контрагент, договор, номенклатура из строк — загрузка в приёмнике пройдёт без «битых» ссылок.
Открытие внешних обработок может быть запрещено настройками безопасности базы. Если Файл → Открыть не даёт запустить .epf, обратитесь к администратору — право на внешние обработки выдаётся в профилях безопасности, самостоятельно его обходить не нужно.
Выгрузка через синхронизацию и формат EnterpriseData
Когда обмен документами между базами нужен не разово, а постоянно, ручная обработка неудобна. Для этого в типовых конфигурациях есть синхронизация данных в универсальном формате EnterpriseData.
Путь к настройке: Администрирование → Синхронизация данных. Здесь создаётся настройка обмена, в которой вы указываете состав выгружаемых данных и расписание. Файлы выгрузки — это те же XML, но построенные по опубликованной схеме EnterpriseData, одинаковой для разных типовых конфигураций.
Чем EnterpriseData удобнее ручной обработки:
- 🔄 выгружает только изменённые документы, а не всё заново;
- 🧩 формат общий для Бухгалтерии, ЗУП, УТ и ERP — приёмник понимает отправителя без правил конвертации;
- 📅 работает по расписанию через регламентное задание, без участия пользователя.
Минус — настройка сложнее: нужно задать правила отбора и сопоставить организации в обеих базах. Для единичной выгрузки одного документа это избыточно; EnterpriseData оправдан там, где документы идут потоком каждый день.
Первый обмен EnterpriseData всегда тяжелее последующих: при начальной выгрузке система отправляет не только документы, но и всю связанную нормативно-справочную информацию — контрагентов, номенклатуру, договоры. Дальше в файлы попадают только изменения с момента прошлой синхронизации. Поэтому не пугайтесь размера первого файла: это разовая загрузка справочников, а не ошибка настройки.
Если базы нетиповые или сильно доработаны, применяют механизм правил обмена из «Конвертации данных»: обработка Универсальный обмен данными в формате XML (УниверсальныйОбменДаннымиXML.epf) выгружает документы по заранее созданному файлу правил. Правила описывают, какой реквизит источника в какой тег попадёт. Это задача для программиста: без готовых правил обработка не выгрузит ничего осмысленного.
Массовая выгрузка нескольких документов за раз
Выгрузить сразу партию документов можно теми же механизмами — важно правильно задать отбор.
Через обработку Выгрузка и загрузка данных XML: на закладке выгрузки для нужного вида документа задайте отбор по периоду, организации или другому реквизиту. Все подходящие документы уйдут в один файл. Для разных видов документов (реализации, поступления, платёжки) отметьте в дереве метаданных каждый вид — обработка соберёт их в общую выгрузку.
Через групповую обработку в списке: откройте список документов, настройте отбор колонок по нужным условиям, выделите строки. Дальше выгрузка всё равно идёт через обработку XML — штатной команды «сохранить выделенные в XML» в списке нет, выделение лишь помогает понять объём.
Для регулярной массовой выгрузки удобнее один раз настроить EnterpriseData с отбором по виду документа и периоду, чем каждый раз вручную отмечать объекты в дереве метаданных.
Чек-лист перед массовой выгрузкой:
Программная выгрузка документа в XML
Когда выгрузку нужно встроить в свой алгоритм — по кнопке, по расписанию или с нестандартной структурой — пишут код на встроенном языке. Базовый инструмент сериализации объекта 1С в XML — глобальный объект СериализаторXDTO.
Минимальный рабочий пример — выгрузка одного документа по ссылке в файл:
// ДокументСсылка — ссылка на выгружаемый документ
ОбъектДокумента = ДокументСсылка.ПолучитьОбъект();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Выгрузка\Документ.xml", "UTF-8");
СериализаторXDTO.ЗаписатьXML(Запись, ОбъектДокумента);
Запись.Закрыть();
Что здесь происходит по шагам:
ПолучитьОбъект()читает из базы весь документ целиком — шапку и табличные части.ЗаписьXMLоткрывает файл на диске в кодировкеUTF-8.СериализаторXDTO.ЗаписатьXMLпревращает объект в набор тегов и пишет в файл.Закрыть()сбрасывает буфер на диск — без него файл останется пустым или обрежется.
Чтобы выгрузить несколько документов в один файл, оберните сериализацию в цикл по выборке, открыв запись один раз до цикла и закрыв после:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &Нач И &Кон";
Запрос.УстановитьПараметр("Нач", НачалоДня(ДатаНачала));
Запрос.УстановитьПараметр("Кон", КонецДня(ДатаКонца));
Выборка = Запрос.Выполнить().Выбрать();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Выгрузка\Реализации.xml", "UTF-8");
Пока Выборка.Следующий() Цикл
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект());
КонецЦикла;
Запись.Закрыть();
Если нужна не запись в файл, а строка XML для отправки в веб-сервис, замените ЗаписьXML с файлом на ЗаписьXML, открытую в строку (Запись.УстановитьСтроку()), и после цикла заберите результат через Запись.Закрыть().
Спецсимволы в данных (кавычки, амперсанд &, угловые скобки) экранировать вручную не нужно — СериализаторXDTO подставляет корректные XML-сущности сам. А вот путь к папке выгрузки должен существовать заранее: ОткрытьФайл не создаёт недостающие каталоги и завершится ошибкой, если C:\Выгрузка\ нет. При выгрузке на сервере (фоновое задание) путь считается от сервера 1С, а не от компьютера пользователя — частый источник «файл выгрузился, но его нигде нет».
Такой код можно разместить во внешней обработке — тогда Конфигуратор не нужен, обработка открывается через Файл → Открыть как обычная. Для разовой выгрузки это быстрее, чем настраивать обмен.
Типичные ошибки при выгрузке XML и их решение
Чаще всего спотыкаются не на самой выгрузке, а на доступе к обработке и на кодировке файла.
Главное меню → Настройки → Параметры и поставьте галку Отображать команду "Все функции".UTF-8; при записи кодом явно укажите её в ОткрытьФайл.Запись.Закрыть() — данные остались в буфере. Закрывайте запись после последнего объекта.Отдельно про монопольный доступ: для выгрузки документов в XML он не нужен. Монопольный режим требуется только для обновления структуры базы, загрузки .dt и тестирования — обычная выгрузка данных идёт при работающих пользователях.
Как проверить, что XML получился корректным
Файл выгрузился — это ещё не гарантия, что он правильный. Быструю проверку делают в три приёма:
- Откройте XML в браузере. Любой браузер показывает дерево тегов. Если файл открылся без ошибки и видна структура с данными документа — XML синтаксически валиден. Если браузер пишет об ошибке разбора, файл битый (обрыв записи, лишние символы).
- Сверьте ключевые реквизиты. Найдите в тегах номер документа, дату, сумму, контрагента — убедитесь, что значения совпадают с тем, что в базе. Пустые теги по важным реквизитам означают, что данные не выгрузились.
- Выполните пробную загрузку. Для файлов межбазового обмена лучший тест — загрузить XML в тестовую копию приёмника той же обработкой. Прошло без ошибок ссылок — выгрузка полная.
Для формата EnterpriseData есть опубликованные XSD-схемы: файл можно проверить на соответствие схеме валидатором XML. Если проверяете вручную через загрузку, делайте это только в копии базы, а не в рабочей, чтобы пробная загрузка не наплодила дублей документов.
Структура тегов зависит от способа выгрузки: обработка Выгрузка и загрузка данных XML и EnterpriseData дают разные схемы. Поэтому файл, выгруженный одним способом, грузится только тем же способом — не перепутайте инструмент загрузки.
Частые вопросы
Есть ли в карточке документа кнопка «Сохранить как XML»?
Можно ли выгрузить XML без Конфигуратора и программиста?
Выгрузка и загрузка данных XML и синхронизация в формате EnterpriseData работают в режиме 1С:Предприятие, код писать не нужно.