XML-файл из базы 1С: обработки, обмен EnterpriseData, командная строка и код
Содержание
Чтобы выгрузить данные из 1С 8.3 в XML без программирования, откройте обработку «Выгрузка и загрузка данных XML» (ВыгрузкаЗагрузкаДанныхXML83.epf) через Главное меню → Файл → Открыть, отметьте нужные справочники и документы, укажите период и имя файла и нажмите «Выгрузить данные». Если XML нужен другой программе, а не такой же базе 1С, подойдут обмен в формате EnterpriseData, правила Конвертации данных или свой код на объекте ЗаписьXML.
Выбор зависит от того, кто будет читать файл. Копия базы с той же конфигурацией, другая конфигурация 1С, сайт, банк или складская система ждут разный XML. Ниже — каждый способ с настройкой и подводными камнями.
Какой способ выгрузки XML подходит под вашу задачу
Сначала ответьте себе на два вопроса: куда пойдёт файл и будет ли выгрузка регулярной.
| Способ | Когда брать | Что получится | Ограничения |
|---|---|---|---|
| 📦 «Выгрузка и загрузка данных XML» | Перенос объектов между базами с одинаковой конфигурацией | XML во внутреннем формате платформы | Загрузить можно только в такую же конфигурацию |
| 🔄 EnterpriseData через синхронизацию | Обмен между типовыми конфигурациями (БП, УТ, УНФ, КА, ERP) | Сообщение обмена по формату EnterpriseData | Нужна поддержка формата в обеих программах |
| 🧩 Правила Конвертации данных | Нетиповые базы, обмен со старыми конфигурациями | XML по правилам из Конвертации данных 2.x | Правила надо разработать или найти готовые |
| ⌨️ Командная строка | Ночная выгрузка по расписанию, выгрузка конфигурации в файлы | XML данных или исходники метаданных | Нужна своя обработка для данных |
💻 ЗаписьXML и XDTO | Сайт, банк, маркетплейс, любая внешняя система со своей схемой | XML ровно по требуемой структуре | Нужен программист |
Перед первой выгрузкой проверьте права. Чтобы открыть внешнюю обработку из меню, у пользователя должно быть право «Интерактивное открытие внешних обработок». Без него пункт «Открыть» не сработает даже у бухгалтера с полными правами на учёт.
Выгрузка XML штатной обработкой «Выгрузка и загрузка данных XML»
Это самый быстрый способ вытащить XML из 1С, когда принимающая база — копия той же конфигурации. Например, нужно перенести 300 новых элементов номенклатуры из тестовой базы в рабочую или передать документы из филиала.
Обработка не встроена в типовые конфигурации. Её берут из комплекта инструментов разработчика на диске ИТС: для 8.3 это файл ВыгрузкаЗагрузкаДанныхXML83.epf.
Порядок выгрузки
- Сохраните файл обработки на диск, например в
D:\Tools\. - В 1С откройте
Главное меню → Файл → Открытьи выберите.epf. - Если появится предупреждение защиты от опасных действий, подтвердите открытие, если доверяете файлу.
- На вкладке выгрузки укажите имя файла:
D:\Export\nomenklatura.xml. - Задайте период — он нужен для документов. Справочники выгружаются целиком.
- В дереве метаданных отметьте флажками нужные объекты.
- Нажмите «Выгрузить данные» и дождитесь сообщения о завершении.
Что важно знать до загрузки
- 🔗 Обработка выгружает и объекты, на которые ссылаются выбранные данные. Выгрузили документы реализации — в файл попадут и контрагенты, и номенклатура из них.
- 🧾 В режиме загрузки объекты записываются без проведения и без проверки заполнения. Документы потом нужно перепровести.
- 🆔 Объекты сопоставляются по внутреннему идентификатору. Если элемент с таким же GUID уже есть в приёмнике, он будет перезаписан.
Перед загрузкой XML в рабочую базу сделайте её резервную копию. Перезапись по GUID молча заменит реквизиты существующих элементов, а отменить это нечем.
Как выгрузить данные из 1С в XML в формате EnterpriseData
EnterpriseData — универсальный формат обмена, который понимают современные типовые конфигурации на БСП: Бухгалтерия предприятия 3.0, Управление торговлей 11, УНФ, Комплексная автоматизация, ERP. Если нужен обмен между ними, свою схему изобретать не надо.
Файл получается при синхронизации через каталог:
- Откройте
Администрирование → Синхронизация данных. - Включите флажок «Синхронизация данных», если он снят.
- Создайте новую синхронизацию и выберите программу-получателя из списка.
- Тип подключения — через локальный или сетевой каталог. Укажите папку, например
\\fileserver\exchange\buh-ut\. - Настройте правила отправки: с какой даты и какие разделы учёта передавать.
- Запустите синхронизацию вручную или задайте расписание.
В папке появится сообщение обмена. Если в настройках подключения включено сжатие, вместо .xml вы увидите .zip с XML внутри.
Сопоставление полей
При первом обмене программа попросит сопоставить уже существующие справочники: контрагентов, номенклатуру, склады. Это делают один раз. Дальше объекты связываются автоматически.
Не сопоставляйте вручную сотни позиций по одной. Сначала проверьте, что совпадают артикулы или ИНН — тогда программа сопоставит большую часть сама.
Выгрузка XML по правилам Конвертации данных
Когда базы разные и EnterpriseData не поддерживается — нетиповая доработанная конфигурация, старая база, отраслевое решение — помогает связка из двух частей:
- 📐 правила обмена — XML-файл, который программист собирает в конфигурации «Конвертация данных 2.x»;
- ⚙️ обработка «Универсальный обмен данными в формате XML» —
V8Exchan83.epf, тот же комплект инструментов разработчика.
Как выполняется выгрузка
- Откройте
V8Exchan83.epfчерезФайл → Открытьв базе-источнике. - На вкладке выгрузки загрузите файл правил обмена.
- Обработка покажет список правил выгрузки — отметьте нужные.
- Задайте период и имя файла данных.
- Нажмите «Выгрузить данные».
В приёмнике открываете ту же обработку, переходите на вкладку загрузки, указываете файл данных и загружаете. Правила уже сохранены внутри файла данных, отдельно их подставлять не нужно.
Готовые правила для популярных пар конфигураций иногда входят в поставку типовых решений. Если пара нетиповая, правила придётся заказывать у программиста.
Выгрузка XML из 1С через командную строку
Из командной строки удобно запускать регулярные выгрузки по расписанию Windows. Есть два разных сценария, их часто путают.
Выгрузка конфигурации в XML-файлы
Это не данные, а исходники: справочники, документы, формы, модули в виде дерева XML-файлов. Нужно для Git, сравнения версий, EDT. В Конфигураторе это команда Конфигурация → Выгрузить конфигурацию в файлы. Из командной строки:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "пароль" /DumpConfigToFiles "D:\Export\Config" /Out "D:\Export\dump.log"
Для серверной базы вместо /F укажите /S "srv1c\buh".
Выгрузка данных по расписанию
Платформа не умеет сама выгружать данные базы в XML одной командой. Делают так: пишут внешнюю обработку, которая при открытии выполняет выгрузку и закрывает программу, и запускают её параметром /Execute:
"C:\Program Files\1cv8\8.3.xx.xxxx\bin\1cv8.exe" ENTERPRISE /F "D:\Bases\Buh" /N "Обмен" /P "пароль" /Execute "D:\Tools\export.epf" /C "D:\Export\nomenklatura.xml" /DisableStartupMessages
Строку после /C обработка читает через свойство глобального контекста ПараметрЗапуска. В конце процедуры выгрузки вызывают ЗавершитьРаботуСистемы(Ложь), чтобы окно не висело.
Заведите для выгрузки отдельного пользователя с минимальными правами и не храните пароль администратора в bat-файле. Файл с паролем должен лежать в папке, доступ к которой есть только у службы планировщика.
Как сформировать XML кодом через объект ЗаписьXML
Когда XML нужен сайту, банку или складской системе, структура задаётся получателем. Штатные обработки тут бесполезны: нужен свой код. Базовый инструмент — объект ЗаписьXML. Он пишет файл последовательно, поэтому справляется и с десятками тысяч элементов без нехватки памяти.
Пример выгружает элементы справочника «Номенклатура» с кодом и наименованием:
&НаСервере
Процедура ВыгрузитьНоменклатуруНаСервере(ИмяФайла)
Параметры = Новый ПараметрыЗаписиXML("UTF-8", "1.0", Истина);
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, Параметры);
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Номенклатура");
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
Запись.ЗаписатьНачалоЭлемента("Товар");
Запись.ЗаписатьАтрибут("Код", СокрЛП(Выборка.Код));
Запись.ЗаписатьНачалоЭлемента("Наименование");
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента(); // Наименование
Запись.ЗаписатьКонецЭлемента(); // Товар
КонецЦикла;
Запись.ЗаписатьКонецЭлемента(); // Номенклатура
Запись.Закрыть();
КонецПроцедуры
Результат выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<Номенклатура>
<Товар Код="00-00000123">
<Наименование>Бумага офисная А4</Наименование>
</Товар>
</Номенклатура>
Три приёма, без которых код ломается на реальных данных
- 🖥️ Где лежит файл. Процедура с
&НаСерверепишет на диск сервера 1С, а не на компьютер пользователя. В клиент-серверной базе пишите во временный файл (ПолучитьИмяВременногоФайла("xml")), помещайте его во временное хранилище и передавайте на клиент. - 🔢 Числа и даты. Не пишите число как есть:
ЗаписатьТекст(Формат(Сумма, "ЧГ=0; ЧРД=."))даст1500.50вместо1 500,50. Дату — черезXMLСтрока(Дата), получится2026-10-07T00:00:00. - 🔤 Имена элементов. Получатель почти всегда ждёт латиницу:
<Item>,<Name>. Кириллические имена допустимы в XML, но многие внешние парсеры на них спотыкаются.
Для выгрузки в строку, а не в файл, вместо ОткрытьФайл вызовите УстановитьСтроку(), а результат заберите из Закрыть() — метод вернёт готовый текст.
XML по чужой схеме: XDTO-пакеты и сериализатор
Если получатель прислал XSD-схему, вручную собирать каждый элемент через ЗаписьXML долго и рискованно: одна опечатка в имени тега — и файл не пройдёт проверку. Удобнее загрузить схему в конфигурацию как XDTO-пакет.
Как подключить схему
- В Конфигураторе откройте ветку
Общие → XDTO-пакеты. - Через контекстное меню выберите импорт XML-схемы и укажите файл
.xsd. - Платформа создаст пакет с пространством имён из схемы. Типовую конфигурацию для этого лучше дорабатывать через расширение.
Заполнение и запись
URI = "http://example.ru/orders"; // targetNamespace из схемы
ТипЗаказ = ФабрикаXDTO.Тип(URI, "Order");
Заказ = ФабрикаXDTO.Создать(ТипЗаказ);
Заказ.Number = "000123";
Заказ.Date = ТекущаяДатаСеанса();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
ФабрикаXDTO.ЗаписатьXML(Запись, Заказ);
Запись.Закрыть();
Перед записью можно вызвать Заказ.Проверить(): метод сверит объект со схемой и выбросит исключение, если обязательное поле пустое или значение не подходит по типу. Так ошибку видит программист, а не служба поддержки получателя.
Сериализатор для обмена между базами 1С
Если нужно просто перенести объект в другую базу 1С, схема не нужна. СериализаторXDTO.ЗаписатьXML(Запись, СправочникОбъект) запишет объект целиком во внутреннем формате платформы. Так же устроена штатная обработка из второго раздела.
| Инструмент | Структура XML | Кто задаёт схему |
|---|---|---|
ЗаписьXML | Любая, собираете вручную | Программист в коде |
ФабрикаXDTO + пакет | Строго по XSD | Получатель данных |
СериализаторXDTO | Внутренний формат 1С | Платформа |
Ошибки при выгрузке XML и как их снять
Если файл всё равно не принимают, откройте его в любом браузере. Браузер сразу покажет строку с нарушенной разметкой — незакрытый тег или лишний символ.
Частые вопросы
Как выгрузить декларацию или отчёт в ФНС в XML?
Можно ли выгрузить в XML всю базу целиком?
.dt через Конфигуратор. Обработка выгрузки XML рассчитана на выборочный перенос объектов и на больших объёмах работает медленно.