Каждый разработчик 1С рано или поздно сталкивается с задачей выгрузки данных в формате XML. Часто ситуация выглядит стандартно: нам дают готовый файл-пример, созданный в сторонней системе, и просят реализовать выгрузку из 1С с точно такой же структурой. Ручное написание кода с бесконечными вызовами ЗаписатьНачалоЭлемента и ЗаписатьАтрибут — работа монотонная и чреватая ошибками. В этой статье мы разберем, как автоматизировать этот процесс, и какие инструменты помогут «ленивому» программисту сэкономить часы работы.
Самый надежный и правильный с точки зрения платформы 1С способ — это работа через XDTO-пакеты. Даже если у вас нет готовой XSD-схемы, ее можно получить из вашего XML-примера. Разберем этот процесс по шагам:
Проанализируем пример кода с использованием XDTO:
// Создаем объект на основе типа из пакета XDTO
ТипОбъекта = ФабрикаXDTO.Тип("http://www.example.com/integration", "ДанныеВыгрузки");
НовыйОбъект = ФабрикаXDTO.Создать(ТипОбъекта);
// Заполняем свойства как обычные реквизиты структуры
НовыйОбъект.НомерДокумента = "001";
НовыйОбъект.Дата = ТекущаяДата();
// Сериализация в XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\export.xml");
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НовыйОбъект);
ЗаписьXML.Закрыть();
Преимущество: Строгая типизация и автоматический контроль структуры. Если формат XML сложный и иерархичный, XDTO избавляет от путаницы во вложенных узлах.
Если структура файла относительно небольшая, удобно использовать DOM (Document Object Model). В обсуждении на форуме подчеркивается, что DOM позволяет работать с XML как с деревом объектов, что гораздо нагляднее последовательной записи. Рассмотрим, как выглядит формирование структуры через построитель DOM:
ДокументDOM = Новый ДокументDOM;
Корень = ДокументDOM.СоздатьЭлемент("Root");
ДокументDOM.ЗаписатьУзел(Корень);
ЭлементДанные = ДокументDOM.СоздатьЭлемент("Data");
ЭлементДанные.УстановитьАтрибут("ID", "123");
Корень.ДобавитьДочерний(ЭлементДанные);
// Запись на диск
ЗаписьDOM = Новый ЗаписьDOM;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\dom_export.xml");
ЗаписьDOM.Записать(ДокументDOM, ЗаписьXML);
ЗаписьXML.Закрыть();
Этот метод позволяет гибко манипулировать узлами, добавлять их в любое место дерева и легко ориентироваться в иерархии примера.
Выясним причину популярности этого метода среди опытных разработчиков. Когда структура XML жестко задана и меняется крайне редко, проще всего использовать текстовый макет. Мы берем файл-пример, вставляем его в макет типа «Текст» и заменяем конкретные значения параметрами в квадратных скобках.
Рассмотрим алгоритм действий:
<Price>[Цена]</Price>.СтрЗаменить() или функционал шаблонов.Важный момент: При таком подходе нужно обязательно следить за экранированием спецсимволов XML (например, символов «&» или «<») в передаваемых данных, чтобы не нарушить валидность файла.
Как справедливо замечено в дискуссии, современные большие языковые модели (ChatGPT, Claude и другие) идеально подходят для решения задачи «парсинга XML в код». Это и есть тот самый «баран, который превращается в колбасу».
Попробуем составить правильный запрос (промпт) для нейросети:
«Напиши процедуру на языке 1С:Предприятие 8.3, которая формирует XML по следующему образцу [ВСТАВИТЬ ТЕКСТ ВАШЕГО XML]. Используй объект ЗаписьXML. Данные для заполнения должны передаваться через структуру 'ПараметрыВыгрузки'.»
Результатом будет практически готовый листинг кода, в котором уже прописаны все ЗаписатьНачалоЭлемента с правильными именами тегов из вашего примера. Вам останется только подставить реальные источники данных из вашей информационной базы.
Для конфигураций вроде БГУ 2 или современных редакций ERP существуют встроенные механизмы форматов обмена. Разберем их суть: в справочнике настраивается соответствие (маппинг) пути к узлу XML и реквизита объекта 1С. Это позволяет настраивать выгрузки вообще без написания кода в конфигураторе.
Если вы часто выполняете подобные задачи, стоит один раз написать (или найти на профильных ресурсах) универсальную обработку, которая:
Проанализировав все варианты, можно сделать вывод: ручное написание каждой строки выгрузки — это анахронизм. Для сложных систем выбираем XDTO, для быстрой разовой задачи — LLM или текстовые шаблоны, а для удобства отладки — DOM. Использование этих инструментов превращает рутинную работу в творческий процесс настройки связей данных.