Выгрузка данных из 1С в XML: от готовых обработок до своего кода и схем XSD
Содержание
Выгрузить файл XML из 1С можно четырьмя путями: командой «Выгрузить» в форме регламентированного отчёта, через Администрирование → Синхронизация данных, внешней обработкой «Выгрузка и загрузка данных XML» или своим кодом на объекте ЗаписьXML. Какой выбрать — зависит от того, кто будет читать файл: налоговая, другая база 1С или сторонняя программа.
Чаще всего проблема не в самой выгрузке, а в том, что получатель файл не принимает: не та кодировка, запятая вместо точки в суммах, нет обязательного элемента по схеме. Каждый из этих отказов снимается одной-двумя строками кода или правильной настройкой.
С чего начать: кто получатель и какой нужен формат
XML — это контейнер, а не формат. Один и тот же документ «Реализация» можно записать десятком структур, и принимающая сторона поймёт только свою. Поэтому до первой строчки кода или первого клика соберите требования.
📌 Что выяснить у получателя:
- 📄 Схема XSD или хотя бы образец правильного файла. Без схемы вы гадаете.
- 🔤 Кодировка. Стандарт — UTF-8, но часть старых систем ждёт
windows-1251. - 🏷 Пространство имён (namespace) корневого элемента. Ошибка в одной букве URI — и валидатор отвергнет весь файл.
- 🔢 Формат чисел и дат. XML-схемы ждут
1234.50и2026-10-07, а не1 234,50и07.10.2026. - 📦 Объём и частота. Разовая выгрузка за месяц и ежечасный обмен решаются по-разному.
- 📁 Имя файла. Для отчётности в ФНС имя строится по шаблону, и программа формирует его сама.
| Получатель | Чем выгружать | Кто задаёт формат |
|---|---|---|
| ФНС, СФР, Росстат | Регламентированный отчёт | Утверждённая форма, 1С обновляет её с релизами |
| Другая база 1С (БП, УТ, ЗУП) | Синхронизация данных, формат EnterpriseData | Разработчики типовых конфигураций |
| База с той же конфигурацией | Обработка «Выгрузка и загрузка данных XML» | Метаданные конфигурации |
| Сайт, CRM, банк, маркетплейс | Свой код или правила «Конвертации данных» | Сторонняя система |
| Разработчик, Git | Выгрузка конфигурации в файлы | Платформа |
Штатные способы выгрузить XML в типовых конфигурациях
Регламентированная отчётность
В БП 3.0 и ЗУП 3.1 отчёты открываются из Отчеты → Регламентированные отчеты. Порядок:
- Откройте нужный отчёт и заполните его.
- Нажмите «Проверить» и исправьте ошибки контроля.
- В командной панели отчёта нажмите «Выгрузить».
- Укажите каталог. Программа сама назовёт файл по шаблону получателя.
Если подключён сервис отправки отчётности, выгружать файл вручную не нужно — отчёт уходит из той же формы. Ручная выгрузка нужна, когда сдаёте через личный кабинет или другого оператора.
Не переименовывайте выгруженный файл отчёта. Имя содержит коды инспекции, ИНН и идентификатор, и приёмный комплекс сверяет его с содержимым.
Синхронизация данных между базами 1С
Обмен между типовыми конфигурациями идёт через Администрирование → Синхронизация данных. Включите флажок синхронизации, задайте префикс информационной базы и создайте настройку обмена с нужной программой.
Транспорт выбирается при настройке: локальный или сетевой каталог, FTP, электронная почта, интернет. При обмене через каталог программа кладёт туда XML-сообщение — его и можно забрать как файл. Формат — EnterpriseData, его понимают все актуальные типовые конфигурации.
Обработка «Выгрузка и загрузка данных XML»
Это внешняя обработка (файл вида ВыгрузкаЗагрузкаДанныхXML83.epf), её распространяют вместе с материалами для разработчиков. Она выгружает выбранные объекты метаданных в XML «как есть» и умеет загружать такой файл обратно в базу с той же конфигурацией.
- Откройте обработку через главное меню:
Файл → Открыть. - На вкладке выгрузки отметьте справочники, документы, регистры.
- Задайте период, если выгружаете документы.
- Укажите имя файла и нажмите «Выгрузить данные».
В БСП-конфигурациях открыть внешнюю обработку может только пользователь с правом на это; при первом открытии программа покажет предупреждение о безопасности. Обработка не подходит для обмена между разными конфигурациями: структура файла повторяет метаданные источника.
Загрузку такого файла делайте только в копию базы после резервного копирования — обработка записывает объекты поверх существующих с теми же ссылками.
Выгрузка конфигурации в файлы
Для разработчика XML — это ещё и формат хранения самой конфигурации. В конфигураторе: Конфигурация → Выгрузить конфигурацию в файлы. Получится каталог с XML-описаниями метаданных и модулями, удобный для Git.
То же из командной строки:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" DESIGNER /F "D:\Bases\Buh" /N "Администратор" /P "" /DumpConfigToFiles "D:\Export\Config" /Out "D:\Export\log.txt"
Номер платформы в пути подставьте свой.
Свой код: запись XML средствами встроенного языка
Когда получатель сторонний, а правил обмена нет, пишут код. Для потоковой записи в платформе есть объект ЗаписьXML. Пример ниже выгружает контрагентов в файл и решает задачу целиком:
&НаСервереБезКонтекста
Процедура ВыгрузитьКонтрагентовНаСервере(ИмяФайла)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.Наименование КАК Наименование,
| Контрагенты.ИНН КАК ИНН,
| Контрагенты.КПП КАК КПП
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| НЕ Контрагенты.ЭтоГруппа
| И НЕ Контрагенты.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Контрагенты");
Запись.ЗаписатьАтрибут("Дата", XMLСтрока(ТекущаяДатаСеанса()));
Пока Выборка.Следующий() Цикл
Запись.ЗаписатьНачалоЭлемента("Контрагент");
Запись.ЗаписатьАтрибут("ИНН", Выборка.ИНН);
Запись.ЗаписатьАтрибут("КПП", Выборка.КПП);
Запись.ЗаписатьТекст(Выборка.Наименование);
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
КонецПроцедуры
Три правила, без которых файл будет «почти правильным»:
- 🔢 Числа, даты и булево — только через
XMLСтрока().Строка(1234.5)даст1 234,5с неразрывным пробелом, аXMLСтрока(1234.5)—1234.5. Дата превратится в2026-10-07T00:00:00, Истина — вtrue. - 🔒 Всегда вызывайте
Закрыть(). Без этого хвост файла останется в буфере, и файл окажется обрезанным. Оборачивайте запись вПопытка … Исключение, закрывая объект и при ошибке. - 🖥 Пишите на сервере. Выборка и запись в одном серверном вызове — это один проход без передачи данных клиенту. Готовый файл потом отдают пользователю через временное хранилище.
Сериализация объектов целиком
Если получатель — тоже 1С, а нужно передать объект со всеми реквизитами, удобнее не перечислять поля вручную. Глобальный метод ЗаписатьXML(Запись, Объект) или СериализаторXDTO.ЗаписатьXML() записывают объект в стандартном представлении платформы. На другой стороне его читают методом ПрочитатьXML(). Так устроена и обработка из предыдущего раздела.
Работа со схемой XSD и проверка файла
Когда у получателя есть XSD, ручная сборка элементов через ЗаписьXML становится рискованной: легко перепутать порядок элементов или пропустить обязательный. Правильный путь — XDTO.
Импорт схемы в конфигурацию
В конфигураторе откройте ветку Общие → XDTO-пакеты и выберите команду импорта XML-схемы. Платформа создаст пакет с типами из XSD. Если менять конфигурацию нельзя, сделайте это в расширении.
Дальше объект собирают по типам схемы:
URI = "http://example.ru/exchange/1.0"; // пространство имён из схемы
ТипДокумента = ФабрикаXDTO.Тип(URI, "Document");
Документ = ФабрикаXDTO.Создать(ТипДокумента);
Документ.Number = "А-125";
Документ.Date = ТекущаяДатаСеанса();
Документ.Проверить(); // исключение, если объект не соответствует схеме
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
ФабрикаXDTO.ЗаписатьXML(Запись, Документ);
Запись.Закрыть();
URI, Document, Number и Date — условные имена; берите их из своей схемы. Метод Проверить() ловит пропущенные обязательные элементы и нарушения типов до того, как файл уйдёт получателю.
Схема без изменения конфигурации
XSD можно загрузить и во время работы. Читают файл схемы через ЧтениеXML и ПостроительDOM, затем ПостроительСхемXML.СоздатьСхемуXML() даёт схему, её добавляют в НаборСхемXML и создают Новый ФабрикаXDTO(НаборСхем). Это удобно во внешней обработке, которую нельзя встраивать в типовую.
Внешняя проверка
Готовый файл полезно прогнать независимым валидатором. Например, утилитой xmllint:
xmllint --noout --schema schema.xsd export.xml
Ответ export.xml validates значит, что файл соответствует схеме. Иначе утилита укажет строку и элемент с ошибкой.
Большие объёмы: как не упереться в память и время
На тысячах записей любой способ работает. На сотнях тысяч начинаются зависания и ошибки нехватки памяти. Вот что помогает:
- 🌊 Потоковая запись.
ЗаписьXMLпишет в файл по мере обхода.ДокументDOMстроит всё дерево в памяти — для больших файлов он не годится. - 📋 Выборка вместо таблицы.
Запрос.Выполнить().Выбрать()читает строки порциями, аВыгрузить()тянет весь результат в память сразу. - 🎯 Только нужные поля. Обращение через точку к реквизитам ссылки внутри цикла порождает отдельный запрос на каждую строку. Получайте всё одним запросом с соединениями.
- ✂️ Деление на файлы. Многие приёмные системы ограничивают размер файла. Пишите по периодам или по N записей и открывайте новый файл.
- 📏 Без отступов. Форматирование с переносами раздувает файл. Отключите его через
ПараметрыЗаписиXML, передав третьим параметромЛожь. - ⏳ Фоновое задание. Долгую выгрузку запускайте через
ФоновыеЗадания.Выполнить()— пользователь продолжит работать, а длительный серверный вызов не оборвётся по таймауту.
| Объём | Подход | На что смотреть |
|---|---|---|
| До 10 тыс. объектов | Любой способ | Корректность формата |
| 10–500 тыс. | ЗаписьXML + выборка, на сервере | Запросы внутри цикла |
| Больше 500 тыс. | Фоновое задание, деление на файлы | Память рабочего процесса, лимиты получателя |
Границы в таблице условные: многое зависит от числа реквизитов и табличных частей.
Автоматическая выгрузка по расписанию
Ежедневную выгрузку цен на сайт или остатков в CRM никто не хочет запускать руками. Вариантов три.
Синхронизация по расписанию
Если обмен идёт через Синхронизация данных, в настройках сценария можно включить автоматический запуск по расписанию. Это самый простой путь — ничего не программируете.
Регламентное задание
Для своей выгрузки создают объект метаданных «Регламентное задание» (в конфигурации или в расширении), привязывают к нему процедуру общего модуля и задают расписание.
В клиент-серверном варианте задания выполняет сервер 1С. В файловом варианте они запускаются из клиентских сеансов, поэтому без открытой базы выгрузка не пройдёт. Для регулярных обменов лучше клиент-сервер.
Планировщик Windows и командная строка
Если менять конфигурацию нельзя, запускают 1С с внешней обработкой. Параметр /Execute открывает обработку сразу после старта, а /C передаёт ей строку параметров:
"C:\Program Files\1cv8\8.3.24.1586\bin\1cv8.exe" ENTERPRISE /F "D:\Bases\Buh" /N "Обмен" /P "пароль" /Execute "D:\Scripts\ВыгрузкаЦен.epf" /C "auto" /DisableStartupMessages
Обработка в модуле формы проверяет параметр запуска, выполняет выгрузку и завершает работу через ЗавершитьРаботуСистемы(Ложь). Добавьте задачу в планировщик Windows на нужное время. Заведите для обмена отдельного пользователя с минимальными правами и не держите пароль администратора в bat-файле.
Почему получатель не принимает файл
Файл выгрузился, но на той стороне ошибка. Типичные причины и что проверить:
Частые вопросы
Можно ли выгрузить в XML табличный документ или отчёт?
Чем XML отличается от выгрузки базы в .dt?
Как открыть выгруженный XML для просмотра?
Можно ли выгрузить XML в тонком клиенте через веб?
НачатьПолучениеФайлаССервера().