Почему не отрабатывают изменения правил обмена КД 2.1 при обмене через FTP и как настроить правила поиска

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При настройке или доработке механизмов синхронизации на базе Библиотеки стандартных подсистем (БСП) между типовыми конфигурациями (например, «Управление торговлей 11» и «Бухгалтерия предприятия 3.0») разработчики часто сталкиваются с ситуацией: логика обработчиков в Конвертации данных 2.1 (КД 2.1) успешно работает при прямом COM-подключении или в тестовой базе, но совершенно игнорируется при файловом обмене или выгрузке через FTP. Разберем причину этого поведения и выясним, как правильно организовывать поиск объектов и загрузку правил обмена.

Анализ проблемы: логика обработчика «Поля поиска»

Рассмотрим типовую задачу: при выгрузке контрагентов необходимо исключить сопоставление по пустым значениям ИНН и КПП, чтобы не сопоставлять всех новых элементов источника с одним и тем же контрагентом без ИНН в приемнике. Для этого в ПКО Контрагенты дорабатывается обработчик Поля поиска.

Проанализируем пример кода, который часто используется для динамической смены полей поиска:


Если НомерВариантаПоиска = 1 Тогда
    Если ЗначениеЗаполнено(СокрЛП(СвойстваПоиска.Получить("ИНН"))) Тогда
        СтрокаИменСвойствПоиска = "ИНН, КПП";
    КонецЕсли;
КонецЕсли;

При использовании данного алгоритма важно учесть особенности работы платформы и Конвертации данных:

  1. В соответствие СвойстваПоиска попадают только те реквизиты, для которых в ПКС (Правилах конвертации свойств) установлен флаг Поиск. Если для реквизита ИНН флаг поиска отключен, то обращение к нему вернет пустое значение.
  2. Переменная НомерВариантаПоиска принимает последовательные значения от 1 до 10. Если на определенном шаге строка поиска формируется по пустому ИНН (например, СтрокаИменСвойствПоиска = "ИНН, КПП" при незаполненных реквизитах), платформа попытается найти объект с пустым ИНН/КПП и сопоставит его с первым попавшимся элементом в базе-приемнике.
  3. Чтобы избежать некорректного поиска при пустом ИНН, необходимо либо перенаправлять алгоритм на следующий вариант поиска (например, по наименованию), либо устанавливать флаг ПрекратитьПоиск = Ложь.

Почему изменения в правилах не работают при обмене через FTP

Выясним главную причину, по которой правила, исправленные в Конвертации данных, прекращают отрабатывать при переходе на FTP-канал. При прямом подключении (COM-соединение) информационная база-источник сама управляет процессом записи данных в приемник и считывает правила из своего единого комплекта.

Однако при асинхронном обмене (через FTP, каталог или электронную почту) процесс разделяется на два независимых этапа:

  1. Выгрузка из источника (УТ) в файл обмена.
  2. Загрузка из файла приемником (БП).

В типовых решениях подсистема синхронизации хранит правила обмена в регистре сведений Правила для обмена данными локально в каждой информационном базе. Комплект правил обмена для интеграции представляет собой zip-архив, содержащий три ключевых файла:

  1. ExchangeRules.xml — правила конвертации объектов для базы-источника.
  2. CorrespondentExchangeRules.xml — правила конвертации (загрузки/обратного обмена) для базы-корреспондента (приемника).
  3. RegistrationRules.xml — правила регистрации изменений.

Если внести изменения в ПКО (включая обработчик Поля поиска) и обновить файлы только на стороне источника, база-приемник при загрузке сообщения обмена с FTP продолжит использовать старые правила из своего кеша или встроенные типовые макеты. В результате логика поиска и создания объектов на стороне приемника выполняется по старому алгоритму.

Пошаговый порядок решения проблемы

Чтобы измененные правила поиска корректно отрабатывали в обоих узлах обмена при работе через FTP, разберем порядок действий:

  1. Выгрузим отредактированные правила из конфигурации «Конвертация данных». При сохранении правил формируется архив, содержащий обновленный файл правил обмена.
  2. Сформируем комплект правил для корреспондента. Файл ExchangeRules.xml из источника должен соответствовать файлу CorrespondentExchangeRules.xml на стороне приемника.
  3. Загрузим комплект правил в базе-источнике (УТ):

    Перейдем в раздел Администрирование -> Синхронизация данных -> Настройки синхронизации. Выберем нужный узел обмена, нажмем Загрузить правила, выберем переключатель Из файла и укажем новый архив с правилами.

  4. Загрузим комплект правил в базе-приемнике (БП):

    Откроем приемник и перейдем в аналогичную настройку синхронизации данных. Выполним загрузку правил из того же файла через пункт Загрузить правила.

  5. Очистим устаревшие ссылки сопоставления. Если объекты уже успели неверно сопоставиться, откроем регистр сведений Соответствие объектов информационных баз и удалим некорректные записи для проблемных контрагентов.

После синхронного обновления правил в обеих базах обработчик Поля поиска начнет отрабатывать одинаково как при прямом подключении, так и при файловом обмене через FTP.

← На главную