Разработка и Конфигурация · 12 мин
Как в 1С сформировать XML-файл
Как в 1С сформировать XML-файл: типовая выгрузка, обработка «Универсальный обмен данными», запись XML программно. Примеры кода, проверка результата, ошибки.
XML — основной формат обмена данными в экосистеме 1С: через него выгружают документы в банки, налоговую, ЭДО-операторов, переносят справочники между базами и интегрируются с сайтами. Сформировать XML-файл можно тремя путями: штатной кнопкой выгрузки в конкретном документе, универсальными обработками обмена и программно — через встроенный язык 1С.
Выбор способа зависит от задачи. Если нужен один регламентированный файл (например, декларация или платёжное поручение) — хватит типовой кнопки. Если требуется массовый перенос данных между базами — используют обработку «Универсальный обмен данными в формате XML». Если формат нестандартный или нужна автоматическая выгрузка по расписанию — пишут код с объектом ЗаписьXML.
Ниже разобраны все три сценария с конкретными действиями, примером кода, способами проверки результата и типичными ошибками. Материал ориентирован на платформу 1С:Предприятие 8.3, но принципы одинаковы для большинства конфигураций.
Какой способ выгрузки XML выбрать под вашу задачу
Прежде чем открывать конфигуратор, определите, к какому типу относится задача. Регламентированная отчётность и банковские выписки имеют утверждённые форматы, которые меняются — их выгрузку поддерживает сама конфигурация, и вмешиваться в код не нужно. Обмен между двумя базами 1С (например, перенос номенклатуры из старой базы в новую) решается типовыми обработками. Только нестандартный формат для внешней системы требует программирования.
Важно учитывать и периодичность. Разовую выгрузку проще сделать вручную через обработку. Если файл нужен каждый день в одно и то же время, ручной способ быстро станет источником ошибок — здесь оправдана разработка регламентного задания с программной записью XML.
Как выбрать действие
Штатная выгрузка: документы, отчёты и банковские файлы
Простейший сценарий — выгрузка прямо из формы объекта. В типовых конфигурациях («Бухгалтерия предприятия», «Управление торговлей», «Зарплата и управление персоналом») у многих документов есть кнопка «Выгрузить» или пункт в меню «Ещё». Например, счёт на оплату, реализацию или счёт-фактуру можно выгрузить в XML для передачи контрагенту через ЭДО.
Регламентированные отчёты выгружаются из формы «1С-Отчётность»: откройте отчёт, нажмите «Выгрузить» и укажите каталог. Программа сама проверит заполнение по контрольным соотношениям и сформирует файл с именем по правилам приёма ФНС. Не переименовывайте такой файл вручную — имя кодирует ИНН, период и номер корректировки, и приёмная система отклонит файл с нарушенным именем.
Для обмена с банком в разделе «Банк и касса» → «Обмен с банком» есть выгрузка платёжных поручений. Файл обычно имеет формат, согласованный с конкретным банком (часто это текстовый формат, но ряд банков принимает XML). Перед первой выгрузкой сверьте настройки обмена с требованиями вашего банка.
- 1Откройте документ или отчёт, который нужно выгрузить
- 2Нажмите кнопку «Выгрузить» или найдите пункт в меню «Ещё»
- 3Проверьте период, организацию и другие параметры выгрузки
- 4Укажите каталог сохранения и подтвердите формирование файла
- 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, а пустая строка — в отсутствующий элемент. Если приёмная система требует обязательные поля, проверяйте заполненность до записи и явно решайте: пропускать элемент, писать значение по умолчанию или отклонять объект с протоколированием.
Автоматизация: выгрузка по расписанию
Если 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 из внешних источников в базу?
Только после проверки. Файл из недоверенного источника может содержать некорректные данные, которые при загрузке создадут дубли или испортят справочники. Загружайте сначала в копию базы, используйте режим с контролем ссылочной целостности и проверяйте результат отчётами до переноса в рабочую среду.