Как редактировать правила обмена XML и вносить изменения в конвертацию данных

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

Работа с правилами обмена в формате XML — это стандартная задача для разработчика 1С, когда необходимо настроить перенос данных между различными конфигурациями. Часто возникает вопрос: обязательно ли использовать специализированную конфигурацию «Конвертация данных 2.1» (КД 2.1) для внесения мелких правок, таких как добавление одного реквизита, или можно обойтись обычным текстовым редактором? В этой статье мы подробно разберем оба подхода, проанализируем структуру XML-правил и научимся настраивать сопоставление объектов по наименованию.

Метод 1: Использование конфигурации «Конвертация данных 2.1»

Несмотря на то что правила обмена — это текстовый файл, использование специализированного инструмента является наиболее надежным способом. Рассмотрим классический алгоритм внесения изменений:

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

Этот метод гарантирует, что структура файла не будет нарушена, а кодировка останется корректной.

Метод 2: Ручное редактирование XML-правил в текстовом редакторе

Если задача стоит максимально остро и нужно добавить простой реквизит «здесь и сейчас», можно прибегнуть к редактированию файла блокнотом (лучше использовать Notepad++ или VS Code). Проанализируем структуру типового узла свойства в файле правил. Каждый реквизит описывается тегом Свойство внутри блока ИнформацияОПКС.

Разберем пример добавления реквизита Склад. Вам нужно найти соответствующее ПКО (например, для документа «Реализация») и вставить по аналогии следующий блок:


<Свойство>
    <Код>1</Код>
    <Наименование>Склад --> Склад</Наименование>
    <Порядок>50</Порядок>
    <Источник Имя="Склад" Тип="СправочникСсылка.Склады"/>
    <Приемник Имя="Склад" Тип="СправочникСсылка.Склады"/>
</Свойство>

Важный нюанс: при ручном добавлении убедитесь, что атрибуты Имя соответствуют именам объектов в метаданных (как они называются в Конфигураторе), а не их синонимам. Также следите за закрывающими тегами — любая лишняя скобка сделает файл нечитаемым для обработки УниверсальныйОбменДаннымиXML.

Настройка поиска объектов по наименованию

Часто возникает ситуация, когда объекты в разных базах имеют разные внутренние идентификаторы (GUID), и их нужно сопоставить по текстовому полю. Например, чтобы ХарактеристикаНоменклатуры искалась исключительно по названию.

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

  1. Найдите ПКО для нужного справочника.
  2. Внутри этого ПКО найдите свойство Наименование.
  3. Установите для него атрибут Поиск="true".
  4. У всех остальных свойств (особенно у Ссылка или Код) атрибут Поиск должен быть либо false, либо отсутствовать.

Пример XML-кода для поиска по наименованию:


<Свойство Поиск="true">
    <Наименование>Наименование --> Наименование</Наименование>
    <Источник Имя="Наименование" Тип="Строка"/>
    <Приемник Имя="Наименование" Тип="Строка"/>
</Свойство>

Помните: поиск по наименованию в 1С чувствителен к регистру и лишним пробелам. Если в базе-источнике склад называется "Основной ", а в базе-приемнике "Основной", объект не будет найден и может создаться дубль.

Использование программных обработчиков в ручном режиме

Даже без использования интерфейса «Конвертации данных» вы можете внедрить программную логику прямо в XML. Код на языке 1С размещается в специальных секциях внутри правил. Например, если нам нужно программно установить склад в зависимости от условия, мы можем использовать обработчик ПередВыгрузкой.

Проанализируем пример использования секции CDATA для вставки кода:


<ПередВыгрузкой>
<![CDATA[
Если Объект.СуммаДокумента > 100000 Тогда
    Значение = "ОптовыйСклад";
Иначе
    Значение = "РозничныйСклад";
КонецЕсли;
]]>
</ПередВыгрузкой>

Этот код будет выполнен системой непосредственно в момент выгрузки данных. Использование <![CDATA[ ... ]]> необходимо для того, чтобы символы «больше» или «меньше» в коде 1С не воспринимались как начало или конец XML-тегов.

Риски и технические рекомендации

Разберем основные опасности ручного редактирования, о которых стоит знать каждому программисту:

Отладка правил обмена

Если после ваших правок обмен работает некорректно, воспользуйтесь режимом отладки. В обработке Универсальный обмен данными в формате XML на вкладке «Дополнительные настройки» установите флаг «Режим отладки обработчиков выгрузки». Это позволит вам получить модуль отладки, загрузить его в конфигуратор и пошагово пройтись по коду, чтобы понять, почему тот или иной реквизит (например, наш новый Склад) не переносится или заполняется неправильно.

Таким образом, хотя ручное редактирование и экономит время на установку тяжелых конфигураций, оно требует глубокого понимания структуры XML и внимательности к деталям метаданных 1С.

← На главную