При настройке правил обмена в конфигурации «Конвертация данных 2.1» разработчики часто сталкиваются с необходимостью передать в параметрах конвертации значение составного типа (например, контрагента или физическое лицо, либо ссылку на различные справочники). Однако в визуальном редакторе правил на вкладке «Параметры» поле Тип значения позволяет выбрать только один конкретный тип данных.
Разберем причины такого поведения платформы и универсальные способы реализации составного типа данных для параметров.
Проанализируем механизм работы обработки УниверсальныйОбменДаннымиXML при загрузке правил обмена. Тип параметра хранится в XML-файле правил в виде единичной строки. При чтении файла обработка инициализирует типы параметров следующим фрагментом кода:
Если Не ПустаяСтрока(СтрокаТипаЗначения) Тогда
Попытка
ТипЗначенияДанных = Тип(СтрокаТипаЗначения);
ТипОпределен = Истина;
Исключение
ТипОпределен = Ложь;
КонецПопытки;
КонецЕсли;
Функция платформы Тип() принимает на вход строковое имя только одного конкретного типа. Соответственно, конструктор составного ОписаниеТипов в типовом интерфейсе правил выгрузки не предусмотрен.
Если вам необходимо, чтобы пользователь мог интерактивно выбирать значение составного типа в диалоговом окне обработки УниверсальныйОбменДаннымиXML на закладке «Параметры выгрузки», выполним переопределение программно.
Разберем по шагам, как настроить составной тип:
ОписаниеТипов и применим его к строке таблицы параметров:
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип("СправочникСсылка.Контрагенты"));
МассивТипов.Добавить(Тип("СправочникСсылка.ФизическиеЛица"));
СоставноеОписание = Новый ОписаниеТипов(МассивТипов);
// Находим параметр в таблице параметров обработки выгрузки
СтрокаПараметра = ТаблицаПараметров.Найти("ИмяПараметра", "Имя");
Если СтрокаПараметра <> Неопределено Тогда
СтрокаПараметра.Тип = СоставноеОписание;
СтрокаПараметра.Значение = СоставноеОписание.ПривестиЗначение(СтрокаПараметра.Значение);
КонецЕсли;
После применения этого кода поле ввода параметра в форме обработки выгрузки получит стандартную кнопку выбора типа, открывающую окно выбора из заданного списка ссылочных типов.
Если значение параметра не выбирается пользователем вручную, а вычисляется или передается программно, строгая типизация в метаданных правил не требуется. В среде платформы 1С коллекция Параметры в процессе выгрузки представляет собой обычный объект Структура.
Посмотрим, как заполнить такой параметр в обработчиках конвертации (например, «Перед выгрузкой данных» или «Инициализация»):
// В параметр можно поместить ссылку любого типа или сложную структуру
Параметры.Вставить("ИмяПараметра", ИсточникИлиВычисленноеЗначение);
Если для параметра включен флаг «Передавать при выгрузке», важно учитывать следующие правила: