Open sergey-s-betke opened 2 years ago
Решение будет не столь простым.
При разработке алгоритма следует учесть следующие сценарии:
в одном из узлов уже есть объекты, сопоставленные сразу нескольким объектам в других узлах (несколько записей в регистре соответствия, при этом в другом узле для каждой записи имеется объект
в одном из узлов уже есть объекты, для которых имеем несколько записей в регистре соответствия, при этом в другом узле только для одной из записей существует объект
в одном узле имеем дубли, и каждому из них сопоставлены разные объекты в другом узле
Корректный алгоритм удаления дублей видится следующим образом:
для третьего сценария:
для первого и второго сценария:
Требуемая возможность
Обработка поиска и удаления дублей не должна создавать ситуации, когда при обмене мы будем получать дубли в синхронизируемой базе. Сейчас это так. Причина: обработка не удаляет записи в регистре соответствия объектов, а заменяет ссылку на удаляемый дубль в его записях. В итоге, для оригинала мы получаем несколько записей, которые ссылаются на разные объекты в синхронизируемой базе.
Предлагаю либо блокировать удаление объекта, если у него есть записи в указанном регистре, либо удалять записи в указанном регистре для дубля, а не изменять их на оригинал.
Заодно стоит посмотреть и на обработку удаления помеченных объектов. Она должна удалять записи и в указанном регистре.
Текущее поведение
Обработка поиска и удаления дублей не удаляет записи в регистре соответствия объектов, а заменяет ссылку на удаляемый дубль ссылкой на оригинал в его записях. В итоге, для оригинала мы получаем несколько записей, которые ссылаются на разные объекты в синхронизируемой базе. Что приводит к созданию дублей на стороне синхронизуемой информационной базы.
Возможное решение