Выгрузка из 1С 8.3 в XML: обработки, правила обмена и код на XDTO

· 9 мин

Содержание

Выгрузить данные из 1С в XML быстрее всего внешней обработкой «Выгрузка и загрузка данных XML»: открываете её через Файл → Открыть, отмечаете в дереве справочники и документы, указываете файл и нажимаете кнопку выгрузки. Так получается файл, который загрузится в базу той же конфигурации. Если же приёмник — другая программа или другая конфигурация, нужен обмен по правилам (Конвертация данных ) или свой код на XDTO.

Способ выбирают по одному вопросу: кто будет читать файл. Вся статья про платформу 1С:Предприятие 8.3, интерфейс «Такси», типовые конфигурации вроде Бухгалтерии 3.0, УТ 11 и ЗУП 3.1.

Какой способ выгрузки в XML подходит под вашу задачу

У 1С нет одной кнопки «Сохранить базу как XML». Есть несколько механизмов, и каждый пишет XML в своей схеме.

СпособКогда подходитЧто получитсяСложность
Обработка «Выгрузка и загрузка данных XML»Перенос данных между базами одной конфигурации и версииXML во внутреннем формате платформыНизкая
Синхронизация данных (EnterpriseData)Обмен между типовыми конфигурациями: БП, УТ, УНФ, ERPXML по формату EnterpriseDataСредняя
Правила Конвертации данных 2.0 + универсальный обменПеренос между разными конфигурациями, в том числе нетиповымиXML по правилам обменаСредняя–высокая
Свой код: СериализаторXDTO, ЗаписьXMLФайл для внешней системы, сайта, банка, своего сервисаXML ровно в нужной структуреТребует программиста
Встроенные выгрузки типовых решенийОтчётность в ФНС и СФР, обмен с сайтом (CommerceML)XML по утверждённому форматуНизкая

Выгрузка информационной базы через Администрирование → Обслуживание → Резервное копирование и восстановление или из Конфигуратора создаёт файл .dt. Это не XML и не формат обмена, а полная копия базы. А команда Конфигуратора Конфигурация → Выгрузить конфигурацию в файлы пишет в XML метаданные — справочники как объекты конфигурации, без самих данных.

Готовые выгрузки в XML без программиста

Часть задач закрывается тем, что уже есть в типовой конфигурации. Прежде чем искать обработки, проверьте эти три сценария.

Регламентированная отчётность

Декларации и расчёты в 1С сохраняются в XML по формату ФНС или СФР. Откройте отчёт в разделе Отчеты → Регламентированные отчеты, заполните, проверьте и найдите в командной панели формы команду выгрузки. Программа сохранит файл с именем по правилам контролирующего органа. Его можно отправить через сторонний сервис или загрузить в программу проверки.

Синхронизация данных между типовыми конфигурациями

В Бухгалтерии 3.0, УТ 11 и других типовых решениях обмен настраивается в разделе Администрирование → Синхронизация данных. Сначала включите флажок синхронизации, затем создайте настройку обмена с нужной программой.

В настройке можно выбрать канал «через каталог» — локальную или сетевую папку. Тогда программа складывает туда XML-сообщения в формате EnterpriseData, и вторая база забирает их из той же папки. Это штатный способ получить XML без единой строки кода.

Обмен с сайтом

Для интернет-магазинов в типовых конфигурациях есть обмен в формате CommerceML: каталог товаров, цены, остатки и заказы уходят XML-файлами. Сайт на любой CMS, которая понимает CommerceML, примет их без доработок.

Выгрузка данных из 1С в XML универсальной обработкой

Обработку «Выгрузка и загрузка данных XML» фирма 1С распространяет для подписчиков ИТС. Файл называется ВыгрузкаЗагрузкаДанныхXML83.epf (для 8.3). Она пишет объекты во внутреннем формате платформы со всеми реквизитами и табличными частями.

Порядок выгрузки

  1. Сделайте копию базы -источника, если будете экспериментировать с отбором.
  2. Откройте 1С:Предприятие под пользователем с полными правами.
  3. Выберите Файл → Открыть (меню в левом верхнем углу, значок с тремя полосками) и укажите файл .epf.
  4. Подтвердите предупреждение безопасности: платформа спросит, доверяете ли вы этой обработке.
  5. На закладке выгрузки отметьте в дереве нужные объекты: отдельные справочники, документы, регистры сведений.
  6. Задайте период, если выгружаете документы, и имя файла.
  7. Запустите выгрузку и дождитесь сообщения об окончании.

Загрузка идёт той же обработкой в базе-приёмнике, на закладке загрузки.

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

Что учесть при отборе объектов

  • 📎 Ссылочные данные тянутся автоматически. Выгрузили документ — в файл попадут контрагент, номенклатура, склад, на которые он ссылается.
  • 📦 Регистры накопления лучше не выгружать отдельно. Их движения восстановятся при перепроведении документов в приёмнике.
  • 🔢 Большие объёмы режьте по периодам: квартал или месяц на файл. Файл в несколько гигабайт трудно загрузить на машине с 4–8 ГБ памяти.

Выгрузка в XML по правилам Конвертации данных 2.0 и 3.0

Когда источник и приёмник — разные конфигурации, внутренний формат не подходит. Нужно описать, какой справочник источника во что превращается в приёмнике. Этим занимается конфигурация «Конвертация данных».

Конвертация данных 2.0

Схема работы такая:

  1. В Конвертации данных 2.0 загружаете структуры метаданных источника и приёмника.
  2. Настраиваете правила конвертации объектов и свойств: что во что переходит, как ищется существующий элемент.
  3. Сохраняете правила в XML-файл.
  4. В базе-источнике открываете обработку «Универсальный обмен данными в формате XML», указываете файл правил и выгружаете данные.
  5. В базе-приёмнике той же обработкой загружаете получившийся файл данных.

Плюс подхода — работает с любыми конфигурациями, в том числе самописными и устаревшими. Минус — правила надо поддерживать: после обновления конфигурации они могут перестать совпадать со структурой.

Конвертация данных 3.0 и формат EnterpriseData

Версия 3.0 работает иначе. Каждая конфигурация умеет выгружать данные в общий формат EnterpriseData и загружать из него. Правила хранятся не во внешнем файле, а в модуле менеджера обмена внутри конфигурации.

Для пользователя это значит: между типовыми решениями правила уже готовы, их поставляет фирма 1С вместе с релизом. Конвертация 3.0 нужна разработчику, когда требуется дописать обмен под доработанную конфигурацию.

Что сравниваемКД 2.0КД 3.0
Где хранятся правилаВнешний XML-файлМодуль менеджера обмена в конфигурации
Формат данных в файлеПроизвольный, по правиламEnterpriseData
Подходит для нетиповых базДаДа, но требует доработки конфигурации
ОбновлениеПравила правят отдельноПриходят с релизом типовой
Куда пойдёт XML-файл?

Как выгрузить данные из 1С в XML программно: XDTO и ЗаписьXML

Если получатель — не 1С, ему нужен XML в определённой структуре. Тут выручает встроенный язык. Код можно оформить внешней обработкой или расширением, чтобы не снимать конфигурацию с поддержки.

Сериализация объектов через СериализаторXDTO

Самый короткий путь — отдать объект платформе, она сама запишет все реквизиты и табличные части:

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Exchange\nomenklatura.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Данные");
Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema");
Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
    СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
КонецЦикла;

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

Объявления пространств имён в корневом элементе экономят размер: без них каждый объект повторяет их у себя. Прочитать такой файл обратно можно через ЧтениеXML и СериализаторXDTO.ПрочитатьXML(Чтение). Код выполняется на сервере, поэтому путь к файлу должен быть доступен серверу 1С, а не только вашему компьютеру.

Свой формат через ЗаписьXML

Внешней системе обычно не нужны служебные поля 1С. Тогда пишем только нужное, данные берём запросом:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    Контрагенты.Наименование КАК Наименование,
|    Контрагенты.ИНН КАК ИНН,
|    Контрагенты.КПП КАК КПП
|ИЗ
|    Справочник.Контрагенты КАК Контрагенты
|ГДЕ
|    НЕ Контрагенты.ПометкаУдаления
|    И НЕ Контрагенты.ЭтоГруппа";
Выборка = Запрос.Выполнить().Выбрать();

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Exchange\kontragenty.xml", "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Контрагенты");
Запись.ЗаписатьАтрибут("Дата", XMLСтрока(ТекущаяДатаСеанса()));

Пока Выборка.Следующий() Цикл
    Запись.ЗаписатьНачалоЭлемента("Контрагент");
    Запись.ЗаписатьАтрибут("ИНН", XMLСтрока(Выборка.ИНН));
    Запись.ЗаписатьАтрибут("КПП", XMLСтрока(Выборка.КПП));
    Запись.ЗаписатьТекст(Выборка.Наименование);
    Запись.ЗаписатьКонецЭлемента();
КонецЦикла;

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

Функция XMLСтрока() приводит даты, числа и булевы значения к формату XML: дата пишется как 2026-10-07T12:00:00, число — с точкой и без пробелов. Без неё дата уйдёт в виде «07.10.2026 12:00:00», и внешняя система её не разберёт. Символы <, > и & в наименованиях ЗаписьXML экранирует сама.

XDTO-пакет по схеме получателя

Если получатель дал XSD-схему, её загружают в конфигурацию как XDTO-пакет (в Конфигураторе: ветка Общие → XDTO-пакеты, команда импорта схемы). Потом объекты создаются через ФабрикаXDTO.Тип(...) и ФабрикаXDTO.Создать(...), а платформа проверяет соответствие схеме ещё при записи. Это надёжнее ручного ЗаписьXML: опечатка в имени элемента не дойдёт до получателя. Минус — нужна правка конфигурации или расширения.

Как настроить выгрузку в XML по расписанию

Ежедневную выгрузку прайса или остатков руками никто делать не будет. Есть три варианта автоматизации.

1. Расписание синхронизации. Для обмена через Администрирование → Синхронизация данных расписание задаётся прямо в настройке обмена. Программа сама будет класть XML в каталог.

2. Регламентное задание. Программист добавляет в расширение регламентное задание с процедурой выгрузки и расписанием. Включить, выключить и посмотреть историю запусков можно в Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. В клиент-серверной базе задания выполняет сервер 1С без участия пользователей. В файловой базе они работают только пока открыт хотя бы один сеанс.

3. Планировщик Windows и пакетный запуск. Подходит для файловых баз и для готовой внешней обработки. Планировщик запускает 1С с параметром /Execute:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Torgovlya" /N"Obmen" /P"password" /Execute"D:\Scripts\vygruzka.epf" /DisableStartupMessages

Обработка выполняет выгрузку в обработчике ПриОткрытии и в конце вызывает ЗавершитьРаботуСистемы(Ложь), иначе окно 1С останется висеть. Подставьте свой номер платформы в путь.

Пароль в bat-файле лежит открытым текстом. Создайте для выгрузки отдельного пользователя 1С с правами только на чтение нужных данных и запуск внешних обработок. Каждый запуск занимает лицензию на время работы.

Ошибки при выгрузке в XML и как их обойти

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

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

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

Можно ли выгрузить в XML всю базу целиком?
Технически да, отметив все объекты в универсальной обработке. Но для переноса базы целиком правильнее выгрузка в .dt: она быстрее и сохраняет пользователей, настройки и историю.
Чем открыть XML-файл из 1С для просмотра?
Любым браузером или редактором кода. Для больших файлов, от сотен мегабайт, нужен редактор, который читает файл частями, — обычный «Блокнот» на них зависает.
Подойдёт ли файл из 1С 8.2 для загрузки в 8.3?
Если конфигурация та же и обновлена до одного релиза — обычно да. Если 8.2 стоит на старой редакции конфигурации, нужен переход по правилам или обновление базы, а не перенос файлом.
Можно ли выгрузить в XML табличную часть отчёта?
Штатного сохранения табличного документа в XML нет. Отчёт сохраняют в Excel или другой поддерживаемый формат, а если нужен именно XML — данные берут запросом и пишут через ЗаписьXML.
Нужен ли XDTO, если хватает ЗаписьXML?
Нет. ЗаписьXML проще и полностью управляет структурой. XDTO полезен, когда есть XSD-схема получателя или нужно сериализовать объекты 1С целиком.