Данные из базы 1С в файл XML: обработки, обмен EnterpriseData, XDTO, OData и код
Содержание
Скачать 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С в режиме «Предприятие» под пользователем с полными правами.
- Откройте обработку:
Файл → Открыть, выберите.epf. Если меню «Файл» не видно, оно открывается кнопкой с тремя полосками в заголовке окна. - На вкладке «Выгрузка» укажите период — он нужен для документов и регистров.
- В дереве метаданных отметьте галочками нужные объекты: справочники, документы, регистры сведений.
- Укажите путь к файлу в поле имени файла выгрузки, например
D:\Обмен\nomenklatura.xml. - Нажмите «Выгрузить данные» и дождитесь сообщения о завершении.
Что важно знать о результате
- 🔗 Обработка тянет за собой всё, на что ссылаются выгружаемые объекты. Выгрузили документы — в файл попадут контрагенты, договоры, номенклатура из них.
- 🆔 Ссылки пишутся по GUID. При загрузке в другую базу объекты с теми же GUID перезапишутся, а не задвоятся.
- 🧱 Загрузка в базу с другой конфигурацией или другим релизом с изменённой структурой упадёт с ошибкой на первом же несовпадающем реквизите.
Загрузка этой обработкой пишет данные в обход бизнес-логики: документы не перепроводятся, проверки заполнения не выполняются. Загружайте только в копию базы и проверяйте результат до переноса в рабочую.
Выгрузка в универсальном формате EnterpriseData
EnterpriseData — общий формат обмена типовых конфигураций на БСП: Бухгалтерии 3.0, Управления торговлей 11, УНФ, Комплексной автоматизации, ERP. Файл обмена — это XML, обычно упакованный в zip-архив. Получатель не обязан иметь ту же конфигурацию: важно, чтобы обе программы поддерживали одну версию формата.
Как настроить выгрузку в файл
- Откройте
Администрирование → Синхронизация данныхи включите флажок «Синхронизация данных», если он снят. - Перейдите в «Настройки синхронизации данных» и создайте новую синхронизацию.
- Выберите вариант обмена с другой программой через универсальный формат.
- В способе подключения укажите обмен через локальный или сетевой каталог и задайте папку, например
\\fileserver\exchange\bp. - Пройдите настройку правил: какие разделы учёта отправлять, с какой даты, по каким организациям.
- Запустите синхронизацию. Сообщение обмена появится в указанной папке.
Тот же файл можно передать по почте или через 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 и не требует программирования. Порядок:
- При публикации отметьте флажок публикации стандартного интерфейса OData.
- Укажите, какие объекты доступны. В типовых конфигурациях на БСП это делается в
Администрирование → Синхронизация данных, по ссылке настройки стандартного интерфейса OData. В остальных — внешней обработкой настройки OData с диска ИТС. - Создайте пользователя для внешней системы с правами только на чтение нужных объектов.
Запрос к справочнику выглядит так:
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 и что с ними делать
Частые вопросы
Можно ли открыть выгруженный XML в Excel?
Чем XML отличается от выгрузки базы в .dt?
.dt — полная копия базы во внутреннем формате платформы, его загружают только в 1С целиком. XML содержит выбранную часть данных и читается любой программой.