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