Как автоматически сформировать код 1С для выгрузки XML на основе примера файла

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Каждый разработчик 1С рано или поздно сталкивается с задачей выгрузки данных в формате XML. Часто ситуация выглядит стандартно: нам дают готовый файл-пример, созданный в сторонней системе, и просят реализовать выгрузку из 1С с точно такой же структурой. Ручное написание кода с бесконечными вызовами ЗаписатьНачалоЭлемента и ЗаписатьАтрибут — работа монотонная и чреватая ошибками. В этой статье мы разберем, как автоматизировать этот процесс, и какие инструменты помогут «ленивому» программисту сэкономить часы работы.

Метод 1: Использование механизмов XDTO (Профессиональный подход)

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

  1. Генерация схемы: Воспользуйтесь любым онлайн-сервисом или специализированным ПО (например, визуальными редакторами XML) для автоматической генерации XSD-схемы на основе вашего XML-файла.
  2. Импорт в 1С: В конфигураторе добавьте новый «Пакет XDTO» и импортируйте в него созданную схему. Платформа автоматически создаст структуру типов и свойств.
  3. Написание кода: Теперь вам не нужно думать о тегах. Вы создаете объекты 1С, заполняете их свойства, а платформа сама превращает их в XML.

Проанализируем пример кода с использованием XDTO:


// Создаем объект на основе типа из пакета XDTO
ТипОбъекта = ФабрикаXDTO.Тип("http://www.example.com/integration", "ДанныеВыгрузки");
НовыйОбъект = ФабрикаXDTO.Создать(ТипОбъекта);

// Заполняем свойства как обычные реквизиты структуры
НовыйОбъект.НомерДокумента = "001";
НовыйОбъект.Дата = ТекущаяДата();

// Сериализация в XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\export.xml");
ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, НовыйОбъект);
ЗаписьXML.Закрыть();

Преимущество: Строгая типизация и автоматический контроль структуры. Если формат XML сложный и иерархичный, XDTO избавляет от путаницы во вложенных узлах.

Метод 2: Объектная модель DOM

Если структура файла относительно небольшая, удобно использовать 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.Закрыть();

Этот метод позволяет гибко манипулировать узлами, добавлять их в любое место дерева и легко ориентироваться в иерархии примера.

Метод 3: Текстовые шаблоны (Самый быстрый способ)

Выясним причину популярности этого метода среди опытных разработчиков. Когда структура XML жестко задана и меняется крайне редко, проще всего использовать текстовый макет. Мы берем файл-пример, вставляем его в макет типа «Текст» и заменяем конкретные значения параметрами в квадратных скобках.

Рассмотрим алгоритм действий:

  1. Создаем макет с текстом XML.
  2. В тексте пишем: <Price>[Цена]</Price>.
  3. В коде используем метод СтрЗаменить() или функционал шаблонов.

Важный момент: При таком подходе нужно обязательно следить за экранированием спецсимволов XML (например, символов «&» или «<») в передаваемых данных, чтобы не нарушить валидность файла.

Метод 4: Использование ИИ (LLM) как генератора кода

Как справедливо замечено в дискуссии, современные большие языковые модели (ChatGPT, Claude и другие) идеально подходят для решения задачи «парсинга XML в код». Это и есть тот самый «баран, который превращается в колбасу».

Попробуем составить правильный запрос (промпт) для нейросети:

«Напиши процедуру на языке 1С:Предприятие 8.3, которая формирует XML по следующему образцу [ВСТАВИТЬ ТЕКСТ ВАШЕГО XML]. Используй объект ЗаписьXML. Данные для заполнения должны передаваться через структуру 'ПараметрыВыгрузки'.»

Результатом будет практически готовый листинг кода, в котором уже прописаны все ЗаписатьНачалоЭлемента с правильными именами тегов из вашего примера. Вам останется только подставить реальные источники данных из вашей информационной базы.

Метод 5: Универсальные обработки с маппингом

Для конфигураций вроде БГУ 2 или современных редакций ERP существуют встроенные механизмы форматов обмена. Разберем их суть: в справочнике настраивается соответствие (маппинг) пути к узлу XML и реквизита объекта 1С. Это позволяет настраивать выгрузки вообще без написания кода в конфигураторе.

Если вы часто выполняете подобные задачи, стоит один раз написать (или найти на профильных ресурсах) универсальную обработку, которая:

Проанализировав все варианты, можно сделать вывод: ручное написание каждой строки выгрузки — это анахронизм. Для сложных систем выбираем XDTO, для быстрой разовой задачи — LLM или текстовые шаблоны, а для удобства отладки — DOM. Использование этих инструментов превращает рутинную работу в творческий процесс настройки связей данных.

← На главную