К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как в 1С сформировать XML-файл

Как в 1С сформировать XML-файл: типовая выгрузка, обработка «Универсальный обмен данными», запись XML программно. Примеры кода, проверка результата, ошибки.

XML — основной формат обмена данными в экосистеме 1С: через него выгружают документы в банки, налоговую, ЭДО-операторов, переносят справочники между базами и интегрируются с сайтами. Сформировать XML-файл можно тремя путями: штатной кнопкой выгрузки в конкретном документе, универсальными обработками обмена и программно — через встроенный язык 1С.

Выбор способа зависит от задачи. Если нужен один регламентированный файл (например, декларация или платёжное поручение) — хватит типовой кнопки. Если требуется массовый перенос данных между базами — используют обработку «Универсальный обмен данными в формате XML». Если формат нестандартный или нужна автоматическая выгрузка по расписанию — пишут код с объектом ЗаписьXML.

Ниже разобраны все три сценария с конкретными действиями, примером кода, способами проверки результата и типичными ошибками. Материал ориентирован на платформу 1С:Предприятие 8.3, но принципы одинаковы для большинства конфигураций.

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

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

Важно учитывать и периодичность. Разовую выгрузку проще сделать вручную через обработку. Если файл нужен каждый день в одно и то же время, ручной способ быстро станет источником ошибок — здесь оправдана разработка регламентного задания с программной записью XML.

Маршрут решения

Как выбрать действие

Нужен файл для налоговой, банка или ЭДО по утверждённому форматуИспользуйте штатную кнопку «Выгрузить» в документе или отчёте
Нужно перенести справочники или документы в другую базу 1СПримените обработку «Универсальный обмен данными в формате XML»
Формат нестандартный или нужна автоматическая выгрузка по расписаниюПишите выгрузку программно через объект ЗаписьXML
Обмен идёт с сайтом на 1С-БитриксПроверьте типовой модуль обмена с сайтом — он уже формирует CommerceML

Штатная выгрузка: документы, отчёты и банковские файлы

Простейший сценарий — выгрузка прямо из формы объекта. В типовых конфигурациях («Бухгалтерия предприятия», «Управление торговлей», «Зарплата и управление персоналом») у многих документов есть кнопка «Выгрузить» или пункт в меню «Ещё». Например, счёт на оплату, реализацию или счёт-фактуру можно выгрузить в XML для передачи контрагенту через ЭДО.

Регламентированные отчёты выгружаются из формы «1С-Отчётность»: откройте отчёт, нажмите «Выгрузить» и укажите каталог. Программа сама проверит заполнение по контрольным соотношениям и сформирует файл с именем по правилам приёма ФНС. Не переименовывайте такой файл вручную — имя кодирует ИНН, период и номер корректировки, и приёмная система отклонит файл с нарушенным именем.

Для обмена с банком в разделе «Банк и касса» → «Обмен с банком» есть выгрузка платёжных поручений. Файл обычно имеет формат, согласованный с конкретным банком (часто это текстовый формат, но ряд банков принимает XML). Перед первой выгрузкой сверьте настройки обмена с требованиями вашего банка.

Порядок действий для типовой выгрузки
  1. 1
    Откройте документ или отчёт, который нужно выгрузить
  2. 2
    Нажмите кнопку «Выгрузить» или найдите пункт в меню «Ещё»
  3. 3
    Проверьте период, организацию и другие параметры выгрузки
  4. 4
    Укажите каталог сохранения и подтвердите формирование файла
  5. 5
    Откройте полученный XML в браузере или редакторе и убедитесь, что данные на месте

Универсальный обмен данными между базами

Для переноса справочников и документов между базами 1С служит обработка «Универсальный обмен данными в формате XML». В типовых конфигурациях она встроена (раздел «Администрирование» → «Перенос данных» или аналогичный пункт), для нестандартных случаев обработку поставляет фирма «1С» в составе конфигурации «Конвертация данных».

Обработка работает по правилам обмена — отдельному XML-файлу, который описывает, какие объекты и как выгружать. Для обмена между одинаковыми конфигурациями правила можно сформировать автоматически. Для обмена между разными конфигурациями (например, из «Управления торговлей» в «Бухгалтерию») используются готовые правила поставки или разрабатываются свои в «Конвертации данных».

На закладке «Выгружаемые данные» отметьте нужные типы объектов, задайте отборы (по периоду, организации, конкретным элементам), укажите имя файла выгрузки и нажмите «Выгрузить данные». На приёмной стороне та же обработка в режиме загрузки читает файл и создаёт объекты в новой базе.

Программная запись XML через встроенный язык

Когда штатных средств не хватает, XML формируют кодом. Базовый инструмент — объект ЗаписьXML, который последовательно пишет элементы, атрибуты и текст в файл. Этот способ даёт полный контроль над структурой и подходит для интеграции с внешними системами.

Минимальный пример выгрузки списка номенклатуры:

Запись = Новый ЗаписьXML;

Запись.ОткрытьФайл("C:\Обмен\nomenklatura.xml", "UTF-8");

Запись.ЗаписатьОбъявлениеXML();

Запись.ЗаписатьНачалоЭлемента("Номенклатура");

Запрос = Новый Запрос("ВЫБРАТЬ Код, Наименование ИЗ Справочник.Номенклатура");

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Запись.ЗаписатьНачалоЭлемента("Товар");

Запись.ЗаписатьАтрибут("Код", Выборка.Код);

Запись.ЗаписатьТекст(Выборка.Наименование);

Запись.ЗаписатьКонецЭлемента();

КонецЦикла;

Запись.ЗаписатьКонецЭлемента();

Запись.Закрыть();

Ключевые правила: каждый открытый элемент должен быть закрыт, кодировку указывайте явно (UTF-8 — стандарт для большинства интеграций), а после записи вызывайте Закрыть(), иначе файл останется незавершённым. Для сериализации объектов 1С целиком (документов со всеми табличными частями) удобнее объект СериализаторXDTO — он преобразует объект в XML одним вызовом, но структура файла будет соответствовать внутреннему представлению платформы.

Если внешняя система прислала XSD-схему, не пишите XML «на глаз». Создайте в конфигураторе пакет XDTO по этой схеме (правый клик по ветке «XDTO-пакеты» → «Импорт XML-схемы») и заполняйте объекты через него — платформа сама проверит обязательные поля и типы данных до отправки файла.
ПЗ
Практическое замечание

Проверка сформированного файла

Файл записан — это ещё не результат. Минимальная проверка: откройте XML в браузере. Если браузер показывает дерево элементов без сообщения об ошибке — синтаксис корректен. Ошибка вида «XML page cannot be displayed» с указанием строки означает незакрытый тег, недопустимый символ или неверную кодировку.

Далее проверьте содержимое: количество выгруженных элементов должно совпадать с количеством записей в базе, а обязательные реквизиты (ИНН, даты, суммы) — быть заполнены. Для регламентированных файлов используйте проверяющие программы ведомств: тестер форматов ФНС, проверку в личном кабинете ЭДО-оператора или валидацию в клиент-банке до фактической отправки.

Контрольные точки

Как проверить результат

Открытие файла в браузере
Норма

Отображается дерево элементов без ошибок

Тревожный признак

Сообщение об ошибке синтаксиса с номером строки

Кодировка файла
Норма

UTF-8, кириллица читается корректно

Тревожный признак

Кракозябры или вопросительные знаки вместо русских букв

Количество записей
Норма

Совпадает с числом объектов в выборке из базы

Тревожный признак

Записей меньше — часть данных потерялась при выгрузке

Приём в целевой системе
Норма

Файл проходит загрузку без замечаний

Тревожный признак

Отказ с указанием обязательных полей или формата

Типичные ошибки и их устранение

Самая частая проблема — неверная кодировка. Если приёмная система показывает иероглифы вместо русского текста, файл записан не в той кодировке, которую ожидает приёмник. Указывайте кодировку явно при открытии файла и согласуйте её с требованиями принимающей стороны.

Вторая группа ошибок — спецсимволы XML. Знаки &, <, > и кавычки в наименованиях контрагентов ломают структуру файла, если писать их как есть. Объект ЗаписьXML экранирует их автоматически, а вот при ручной склейке строк через конкатенацию — нет. Поэтому собирать XML конкатенацией строк нельзя: рано или поздно в данных встретится символ, который разрушит файл.

Третья типичная ситуация — выгрузка «пустых» значений. Незаполненная дата в XDTO может превратиться в 0001-01-01, а пустая строка — в отсутствующий элемент. Если приёмная система требует обязательные поля, проверяйте заполненность до записи и явно решайте: пропускать элемент, писать значение по умолчанию или отклонять объект с протоколированием.

Типичные ошибки
01
Сборка XML конкатенацией строк — первый же амперсанд в наименовании ломает файл; используйте ЗаписьXML или XDTO
02
Забытый вызов Закрыть() — файл остаётся незавершённым и не читается приёмной системой
03
Переименование регламентированного файла — ФНС или банк отклоняет его из-за нарушения структуры имени
04
Загрузка XML в рабочую базу без копии — ошибка в правилах массово портит данные без возможности отката
05
Выгрузка без проверки заполненности обязательных реквизитов — файл формально создан, но отклоняется при приёме

Автоматизация: выгрузка по расписанию

Если XML нужен регулярно, оберните программную выгрузку в процедуру общего модуля и создайте регламентное задание (в конфигураторе: «Общие» → «Регламентные задания»). Задайте расписание, укажите метод и убедитесь, что на сервере 1С есть права на запись в целевой каталог — файловый путь должен быть доступен именно серверу, а не вашему рабочему месту.

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

Итог

Что важно запомнить

Регламентированные файлы выгружайте штатными кнопками конфигурации, перенос между базами — обработкой «Универсальный обмен данными в формате XML», нестандартные форматы — кодом через ЗаписьXML или XDTO. Всегда проверяйте файл до отправки: синтаксис, кодировку, количество записей и приём в целевой системе. Перед загрузкой любых XML в рабочую базу делайте резервную копию.

Частые вопросы

Чем открыть и проверить сформированный XML-файл?

Проще всего — браузером: он покажет структуру и сообщит об ошибке синтаксиса с номером строки. Для редактирования удобны Notepad++ или VS Code с подсветкой XML. Для проверки по схеме XSD используют специализированные валидаторы или тестеры ведомств (ФНС, банк, оператор ЭДО).

Почему в выгруженном XML вместо русских букв кракозябры?

Кодировка файла не совпадает с той, в которой его открывают. При записи указывайте UTF-8 явно, а при чтении проверяйте, что редактор или приёмная система интерпретирует файл в той же кодировке. Если требуется windows-1251, задайте её в параметре при открытии файла записи.

Можно ли выгрузить в XML документ со всеми табличными частями одной командой?

Да, через СериализаторXDTO: метод ЗаписатьXML преобразует объект базы в XML целиком, включая табличные части и ссылочные реквизиты. Ограничение — структура файла будет соответствовать внутреннему формату платформы, поэтому для обмена с внешними системами такой файл обычно требует преобразования.

Что делать, если штатная выгрузка формирует файл устаревшего формата?

Обновите конфигурацию — форматы ФНС и банков меняются, и поддержку актуальных версий 1С добавляет в релизы. Если обновление невозможно, уточните у приёмной стороны, принимается ли ваш формат: часто старые версии принимают параллельно с новыми в течение переходного периода.

Как выгрузить XML на сервере, если код выполняется на клиенте?

Перенесите запись файла в серверную процедуру общего модуля с признаком «Сервер». Учтите, что путь к файлу будет интерпретироваться относительно сервера: каталог C:\Обмен на сервере и на вашем компьютере — разные места. Для передачи файла пользователю используйте временное хранилище и метод ПолучитьФайл.

Безопасно ли загружать XML из внешних источников в базу?

Только после проверки. Файл из недоверенного источника может содержать некорректные данные, которые при загрузке создадут дубли или испортят справочники. Загружайте сначала в копию базы, используйте режим с контролем ссылочной целостности и проверяйте результат отчётами до переноса в рабочую среду.