Выгрузка в XML из 1С 8.3: от готовой кнопки до своего обмена по расписанию
Содержание
Получить 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 из 1С стандартными средствами без доработок
Регламентированная отчётность
Это самый частый случай, когда бухгалтеру нужен XML. В БП 3.0 и ЗУП 3.1 отчёты лежат в разделе Отчеты → Регламентированные отчеты.
- Откройте нужный отчёт и заполните его.
- Запустите проверку контрольных соотношений и формата — команды проверки находятся в командной панели формы отчёта.
- Нажмите
Выгрузитьи укажите папку. - Программа сохранит файл с именем по правилам ведомства, например
NO_NDS_...xmlдля декларации по НДС.
Не переименовывайте выгруженный файл. Имя содержит коды налогового органа, ИНН и идентификатор файла. Сервис приёма сверяет его с содержимым и отклоняет файл с изменённым именем.
Обработка «Выгрузка и загрузка данных XML»
Универсальная обработка для переноса объектов между базами с одинаковой конфигурацией. Её распространяют как внешний файл .epf вместе с информационно-технологическим сопровождением.
- Откройте файл через главное меню:
≡ → Файл → Открыть. - На вкладке выгрузки отметьте флажками нужные справочники, документы, регистры.
- Для документов задайте период — иначе обработка выгрузит всю историю.
- Укажите имя файла и нажмите
Выгрузить данные.
Обработка тянет за собой объекты по ссылкам. Выгружаете 10 документов реализации — в файл попадут и контрагенты, и номенклатура, и договоры из этих документов.
Загружайте такой файл только в базу той же версии конфигурации. Если в приёмнике другой состав реквизитов, загрузка остановится с ошибкой или запишет данные не туда. Перед загрузкой сделайте резервную копию базы-приёмника.
Если открыть внешнюю обработку не получается, проверьте права. Пользователю нужно право на интерактивное открытие внешних отчётов и обработок, а в типовых конфигурациях ещё и подтверждение в окне предупреждения безопасности.
Выгрузка конфигурации в XML-файлы
Иногда «получить XML из 1С» значит выгрузить не данные, а саму конфигурацию — для системы контроля версий или для сравнения. В Конфигураторе это команда Конфигурация → Выгрузить конфигурацию в файлы. Платформа создаст каталог с сотнями XML-файлов: по одному на каждый объект метаданных, плюс модули в виде .bsl.
Не путайте с командой Администрирование → Выгрузить информационную базу. Она создаёт файл .dt — это двоичный архив, а не XML.
Обмен через XML по правилам Конвертации данных 2.0 и 3.0
Когда базы разные — скажем, УТ 11 и БП 3.0 — прямой перенос не работает . Нужен посредник, который знает, как реквизиты одной конфигурации ложатся на другую. Этот посредник и есть Конвертация данных (КД).
КД 3.0 и формат EnterpriseData
Современные типовые конфигурации обмениваются через формат EnterpriseData. Правила уже встроены в конфигурацию, настраивать их не нужно.
- Откройте
Администрирование → Синхронизация данных. - Включите флажок синхронизации и задайте префикс информационной базы.
- Создайте новую синхронизацию с нужной программой.
- В качестве способа подключения выберите обмен через локальный или сетевой каталог.
- Задайте правила отбора: организации, дату начала выгрузки.
- Запустите синхронизацию.
В папке обмена появится файл сообщения вида 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">
<Наименование>ООО "Ромашка" & партнёры</Наименование>
<ИНН>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С останется висеть, и следующий запуск упрётся в открытый сеанс.
Заведите для обмена отдельного пользователя. Пароль в командной строке виден всем, у кого есть доступ к заданиям Планировщика, поэтому права этого пользователя ограничьте чтением нужных данных.