При настройке или доработке механизмов синхронизации на базе Библиотеки стандартных подсистем (БСП) между типовыми конфигурациями (например, «Управление торговлей 11» и «Бухгалтерия предприятия 3.0») разработчики часто сталкиваются с ситуацией: логика обработчиков в Конвертации данных 2.1 (КД 2.1) успешно работает при прямом COM-подключении или в тестовой базе, но совершенно игнорируется при файловом обмене или выгрузке через FTP. Разберем причину этого поведения и выясним, как правильно организовывать поиск объектов и загрузку правил обмена.
Рассмотрим типовую задачу: при выгрузке контрагентов необходимо исключить сопоставление по пустым значениям ИНН и КПП, чтобы не сопоставлять всех новых элементов источника с одним и тем же контрагентом без ИНН в приемнике. Для этого в ПКО Контрагенты дорабатывается обработчик Поля поиска.
Проанализируем пример кода, который часто используется для динамической смены полей поиска:
Если НомерВариантаПоиска = 1 Тогда
Если ЗначениеЗаполнено(СокрЛП(СвойстваПоиска.Получить("ИНН"))) Тогда
СтрокаИменСвойствПоиска = "ИНН, КПП";
КонецЕсли;
КонецЕсли;
При использовании данного алгоритма важно учесть особенности работы платформы и Конвертации данных:
СвойстваПоиска попадают только те реквизиты, для которых в ПКС (Правилах конвертации свойств) установлен флаг Поиск. Если для реквизита ИНН флаг поиска отключен, то обращение к нему вернет пустое значение.НомерВариантаПоиска принимает последовательные значения от 1 до 10. Если на определенном шаге строка поиска формируется по пустому ИНН (например, СтрокаИменСвойствПоиска = "ИНН, КПП" при незаполненных реквизитах), платформа попытается найти объект с пустым ИНН/КПП и сопоставит его с первым попавшимся элементом в базе-приемнике.ПрекратитьПоиск = Ложь.Выясним главную причину, по которой правила, исправленные в Конвертации данных, прекращают отрабатывать при переходе на FTP-канал. При прямом подключении (COM-соединение) информационная база-источник сама управляет процессом записи данных в приемник и считывает правила из своего единого комплекта.
Однако при асинхронном обмене (через FTP, каталог или электронную почту) процесс разделяется на два независимых этапа:
В типовых решениях подсистема синхронизации хранит правила обмена в регистре сведений Правила для обмена данными локально в каждой информационном базе. Комплект правил обмена для интеграции представляет собой zip-архив, содержащий три ключевых файла:
ExchangeRules.xml — правила конвертации объектов для базы-источника.CorrespondentExchangeRules.xml — правила конвертации (загрузки/обратного обмена) для базы-корреспондента (приемника).RegistrationRules.xml — правила регистрации изменений.Если внести изменения в ПКО (включая обработчик Поля поиска) и обновить файлы только на стороне источника, база-приемник при загрузке сообщения обмена с FTP продолжит использовать старые правила из своего кеша или встроенные типовые макеты. В результате логика поиска и создания объектов на стороне приемника выполняется по старому алгоритму.
Чтобы измененные правила поиска корректно отрабатывали в обоих узлах обмена при работе через FTP, разберем порядок действий:
ExchangeRules.xml из источника должен соответствовать файлу CorrespondentExchangeRules.xml на стороне приемника.Перейдем в раздел Администрирование -> Синхронизация данных -> Настройки синхронизации. Выберем нужный узел обмена, нажмем Загрузить правила, выберем переключатель Из файла и укажем новый архив с правилами.
Откроем приемник и перейдем в аналогичную настройку синхронизации данных. Выполним загрузку правил из того же файла через пункт Загрузить правила.
Соответствие объектов информационных баз и удалим некорректные записи для проблемных контрагентов.После синхронного обновления правил в обеих базах обработчик Поля поиска начнет отрабатывать одинаково как при прямом подключении, так и при файловом обмене через FTP.