При разработке правил обмена в конфигурации «Конвертация данных 2.0» часто возникает задача объединения нескольких типов источников в один целевой тип приемника. Например, в конфигурации-источнике начисления ведутся в двух разных планах видов расчета — ОсновныеНачисленияОрганизаций и ДополнительныеНачисленияОрганизаций, а в конфигурации-приемнике существует только один общий план видов расчета ОсновныеНачисленияОрганизаций. Ниже мы разберем, как правильно организовать правила конвертации объектов и реквизитов, а также рассмотрим решение распространенной ошибки при произвольной выгрузке табличных частей.
Для перегрузки двух независимых планов видов расчета в один целевой объект необходимо создать два отдельных Правила Конвертации Объектов (ПКО):
ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций, Приемник — ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций.ПланВидовРасчетаСсылка.ДополнительныеНачисленияОрганизаций, Приемник — ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций.Для каждого ПКО создается свое Правило Выгрузки Данных (ПВД), чтобы объекты обоих типов могли выгружаться независимо при полном или частичном обмене.
Когда ссылка на вид расчета встречается в качестве реквизита документа или колонки табличной части, возникает вопрос: как указать правило конвертации для этого реквизита? Рассмотрим два основных подхода.
Способ 1. Автоматическое определение правила платформой
Если в Правиле Конвертации Свойств (ПКС) для колонки ВидРасчета оставить поле «Имя ПКО» пустым, механизм КД 2.0 при выгрузке автоматически проанализирует фактический тип ссылки, содержащейся в реквизите. Если ссылка относится к основным начислениям, сработает первое ПКО, если к дополнительным — второе.
Способ 2. Явное назначение ПКО в обработчике «Перед выгрузкой»
Если требуется принудительно задать логику выбора правила, можно использовать специальную переменную ИмяПКО в обработчике «Перед выгрузкой» соответствующего ПКС:
Если ЗначениеЗаполнено(ОбъектКоллекции.ВидРасчета) Тогда
Если ТипЗнч(ОбъектКоллекции.ВидРасчета) = Тип("ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций") Тогда
ИмяПКО = "ОсновныеНачисленияОрганизаций";
ИначеЕсли ТипЗнч(ОбъектКоллекции.ВидРасчета) = Тип("ПланВидовРасчетаСсылка.ДополнительныеНачисленияОрганизаций") Тогда
ИмяПКО = "ДополнительныеНачисленияОрганизаций";
КонецЕсли;
Значение = ОбъектКоллекции.ВидРасчета;
КонецЕсли;
Проанализируем частую проблему при выгрузке документов без объекта-источника (когда данные формируются программно через запрос в таблицу значений). В этом случае обработка выгрузки выдает ошибку:
Ошибка получения значения свойства подчиненного объекта ... ОписаниеОшибки = Поле объекта не обнаружено
Выясним причину этого поведения. Когда в настройках ПКС заполнено поле «Источник», обработка обмена пытается автоматически прочитать свойство с этим именем из объекта или строки таблицы (ОбъектКоллекции.ИмяИсточника) до выполнения кода в обработчике «Перед выгрузкой». Если имя колонки в вашей программно сформированной таблице значений не совпадает с именем источника или если поле «Источник» заполнено при отсутствии реального объекта-источника, платформа генерирует исключение.
Для исправления ошибки разберем по шагам следующие действия:
ВидРасчета в табличной части документа.
Значение = ОбъектКоллекции.ВидРасчета;
После очистки поля «Источник» платформа КД 2.0 прекратит попытки автоматического обращения к объекту по имени реквизита и берет значение напрямую из переменной Значение, успешно применяя необходимое ПКО по типу ссылки.