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