Как в Конвертации данных 2.1 задать составной тип для параметра?

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

При настройке правил обмена в конфигурации «Конвертация данных 2.1» разработчики часто сталкиваются с необходимостью передать в параметрах конвертации значение составного типа (например, контрагента или физическое лицо, либо ссылку на различные справочники). Однако в визуальном редакторе правил на вкладке «Параметры» поле Тип значения позволяет выбрать только один конкретный тип данных.

Разберем причины такого поведения платформы и универсальные способы реализации составного типа данных для параметров.

Почему в интерфейсе нельзя выбрать составной тип?

Проанализируем механизм работы обработки УниверсальныйОбменДаннымиXML при загрузке правил обмена. Тип параметра хранится в XML-файле правил в виде единичной строки. При чтении файла обработка инициализирует типы параметров следующим фрагментом кода:


Если Не ПустаяСтрока(СтрокаТипаЗначения) Тогда
    Попытка
        ТипЗначенияДанных = Тип(СтрокаТипаЗначения);
        ТипОпределен = Истина;
    Исключение
        ТипОпределен = Ложь;
    КонецПопытки;
КонецЕсли;

Функция платформы Тип() принимает на вход строковое имя только одного конкретного типа. Соответственно, конструктор составного ОписаниеТипов в типовом интерфейсе правил выгрузки не предусмотрен.

Способ 1. Программное переопределение типа для интерактивного выбора

Если вам необходимо, чтобы пользователь мог интерактивно выбирать значение составного типа в диалоговом окне обработки УниверсальныйОбменДаннымиXML на закладке «Параметры выгрузки», выполним переопределение программно.

Разберем по шагам, как настроить составной тип:

  1. В конфигурации «Конвертация данных» откроем нужный параметр и укажем любой допустимый базовый тип (или оставим его незаполненным).
  2. Перейдем в глобальные обработчики событий конвертации и откроем обработчик «После загрузки правил обмена».
  3. Добавим программный код формирования объекта ОписаниеТипов и применим его к строке таблицы параметров:

МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
МассивТипов.Добавить(Тип("СправочникСсылка.ФизическиеЛица"));

СоставноеОписание = Новый ОписаниеТипов(МассивТипов);

// Находим параметр в таблице параметров обработки выгрузки
СтрокаПараметра = ТаблицаПараметров.Найти("ИмяПараметра", "Имя");
Если СтрокаПараметра <> Неопределено Тогда
    СтрокаПараметра.Тип = СоставноеОписание;
    СтрокаПараметра.Значение = СоставноеОписание.ПривестиЗначение(СтрокаПараметра.Значение);
КонецЕсли;

После применения этого кода поле ввода параметра в форме обработки выгрузки получит стандартную кнопку выбора типа, открывающую окно выбора из заданного списка ссылочных типов.

Способ 2. Программная инициализация без интерактивного диалога

Если значение параметра не выбирается пользователем вручную, а вычисляется или передается программно, строгая типизация в метаданных правил не требуется. В среде платформы 1С коллекция Параметры в процессе выгрузки представляет собой обычный объект Структура.

Посмотрим, как заполнить такой параметр в обработчиках конвертации (например, «Перед выгрузкой данных» или «Инициализация»):


// В параметр можно поместить ссылку любого типа или сложную структуру
Параметры.Вставить("ИмяПараметра", ИсточникИлиВычисленноеЗначение);

Особенности передачи составных параметров в базу-приемник

Если для параметра включен флаг «Передавать при выгрузке», важно учитывать следующие правила:

  1. В правилах конвертации обязательно должны присутствовать корректные ПКО для каждого из типов данных, которые могут быть переданы в параметре.
  2. Если в настройках параметра указано конкретное Правило конвертации (ПКО), оно будет применяться безусловно, что вызовет ошибку при передаче значения другого типа. Поэтому для параметров составного типа поле ПКО следует оставлять пустым, чтобы обработка подбирала правило автоматически по фактическому типу значения.
  3. При передаче сложных ссылочных типов рекомендуется проверить корректность работы сериализации и при возникновении коллизий отключить флаг оптимизированного формата выгрузки.
← На главную