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