Как правильно редактировать XML-правила обмена в 1С:Конвертация данных и нужно ли перенумеровывать коды свойств?

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

В практике разработчиков 1С часто возникает задача оперативного изменения правил обмена данными, созданных в конфигурации «1С:Конвертация данных 2.1» (КД 2.1). Иногда ради экономии времени программисты принимают решение не открывать специализированную базу КД, а отредактировать XML-файл правил напрямую в текстовом редакторе (например, в Notepad++ или VS Code). При этом возникает закономерный вопрос: как ведет себя платформа при ручном добавлении новых тегов, за что отвечает тег Код внутри свойств и обязательно ли соблюдать строгую последовательность нумерации?

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

Анатомия узла Свойство в XML-правилах

Для начала проанализируем, как описывается типичное свойство (реквизит) в XML-файле правил обмена. Каждое Правило Конвертации Свойства (ПКС) описывается отдельным XML-узлом Свойство, который находится внутри родительского узла Свойства конкретного Правила Конвертации Объекта (ПКО). Рассмотрим пример структуры такого узла:


<Свойство>
    <Код>44</Код>
    <Наименование>СуммаНДС --> СуммаНДС</Наименование>
    <Порядок>550</Порядок>
    <Источник Имя="СуммаНДС" Вид="Реквизит" Тип="Число"/>
    <Приемник Имя="СуммаНДС" Вид="Реквизит" Тип="Число"/>
</Свойство>

Давайте подробно разберем назначение ключевых тегов внутри этого блока:

Нужно ли перенумеровывать коды свойств при ручном добавлении?

Представим ситуацию: нам необходимо вручную добавить новое свойство в существующее ПКО. Рядом находятся свойства с кодами 43 и 44. Мы хотим вставить новое свойство. Обязательно ли сдвигать всю последующую нумерацию свойств или можно задать произвольный код, например, 446?

Ответ: перенумеровывать всю структуру правил не нужно. Вы можете совершенно спокойно использовать произвольный код (например, 446), если он удовлетворяет двум простым условиям:

  1. Код должен быть уникальным в пределах текущего ПКО (не должно быть двух одинаковых кодов свойств у одного и того же объекта конвертации).
  2. Код должен быть корректным с точки зрения формата XML-данных (целое положительное число).

Для успешного выполнения обмена обработке выгрузки не требуется сквозная последовательная нумерация кодов. Она считывает XML-файл последовательно. Тег Код используется в первую очередь для логирования. Если во время выполнения обработчиков событий (например, «Перед выгрузкой» или «При загрузке») произойдет ошибка, система выведет в журнал регистрации именно этот код, чтобы разработчик мог быстро найти проблемное место (например: Ошибка в ПКС № 446 (Реквизит --> Реквизит)).

Важное примечание: за фактический порядок выгрузки свойств отвечает тег Порядок, а не тег Код. Если вам критически важно, чтобы новое свойство выгружалось строго после или перед определенными реквизитами, настройте значение в теге Порядок.

Разбор мифа о «волшебной галочке» автонумерации

Некоторые разработчики ошибочно полагают, что в настройках ПКО существует флаг, который автоматически генерирует и исправляет коды ПКС в самом XML-файле правил обмена при ручной правке. Это опасное заблуждение.

Упомянутый флаг «Автоматически генерировать код или номер, если он не задан» в свойствах ПКО выполняет совершенно иную задачу:

Рекомендуемые сценарии изменения правил обмена

Несмотря на то, что технически ручная правка XML-файла вполне допустима и работоспособна, она таит в себе скрытые риски. Рассмотрим два альтернативных сценария работы.

Сценарий 1. Быстрое ручное добавление в XML (для экстренных случаев)

Если вам нужно срочно добавить простое свойство без сложных обработчиков и связей, выполним следующие шаги:

  1. Откроем XML-файл правил обмена в текстовом редакторе с подсветкой синтаксиса (например, Notepad++).
  2. Найдем нужное ПКО и его коллекцию <Свойства>.
  3. Скопируем блок существующего свойства (например, с кодом 44) и вставим его ниже.
  4. Зададим уникальный код, гарантированно не встречающийся в этом ПКО (например, 1044).
  5. Скорректируем тег Порядок так, чтобы он вписывался в нужную нам последовательность выполнения.
  6. Изменим наименование, а также имена источника и приемника в соответствии с реквизитами ваших метаданных.
  7. Сохраним файл и обязательно проверим его валидность (открыв, например, в любом интернет-браузере, который покажет ошибки синтаксиса XML, если они есть).

Пример корректно добавленного вручную свойства:


<Свойство>
    <Код>1044</Код>
    <Наименование>СуммаНДС --> СуммаНДС</Наименование>
    <Порядок>550</Порядок>
    <Источник Имя="СуммаНДС" Вид="Реквизит" Тип="Число"/>
    <Приемник Имя="СуммаНДС" Вид="Реквизит" Тип="Число"/>
</Свойство>

Сценарий 2. Правильный подход через «Конвертацию данных 2.1» (Рекомендуемый)

Ручные изменения легко затереть при последующих автоматических выгрузках правил из КД. Кроме того, ручная правка может привести к ошибкам формата, из-за которых правила откажутся загружаться обратно в информационную базу Конвертации. Чтобы избежать этого, выполним процесс по шагам в штатном режиме:

  1. Запустим конфигурацию «Конвертация данных 2.1».
  2. Выполним импорт существующих правил обмена (XML) через встроенный помощник загрузки правил.
  3. Перейдем в список ПКО, найдем требуемое правило конвертации объекта и откроем его свойства.
  4. Перейдем на вкладку «Конвертация свойств».
  5. Добавим новую строку (ПКС), выбрав реквизит источника и реквизит приемника из выпадающих списков метаданных. При этом КД 2.1 автоматически сгенерирует уникальный код и установит корректный порядок выгрузки.
  6. Сохраним изменения и выгрузим обновленные правила обмена в XML-файл.

Этот способ гарантирует 100% валидность структуры XML, корректность типов данных и сохранение целостности ваших доработок для последующих обновлений.

← На главную