Выгрузка в XML из 1С 8.3: от готовой кнопки до своего обмена по расписанию

· 10 мин

Содержание

Получить XML-файл из 1С 8.3 можно пятью путями, и выбор зависит от того, кто этот файл будет читать. Для налоговой — кнопка Выгрузить в форме регламентированного отчёта. Для переноса данных в базу с той же конфигурацией — обработка «Выгрузка и загрузка данных XML». Для другой программы 1С — синхронизация на правилах Конвертации данных. Для сайта или сторонней системы — своя обработка на объекте ЗаписьXML или HTTP-сервис.

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

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

Сначала определите получателя файла. От этого зависит и формат, и сложность настройки.

ЗадачаСпособНужен программистФормат XML
Сдать отчёт в ФНС, СФР, РосстатКнопка в форме регламентированного отчётаНетУтверждённый формат ведомства
Перенести справочники между одинаковыми базамиОбработка «Выгрузка и загрузка данных XML»НетВнутренний формат платформы
Обмен между разными конфигурациями 1ССинхронизация данных, КД 3.0 / КД 2.0Для КД 2.0 — даEnterpriseData или по правилам
Выгрузка на сайт, в маркетплейс, в чужую программуСвоя обработка на ЗаписьXMLДаЛюбая схема получателя
Сторонняя система сама забирает данныеHTTP-сервис, веб-сервис, ODataДаЛюбой / SOAP / Atom
Кому нужен XML-файл из вашей базы?

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

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

Это самый частый случай, когда бухгалтеру нужен XML. В БП 3.0 и ЗУП 3.1 отчёты лежат в разделе Отчеты → Регламентированные отчеты.

  1. Откройте нужный отчёт и заполните его.
  2. Запустите проверку контрольных соотношений и формата — команды проверки находятся в командной панели формы отчёта.
  3. Нажмите Выгрузить и укажите папку.
  4. Программа сохранит файл с именем по правилам ведомства, например NO_NDS_...xml для декларации по НДС.

Не переименовывайте выгруженный файл. Имя содержит коды налогового органа, ИНН и идентификатор файла. Сервис приёма сверяет его с содержимым и отклоняет файл с изменённым именем.

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

Универсальная обработка для переноса объектов между базами с одинаковой конфигурацией. Её распространяют как внешний файл .epf вместе с информационно-технологическим сопровождением.

  1. Откройте файл через главное меню: ≡ → Файл → Открыть.
  2. На вкладке выгрузки отметьте флажками нужные справочники, документы, регистры.
  3. Для документов задайте период — иначе обработка выгрузит всю историю.
  4. Укажите имя файла и нажмите Выгрузить данные.

Обработка тянет за собой объекты по ссылкам. Выгружаете 10 документов реализации — в файл попадут и контрагенты, и номенклатура, и договоры из этих документов.

Загружайте такой файл только в базу той же версии конфигурации. Если в приёмнике другой состав реквизитов, загрузка остановится с ошибкой или запишет данные не туда. Перед загрузкой сделайте резервную копию базы-приёмника.

Если открыть внешнюю обработку не получается, проверьте права. Пользователю нужно право на интерактивное открытие внешних отчётов и обработок, а в типовых конфигурациях ещё и подтверждение в окне предупреждения безопасности.

Выгрузка конфигурации в XML-файлы

Иногда «получить XML из 1С» значит выгрузить не данные, а саму конфигурацию — для системы контроля версий или для сравнения. В Конфигураторе это команда Конфигурация → Выгрузить конфигурацию в файлы. Платформа создаст каталог с сотнями XML-файлов: по одному на каждый объект метаданных, плюс модули в виде .bsl.

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

Обмен через XML по правилам Конвертации данных 2.0 и 3.0

Когда базы разные — скажем, УТ 11 и БП 3.0 — прямой перенос не работает . Нужен посредник, который знает, как реквизиты одной конфигурации ложатся на другую. Этот посредник и есть Конвертация данных (КД).

КД 3.0 и формат EnterpriseData

Современные типовые конфигурации обмениваются через формат EnterpriseData. Правила уже встроены в конфигурацию, настраивать их не нужно.

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

В папке обмена появится файл сообщения вида Message_<код отправителя>_<код получателя>.xml. Часто он упакован в zip — это включается в настройках транспорта. Внутри — документы и справочники в формате EnterpriseData.

Отдельно существует обмен в формате EnterpriseData без второй базы, просто в файл. Он нужен, когда приёмник — не 1С, но его разработчики поддержали этот формат.

КД 2.0 и универсальный обмен

Старый механизм, но живой: на нём работают тысячи доработанных обменов. Схема такая:

  • 🛠 в конфигурации «Конвертация данных 2.0» программист описывает правила: какой объект во что превращается;
  • 📄 правила сохраняются в отдельный XML-файл;
  • 📤 обработка «Универсальный обмен данными в формате XML» читает правила и выгружает данные в XML-файл обмена ;
  • 📥 та же обработка в базе-приёмнике загружает файл по тем же правилам.

В типовых конфигурациях на БСП эта обработка обычно есть в списке Все функции → Обработки. Если пункта «Все функции» нет в меню, включите его: ≡ → Сервис → Параметры → Отображать команду «Все функции».

Правила КД 2.0 привязаны к версиям обеих конфигураций. После крупного обновления приёмника или источника выгрузка часто ломается на исчезнувшем реквизите. Пересохраните правила, загрузив свежие метаданные в Конвертацию.

Свой XML-файл из 1С: обработка на встроенном языке

Когда получатель — интернет-магазин, логистическая система или самописная программа, готовые форматы не подойдут. Получатель пришлёт свою XSD-схему или пример файла, и под него пишется обработка.

Запись через ЗаписьXML

Объект ЗаписьXML пишет файл потоково, элемент за элементом. Так можно выгрузить хоть 500 тысяч строк — память не переполнится. Пример: выгрузка контрагентов БП 3.0 с ИНН.

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

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

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

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

        Запись.ЗаписатьНачалоЭлемента("Наименование");
        Запись.ЗаписатьТекст(Выборка.Наименование);
        Запись.ЗаписатьКонецЭлемента();

        Запись.ЗаписатьНачалоЭлемента("ИНН");
        Запись.ЗаписатьТекст(Выборка.ИНН);
        Запись.ЗаписатьКонецЭлемента();

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

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

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

Результат выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<Контрагенты Количество="2">
  <Контрагент Код="00-000001">
    <Наименование>ООО "Ромашка" &amp; партнёры</Наименование>
    <ИНН>7701234567</ИНН>
  </Контрагент>
  ...
</Контрагенты>

Амперсанд и кавычки ЗаписьXML экранирует сама. Склеивать XML строками через + не нужно: на первом же «ООО “А&Б”» такой файл станет невалидным.

Три приёма, которые экономят отладку

  • 🔢 Числа и даты — через XMLСтрока(). Обычное приведение к строке даст 1 250,50 с неразрывным пробелом и запятой. XMLСтрока(1250.5) вернёт 1250.5, а дату — в виде 2026-10-07T00:00:00, как требует XML Schema.
  • 🖥 Помните, где выполняется код. Процедура с директивой &НаСервереБезКонтекста пишет файл на диск сервера 1С, а не на компьютер пользователя. В клиент-серверной базе запишите файл во временный каталог сервера, поместите его во временное хранилище и отдайте пользователю через ПолучитьФайл или НачатьПолучениеФайлаССервера.
  • 📦 Полная копия объекта — через СериализаторXDTO. Если получатель — тоже 1С и ему нужен объект целиком, со всеми табличными частями, не перечисляйте реквизиты вручную.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ИмяФайла, "UTF-8");
Запись.ЗаписатьОбъявлениеXML();
СериализаторXDTO.ЗаписатьXML(Запись, ДокументСсылка.ПолучитьОбъект());
Запись.Закрыть();

Обратно такой файл читается методом СериализаторXDTO.ПрочитатьXML из объекта ЧтениеXML.

Где хранить обработку

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

XML по запросу: HTTP-сервисы, веб-сервисы и OData

Файл не всегда нужно класть в папку. Если сайт или CRM сами должны забирать данные в нужный момент, 1С отдаёт XML по запросу.

МеханизмКогда выбиратьЧто настраивать
HTTP-сервисСвоя REST-подобная выгрузка, любой формат ответаОбъект в конфигурации или расширении + публикация
Веб-сервис (SOAP)Получатель требует SOAP и WSDLОбъект, XDTO-пакет, публикация
Стандартный интерфейс ODataНужен доступ к таблицам без своего кодаПубликация + состав объектов OData

Модуль HTTP-сервиса, который отдаёт XML:

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

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

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

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

Чтобы сервис заработал, базу публикуют на веб-сервере (Apache или IIS) через Конфигуратор: Администрирование → Публикация на веб-сервере. Флажок публикации HTTP-сервисов должен быть включён. Адрес сервиса строится так: http://сервер/имя_публикации/hs/корневой_URL/шаблон.

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

Стандартный OData отдаёт данные в формате Atom (это XML) или JSON. Состав доступных объектов задаётся отдельно: по умолчанию через OData не видно ничего.

Кодировка, BOM и проверка XML по схеме

Большинство отказов при загрузке файла у получателя — не про данные, а про формат. Вот что проверять.

Кодировка

  • 📝 UTF-8 — стандарт для обменов, сайтов, маркетплейсов.
  • 🏛 windows-1251 — кодировка большинства форматов ФНС. Регламентированные отчёты выгружаются в ней автоматически. Если пишете такой файл сами, указывайте "windows-1251" в ОткрытьФайл.

Кодировка в объявлении <?xml ... encoding="..."?> должна совпадать с реальной. ЗаписьXML выставляет её сама. Проблемы начинаются, когда файл потом пересохраняют в Блокноте или правят скриптом.

BOM (сигнатура UTF-8)

Перед файлом в UTF-8 бывают три служебных байта EF BB BF. Часть парсеров на PHP и Java на них спотыкается: ошибка вида Content is not allowed in prolog. Откройте файл в редакторе, который показывает кодировку (Notepad++, VS Code), и сохраните как «UTF-8 без BOM», если получатель на этом падает. Затем решите вопрос в коде обработки.

Недопустимые символы

XML 1.0 запрещает управляющие символы с кодами ниже 32, кроме табуляции и переводов строки. Они попадают в наименования при копировании из Word или Excel. Получатель видит ошибку invalid character, а в 1С всё выглядит нормально. Найти такие строки помогает запрос с отбором по подозрительным элементам или очистка текста перед записью.

Валидация по XSD

Если получатель дал XSD-схему, проверьте файл до отправки. Внешними средствами это проще всего: xmllint из пакета libxml2 сравнивает файл со схемой одной командой.

xmllint --noout --schema schema.xsd vygruzka.xml

Типичные находки: пустой обязательный элемент, дата не в том формате, число с запятой вместо точки, неверный порядок элементов внутри sequence.

Автоматическая выгрузка XML по расписанию

Ручная выгрузка раз в день быстро надоедает. Есть три способа запускать её без человека.

Расписание синхронизации

Для обменов через Синхронизацию данных расписание задаётся прямо в её настройках. Откройте синхронизацию из Администрирование → Синхронизация данных и включите автоматический запуск — например, каждые 30 минут.

Регламентное задание

Программист добавляет в конфигурацию или расширение регламентное задание, которое вызывает процедуру выгрузки.

  • 🖧 Клиент-серверная база — задание выполняет кластер серверов 1С, пользователи не нужны.
  • 💾 Файловая база — задания запускаются, только пока в базе открыт хотя бы один сеанс. Ночью, когда все вышли, выгрузка не случится.

Планировщик Windows и параметр /Execute

Рабочий вариант для файловых баз. Создайте в Планировщике заданий задачу, которая запускает 1С с внешней обработкой:

"C:\Program Files\1cv8\8.3.24.1548\bin\1cv8.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Обмен" /P"пароль" /Execute"D:\Obmen\vygruzka.epf" /DisableStartupMessages

Номер версии в пути подставьте свой. Для клиент-серверной базы вместо /F используйте /S"сервер\имя_базы".

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

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

Частые вопросы о выгрузке XML из 1С

Можно ли сохранить отчёт или табличный документ 1С в XML?
Напрямую — нет: команда сохранения табличного документа предлагает форматы для людей (xlsx, pdf, mxl и другие). Если нужен именно XML с данными отчёта, пишут обработку, которая берёт результат запроса и выводит его через ЗаписьXML.
Чем XML из Синхронизации отличается от XML из обработки «Выгрузка и загрузка данных XML»?
Синхронизация пишет данные в формате EnterpriseData, понятном разным конфигурациям. Обработка выгрузки пишет внутренний формат платформы, который загрузится только в базу с той же конфигурацией.
Почему файл XML из 1С открывается в браузере с кракозябрами?
Кодировка в объявлении не совпадает с реальной. Обычно файл записан в windows-1251, а объявлен как UTF-8, или его пересохранили в другом редакторе.
Сколько данных можно выгрузить в один XML-файл?
Жёсткого предела у ЗаписьXML нет, файл пишется потоково. Ограничения обычно у получателя: многие сервисы принимают файлы до нескольких десятков мегабайт. Большие выгрузки делят по периодам или упаковывают в zip.
Можно ли выгрузить XML в облачной 1С (1С:Фреш)?
Регламентированные отчёты и синхронизация данных работают так же, как в обычной базе. Внешние обработки в облаке подключаются только после проверки сервисом, поэтому свою выгрузку согласуйте с провайдером заранее.