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