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