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