Данные из базы 1С в файл XML: обработки, обмен EnterpriseData, XDTO, OData и код

· 10 мин

Содержание

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

Если данные нужны другой программе, выгрузку делают иначе. Для обмена между типовыми конфигурациями — через универсальный формат EnterpriseData. Для сайта или внешней системы — через OData или HTTP-сервис. Для произвольной структуры файла — запросом и объектом ЗаписьXML. Выбор зависит от того, кто будет читать файл.

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

СпособКогда подходитЧто получитсяОграничения
📦 Обработка «Выгрузка и загрузка данных XML»Перенос части данных между базами одной конфигурацииXML со всеми реквизитами и ссылками (GUID)Нужна одинаковая структура метаданных
🔄 EnterpriseDataОбмен между разными типовыми конфигурациямиСообщение обмена в универсальном форматеТолько объекты, описанные в формате
🧩 Универсальный обмен по правилам КДНетиповая или старая база, свои правила переносаXML по правилам «Конвертации данных»Нужно написать правила
🛠 XDTO и сериализаторРазработчику: выгрузка из кода, по своей схемеXML, совместимый с платформенной загрузкой или с XSDНужен доступ к Конфигуратору
🌐 OData и HTTP-сервисыВнешняя система забирает данные самаXML-ответ по HTTP-запросуНужна публикация на веб-сервере
✍️ Запрос + ЗаписьXMLФайл строго заданного вида для внешнего получателяЛюбая структура теговПишется вручную

Регламентированный отчёт в ФНС или СФР — тоже XML, но для него ничего из таблицы не нужно. Откройте отчёт в списке регламентированных отчётов и нажмите в его форме кнопку «Выгрузить»: программа проверит файл по формату и сохранит его на диск.

Выгрузка XML обработкой «Выгрузка и загрузка данных XML»

Это универсальная внешняя обработка от фирмы 1С. Она лежит на диске ИТС и в комплекте поставки ряда конфигураций, файл называется вида ВыгрузкаЗагрузкаДанныхXML83.epf (для старых платформ — ...82.epf). В конфигурацию её встраивать не нужно.

Пошагово

  1. Сделайте резервную копию, если потом собираетесь загружать файл в рабочую базу. Для самой выгрузки копия не нужна: обработка только читает данные.
  2. Запустите 1С в режиме «Предприятие» под пользователем с полными правами.
  3. Откройте обработку: Файл → Открыть, выберите .epf. Если меню «Файл» не видно, оно открывается кнопкой с тремя полосками в заголовке окна.
  4. На вкладке «Выгрузка» укажите период — он нужен для документов и регистров.
  5. В дереве метаданных отметьте галочками нужные объекты: справочники, документы, регистры сведений.
  6. Укажите путь к файлу в поле имени файла выгрузки, например D:\Обмен\nomenklatura.xml.
  7. Нажмите «Выгрузить данные» и дождитесь сообщения о завершении.

Что важно знать о результате

  • 🔗 Обработка тянет за собой всё, на что ссылаются выгружаемые объекты. Выгрузили документы — в файл попадут контрагенты, договоры, номенклатура из них.
  • 🆔 Ссылки пишутся по GUID. При загрузке в другую базу объекты с теми же GUID перезапишутся, а не задвоятся.
  • 🧱 Загрузка в базу с другой конфигурацией или другим релизом с изменённой структурой упадёт с ошибкой на первом же несовпадающем реквизите.

Загрузка этой обработкой пишет данные в обход бизнес-логики: документы не перепроводятся, проверки заполнения не выполняются. Загружайте только в копию базы и проверяйте результат до переноса в рабочую.

Выгрузка в универсальном формате EnterpriseData

EnterpriseData — общий формат обмена типовых конфигураций на БСП: Бухгалтерии 3.0, Управления торговлей 11, УНФ, Комплексной автоматизации, ERP. Файл обмена — это XML, обычно упакованный в zip-архив. Получатель не обязан иметь ту же конфигурацию: важно, чтобы обе программы поддерживали одну версию формата.

Как настроить выгрузку в файл

  1. Откройте Администрирование → Синхронизация данных и включите флажок «Синхронизация данных», если он снят.
  2. Перейдите в «Настройки синхронизации данных» и создайте новую синхронизацию.
  3. Выберите вариант обмена с другой программой через универсальный формат.
  4. В способе подключения укажите обмен через локальный или сетевой каталог и задайте папку, например \\fileserver\exchange\bp.
  5. Пройдите настройку правил: какие разделы учёта отправлять, с какой даты, по каким организациям.
  6. Запустите синхронизацию. Сообщение обмена появится в указанной папке.

Тот же файл можно передать по почте или через FTP — это выбирается на шаге способа подключения.

Нужен разовый файл, а не постоянный обмен? Создайте синхронизацию, выполните одну выгрузку и отключите её. Настройки при этом сохранятся, а лишних сообщений в папке не появится.

Обмен по правилам «Конвертации данных»

Если база нетиповая или формат EnterpriseData не подходит, применяют связку «Конвертация данных » 2.x и обработку «Универсальный обмен данными в формате XML» (УниверсальныйОбменДаннымиXML.epf). В конфигурации «Конвертация данных» пишут правила: что выгружать и во что превращать. Обработка в базе-источнике читает файл правил и формирует по нему XML с данными.

Так переносят остатки и справочники из самописных баз и старых конфигураций, где синхронизации на БСП нет.

Выгрузка через Конфигуратор: XDTO и сериализатор

В Конфигураторе нет кнопки «выгрузить данные в XML». Пункт Администрирование → Выгрузить информационную базу создаёт файл .dt — это внутренний формат, не XML. А Конфигурация → Выгрузить конфигурацию в файлы даёт XML-описание метаданных: форм, модулей, реквизитов, но не самих данных.

Данные в XML из Конфигуратора выгружают кодом. Есть два пути.

Сериализатор XDTO: XML «как у платформы»

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

&НаСервере
Процедура ВыгрузитьНоменклатуруНаСервере(ИмяФайла)

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

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

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

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

Файл появится на компьютере, где работает сервер 1С. В файловой базе это ваш компьютер, в клиент-серверной — сервер приложений.

XDTO-пакет: XML по заданной схеме

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

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

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

Внешние обработки для выгрузки XML

Внешняя обработка — самый мягкий вариант для типовой базы. Конфигурацию не трогаете, обновления ставятся как обычно. Обработку пишут в Конфигураторе (Файл → Новый → Внешняя обработка) и открывают в пользовательском режиме через Файл → Открыть.

Чтобы обработка была доступна пользователям без прав на открытие внешних файлов, её регистрируют в справочнике дополнительных отчётов и обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Там же задают, в каких разделах она появится и кому доступна.

Что обычно выгружают внешними обработками:

  • 📑 прайс-лист для сайта или маркетплейса в формате, который требует площадка;
  • 🏦 реестры для банка или страховой;
  • 📊 данные для внешней аналитики, если её загрузчик понимает только XML;
  • 🗂 справочники для другой учётной системы.

Внешняя обработка выполняет любой код с правами текущего пользователя. Открывайте только файлы из проверенных источников: обработка из интернета может как выгрузить данные, так и изменить или удалить их.

Выгрузка XML через OData и HTTP-сервисы

Здесь не вы скачиваете файл, а внешняя программа сама запрашивает данные по адресу. Для обоих вариантов базу публикуют на веб-сервере (IIS или Apache): в Конфигураторе, запущенном от имени администратора Windows, пункт Администрирование → Публикация на веб-сервере.

Стандартный интерфейс OData

Он есть в любой конфигурации на 8.3 и не требует программирования. Порядок:

  1. При публикации отметьте флажок публикации стандартного интерфейса OData.
  2. Укажите, какие объекты доступны. В типовых конфигурациях на БСП это делается в Администрирование → Синхронизация данных, по ссылке настройки стандартного интерфейса OData. В остальных — внешней обработкой настройки OData с диска ИТС.
  3. Создайте пользователя для внешней системы с правами только на чтение нужных объектов.

Запрос к справочнику выглядит так:

http://server/base/odata/standard.odata/Catalog_Номенклатура?$top=100

По умолчанию ответ приходит в XML (формат Atom). Добавьте $format=json, если получателю удобнее JSON. Отбор задают параметром $filter, состав полей — $select.

Свой HTTP-сервис

Когда стандартный ответ OData слишком громоздкий, в Конфигураторе создают HTTP-сервис (Общие → HTTP-сервисы), шаблон URL и метод GET. Обработчик формирует XML и возвращает его:

Функция ОстаткиGET(Запрос)

	Запись = Новый ЗаписьXML;
	Запись.УстановитьСтроку("UTF-8");
	Запись.ЗаписатьОбъявлениеXML();
	Запись.ЗаписатьНачалоЭлемента("Остатки");
	// здесь заполняются элементы по данным запроса
	Запись.ЗаписатьКонецЭлемента();

	Ответ = Новый HTTPСервисОтвет(200);
	Ответ.Заголовки.Вставить("Content-Type", "application/xml; charset=utf-8");
	Ответ.УстановитьТелоИзСтроки(Запись.Закрыть(), КодировкаТекста.UTF8);
	Возврат Ответ;

КонецФункции

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

Ручная выгрузка: запрос и ЗаписьXML

Если получатель прислал образец файла с конкретными тегами, проще всего собрать XML вручную. Запрос отбирает данные, ЗаписьXML пишет элементы и атрибуты в нужном порядке. Пример — выгрузка контрагентов с ИНН:

&НаСервере
Процедура ВыгрузитьКонтрагентовНаСервере(ИмяФайла)

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

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

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

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

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

На выходе получится файл такого вида:

<?xml version="1.0" encoding="UTF-8"?>
<Контрагенты>
  <Контрагент ИНН="7701234567">ООО «Вектор»</Контрагент>
</Контрагенты>

Несколько приёмов, которые пригодятся:

  • 🔢 Числа и даты пишите через XMLСтрока(Значение): получится 1500.5 с точкой и дата вида 2026-10-07T00:00:00, как ждут внешние системы. Строка() даст пробел в разрядах и запятую.
  • 💻 Чтобы файл оказался на компьютере пользователя, а не на сервере, пишите XML в строку через УстановитьСтроку(), кладите результат во временное хранилище и сохраняйте на клиенте. В конфигурациях на БСП для этого есть ФайловаяСистемаКлиент.СохранитьФайл.
  • 🏷 Имена тегов на латинице надёжнее: не все внешние парсеры корректно работают с кириллицей в именах элементов.
Перед отправкой XML-файла получателю
Выполнено: 0 / 5

Ошибки при выгрузке XML и что с ними делать

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

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

Можно ли открыть выгруженный XML в Excel?
Да. Excel открывает XML как таблицу, если структура плоская: один повторяющийся элемент с атрибутами или вложенными полями. Файл обработки «Выгрузка и загрузка данных XML» сильно вложенный, в Excel он читается плохо.
Чем XML отличается от выгрузки базы в .dt?
Файл .dt — полная копия базы во внутреннем формате платформы, его загружают только в 1С целиком. XML содержит выбранную часть данных и читается любой программой.
Нужны ли права администратора для выгрузки в XML?
Для обработки «Выгрузка и загрузка данных XML» нужны права на чтение всех выгружаемых объектов и на открытие внешних обработок. На практике её запускают под пользователем с полными правами.
Можно ли выгружать XML по расписанию?
Да. Синхронизация через EnterpriseData запускается по расписанию в своих настройках. Собственный код выгрузки оформляют регламентным заданием в конфигурации или расширении.
Работает ли выгрузка XML в 1С:Фреш и других облаках?
Внешние обработки в облаке обычно запускаются только после проверки провайдером. Возможности синхронизации и OData в облачной базе уточняйте у провайдера: набор разрешённых способов у них разный.