Разработка и Конфигурация · 11 мин
Как сохранить документ в XML из 1С
Как сохранить документ в XML из 1С: готовые обработки, встроенный механизм XDTO, программный код для записи XML и проверка результата без ошибок.
Задача сохранить документ в XML из 1С возникает в нескольких типовых ситуациях: обмен данными между базами, передача информации во внешние системы, архивирование данных в открытом формате, отладка интеграций и подготовка файлов для проверяющих. В зависимости от цели подходят разные инструменты — от встроенной универсальной обработки выгрузки до программной записи через встроенный язык.
Важно сразу разделить два разных смысла фразы «сохранить в XML». Первый — выгрузить данные документа (реквизиты, табличные части, ссылки) в файл, который потом можно загрузить в другую базу или прочитать сторонней программой. Второй — получить XML-представление печатной формы или электронного документа (например, УПД или счета-фактуры) для сдачи отчётности. Механизмы у этих задач разные, и путать их — частая причина бесполезных файлов.
Ниже разобраны рабочие способы: штатная обработка выгрузки/загрузки XML, программная сериализация объекта встроенными средствами платформы, работа с XDTO и выгрузка электронных документов. Для каждого способа указаны условия применения, ограничения и способ проверить результат.
Какой способ выгрузки выбрать под вашу задачу
Прежде чем открывать конфигуратор или искать обработку, определите, кто будет читать файл. Если XML нужен для переноса данных между двумя базами 1С с одинаковой конфигурацией, оптимален типовой формат выгрузки платформы. Если файл уходит в стороннюю систему (сайт, WMS, банк), потребуется собственная структура XML, которую формируют кодом или по схеме XDTO.
Если речь об электронном документе для контролирующих органов или контрагента — счёте-фактуре, УПД, акте — в типовых конфигурациях уже есть готовая кнопка выгрузки в регламентированный XML. Самостоятельно собирать такой файл кодом не нужно: формат жёстко нормирован, и ошибка в структуре приведёт к отказу при приёме.
Как выбрать действие
Выгрузка через типовую обработку «Выгрузка и загрузка данных XML»
Самый простой способ без программирования — универсальная обработка выгрузки и загрузки данных в формате XML. Она входит в состав многих типовых конфигураций и доступна на официальных дистрибутивах. Обработка работает в обычном и управляемом приложении и подходит для баз с идентичной структурой метаданных.
Порядок действий: откройте обработку через меню «Файл — Открыть», на закладке «Выгрузка» укажите файл для сохранения, выберите период и отметьте нужные виды документов. При необходимости задайте отбор по конкретным документам. После нажатия «Выгрузить данные» обработка сформирует XML-файл, содержащий объекты со всеми реквизитами и табличными частями.
- 1Откройте обработку «Выгрузка и загрузка данных XML» через меню «Файл — Открыть»
- 2На закладке «Выгрузка» укажите имя файла и период выгрузки
- 3Отметьте нужные виды документов и при необходимости настройте отбор
- 4Нажмите «Выгрузить данные» и дождитесь окончания
- 5Откройте полученный файл в текстовом редакторе и убедитесь, что данные присутствуют
У способа есть ограничения. Обработка выгружает данные во внутреннем формате платформы, поэтому загрузить такой файл осмысленно можно только в базу с той же структурой конфигурации. Сторонняя система такой XML не поймёт без дополнительной разработки. Также при больших объёмах выгрузка может занять заметное время и потребовать свободного места на диске.
Программная запись документа в XML через встроенный язык
Когда нужен собственный формат файла, документ сериализуют кодом. Платформа предоставляет два базовых подхода: запись произвольной XML-структуры объектом ЗаписьXML и автоматическая сериализация объекта конфигурации через СериализаторXDTO.
Первый вариант — ручная сборка структуры. Вы сами определяете имена элементов, порядок реквизитов и состав выгружаемых данных. Это удобно, когда внешняя система ожидает конкретный шаблон файла.
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\document.xml");
Запись.ЗаписатьОбъявлениеXML();
Запись.ЗаписатьНачалоЭлемента("Документ");
Запись.ЗаписатьАтрибут("Номер", Строка(Док.Номер));
Запись.ЗаписатьАтрибут("Дата", XMLСтрока(Док.Дата));
Запись.ЗаписатьНачалоЭлемента("Товары");
Для Каждого СтрокаТЧ Из Док.Товары Цикл
Запись.ЗаписатьНачалоЭлемента("Строка");
Запись.ЗаписатьАтрибут("Номенклатура", Строка(СтрокаТЧ.Номенклатура));
Запись.ЗаписатьАтрибут("Количество", XMLСтрока(СтрокаТЧ.Количество));
Запись.ЗаписатьКонецЭлемента();
КонецЦикла;
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
Второй вариант — сериализация объекта целиком через СериализаторXDTO. Метод ЗаписатьXML превращает объект документа в XML-представление, которое затем можно прочитать обратно методом ПрочитатьXML в другой базе 1С:
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\Обмен\doc_full.xml");
Запись.ЗаписатьОбъявлениеXML();
СериализаторXDTO.ЗаписатьXML(Запись, ДокОбъект);
Запись.Закрыть();
Обратите внимание: сериализовать нужно объект (ДокументОбъект), а не ссылку. Ссылку получают методом ПолучитьОбъект(). При ручной сборке XML экранируйте специальные символы — платформа делает это автоматически при записи атрибутов и текстов, но при конкатенации строк XML вручную легко получить невалидный файл.
Выгрузка по схеме XDTO для обмена с внешними системами
Механизм XDTO (XML Data Transfer Objects) предназначен для строгого обмена по заранее описанной схеме. В конфигурации создаётся пакет XDTO с пространством имён, типами объектов и их свойствами. Далее в коде создаётся объект XDTO, заполняется данными документа и записывается в файл с автоматической проверкой соответствия схеме.
Главное преимущество XDTO перед ручной записью — валидация. Если обязательное свойство не заполнено или тип данных не совпадает со схемой, платформа выдаст ошибку ещё на этапе записи, а не на стороне приёмника. Это существенно снижает количество отклонённых файлов при регулярном обмене.
Типовые конфигурации используют XDTO в подсистемах обмена: EnterpriseData, обмен с сайтами, банками. Если ваша задача — интеграция с корпоративной системой, разумно взять за основу существующий формат EnterpriseData, а не изобретать собственный: для него уже есть готовые правила и документация.
Выгрузка электронных документов для отчётности и контрагентов
Отдельный сценарий — получение XML счёта-фактуры, УПД, акта или накладной в регламентированном формате. В типовых конфигурациях (например, в решениях на базе БСП с подсистемой электронного документооборота) в карточке документа есть команда формирования электронного документа и его сохранения на диск.
Обычно путь такой: откройте документ, сформируйте электронный документ через соответствующую команду, затем используйте «Сохранить на диск» или «Выгрузить». Файл будет соответствовать утверждённому формату, включая необходимые служебные элементы. Если документ подписывается электронной подписью, выгружайте файл уже после подписания — иначе при приёме возникнет ошибка проверки.
Если в вашей конфигурации такой подсистемы нет, регламентированный XML придётся формировать кодом строго по действующему формату. Это трудоёмкая задача: форматы периодически обновляются, и самостоятельно собранный файл нужно проверять валидатором перед отправкой.
Проверка результата и типичные ошибки
После выгрузки обязательно проверьте файл до передачи получателю. Минимальная проверка — открыть XML в браузере или текстовом редакторе: браузер сразу покажет синтаксическую ошибку с указанием строки. Далее убедитесь, что в файле присутствуют ожидаемые документы, корректны даты и суммы, а кириллица отображается правильно.
Для программной проверки файл можно прочитать обратно через ЧтениеXML или ПрочитатьXML сериализатора — если чтение проходит без исключений, структура корректна. При обмене по XDTO дополнительно выполните проверку объекта методом Проверить() перед записью.
Как проверить результат
Структура отображается без ошибок разбора
Сообщение об ошибке XML с номером строки
Кириллица читается, объявлена UTF-8
Крякозябры или пустые значения вместо текста
Все выбранные документы и табличные части присутствуют
Часть документов отсутствует, табличные части пусты
ПрочитатьXML выполняется без исключения
Ошибка несоответствия типов при чтении
Ограничения и меры предосторожности
Выгрузка данных — операция чтения, она не изменяет базу, но связанные с ней действия рискованны. Обратная загрузка XML в рабочую базу способна создать дубли документов, перезаписать существующие объекты или нарушить связность данных. Всегда выполняйте загрузку сначала в копию базы и делайте резервную копию перед загрузкой в рабочую.
Учитывайте права доступа: выгрузка выполняется в рамках прав текущего пользователя. Если у пользователя нет доступа к части реквизитов или документов, эти данные молча не попадут в файл. Для полной выгрузки работайте под учётной записью с достаточными правами, но не раздавайте такие права без необходимости — XML-файл с данными документов является конфиденциальным и требует защищённого хранения и передачи.
При выгрузке больших объёмов следите за свободным местом на диске и не запускайте тяжёлые выгрузки в часы пиковой нагрузки на сервер: файловая запись и чтение большого числа объектов увеличивают нагрузку на СУБД.
Что важно запомнить
Для переноса между базами 1С используйте типовую обработку выгрузки XML, для внешних систем — программную запись через ЗаписьXML или XDTO, для отчётности — штатную выгрузку электронных документов. Всегда проверяйте файл чтением и тестируйте загрузку на копии базы.
Частые вопросы
Можно ли сохранить документ в XML без программирования?
Да. Типовая обработка «Выгрузка и загрузка данных XML» позволяет выгрузить документы за выбранный период без написания кода. Для электронных документов (счетов-фактур, УПД) в типовых конфигурациях есть штатная команда сохранения XML прямо из карточки документа.
Чем отличается выгрузка через обработку от записи через СериализаторXDTO?
Это разные форматы файлов. Обработка пишет данные во внутреннем формате выгрузки платформы с правилами конвертации, а СериализаторXDTO сохраняет объект напрямую в XML-представление платформы. Файл одного формата нельзя загрузить инструментом другого.
Почему в выгруженном файле нет части документов?
Наиболее вероятные причины: неверно задан период или отбор в обработке, у пользователя недостаточно прав на часть данных, либо документы не проведены и исключены настройками выгрузки. Проверьте параметры выгрузки и права учётной записи.
Как проверить, что XML-файл корректен?
Откройте файл в браузере — синтаксические ошибки будут показаны с номером строки. Для полной проверки прочитайте файл обратно в 1С через ЧтениеXML или ПрочитатьXML сериализатора: отсутствие исключений означает корректную структуру.
Можно ли загрузить выгруженный XML в базу с другой конфигурацией?
Напрямую — нет: форматы выгрузки платформы привязаны к структуре метаданных. Для обмена между разными конфигурациями используют правила конвертации (например, через «Конвертацию данных») или обмен по формату EnterpriseData.
Опасна ли выгрузка документов в XML для рабочей базы?
Сама выгрузка — операция чтения и безопасна. Риск представляет обратная загрузка: она может создать дубли или перезаписать данные. Перед загрузкой в рабочую базу всегда делайте резервную копию и проверяйте процедуру на тестовой копии.