В базах контрагентов у крупных компаний, как правило, количество карточек контрагентов доходит до нескольких сотен тысяч.
Отсюда практически у всех компаний есть потребность время от времени производить процедуру дедупликации (избавления от дубликатов данных) клиентской базы. Дубликаты в базе могли появиться по разным причинам и разными способами. Но цель одна — максимально быстро, качественно и безболезненно избавиться от дублирующих копий и сделать клиентскую базу максимально «чистой».
В нашей практике мы очень часто от клиентов получали такой запрос, но решения не было.
Да, в штатном функционале Битрикс24 есть возможность объединять дубликаты контрагентов (подробное описание предоставлено по ссылке — https://helpdesk.bitrix24.ru/open/10649014/), но данный функционал учитывает далеко не все сценарии и потребности клиентов.
В связи с этим мы разработали модуль поиска и объединения дубликатов для коробочных порталов Битрикс24. Модуль включает в себя следующие возможности, которых нет в штатном функционале Б24:
Отметим сразу, что:
Концепция модуля заточена под сценарий, когда необходимо найти дубликаты, произвести их объединение и перенести все связанные объекты, но при этом обогащение карточек оригиналов пользовательскими полями не требуется. Это обстоятельство обусловлено запросами от клиентов. В большинстве случаев достаточно только произвести объединение и перенести все связанные объекты.

Раздел «Основные настройки» включает в себя следующее:
В разделе «CRM контакты» задаем параметры для поиска дубликатов на портале.
В настройках отбора/поиска можно задать фактически любые комбинации по условию поиска:

и по типу пользовательского поля/реквизита:

Приведем несколько простых примеров (комбинаций), по которым можно получить результаты по проверке дубликатов на портале:

В процессе запуска задания на поиск дубликатов также создается одиночный агент, который автоматически самоудаляется в конце операции. Агент осуществляет функцию блокировки запуска поиска либо объединения дубликатов для предотвращения наслаивания процессов.
Функции агента:

Мониторинг производительности: таблица b_crm_duplicates:

В данной таблице фиксируется:
В случае необходимости можно визуально сравнить/проверить отработку поиска дубликатов, а также экспортировать результаты в таблицу excel.
Для удобства отображения прогресса на странице поиска дубликатов используется специальный компонент, который обращается к таблицам и агентам, чтобы 1) определить, запущена ли какая-то из операций, 2) либо чтобы отобразить прогресс в режиме реального времени.

Результат поиска дубликатов выглядит следующим образом:

При нажатии на кнопку «Запустить объединение дубликатов» мы проверяем существование специального агента для объединения на портале.
То есть агент создается только один раз, а далее он просто деактивируется на время поиска либо паузы операций.

Запустившийся агент получает данные из таблицы b_crm_duplicates и производит объединение записей по родителю (id_parent). Следовательно, все найденные дубликаты будут удалены с портала, а связанные с ними объекты/сущности перенесены в карточку родителя.
Следует отметить, что при запуске агента, процесс запускается только для одного родителя. При этом агент запускается каждые 10 секунд.
По нашим наблюдениям, данный временной интервал является оптимальным для того, чтобы успеть удалить карточки всех дубликатов, а также перенести все связанные сущности в карточку основного контакта.

В результате, после окончания процедуры, объединение дубликатов и всех связанных сущностей из карточек дубликатов, а также «дела» (звонки, комментарии, встречи, письма и пр.) будут перенесены в карточку родителя (основного контакта).

Результаты объединения можно посмотреть в отдельной таблице базы данных b_crm_duplicates_saved

В данной таблице фиксируется:
В случае необходимости можно из публичной части портала найти данного контрагента в клиентской базе и убедиться в корректности отработки процедуры объединения дубликатов. Также данные из таблицы можно экспортировать в excel.
В рамках данного решения заложен функционал, который предоставляет возможность передавать/выгружать данные о результатах произведенной дедупликации в сторонние сервисы.
Для понимания приведем пример из практики:
У клиента на портале реализована интеграция с 1С с разными клиентскими базами. Соответственно, из каждой базы выгружаются контрагенты. Каждый контрагент обладает уникальным GUID (идентификатором).
В разных базах 1С GUID может быть уникальным, но при этом клиент может являться дубликатом. Этому могут служить разные причины: ошибки при заведении контрагентов на стороне 1С, специфика рода деятельности компании и др.
Через модуль контроля дубликатов мы находим дубликаты по комбинации соответствующих реквизитов, например: фамилия + имя + отчество + дата рождения. Производим объединение найденных дубликатов.
Выгружаем во внешнюю базу данных SQL информацию о найденных и удаленных дубликатах на портале. При этом передаем информацию по GUID клиента и ID уникального объекта на портале, по которым уже 1С, в свою очередь, может произвести процедуру дедупликации в соответствующих базах.

Сценариев и кейсов обмена с внешними сервисами может быть достаточно много. Мы готовы адаптировать и дорабатывать такого рода «связку» и с другими информационными системами/ресурсами, но как правило (в большинстве случаев) это всё же типовой обмен с базами данных SQL, из которых поступают данные для обмена/выгрузки из разных баз 1С.
Реализовали нужное решение, которое подойдет многим, кто использует коробочную версию Битрикс24, хочет быстро провести дедупликацию контактов и перенести все связанные сущности в карточку основного контакта.
Обращайтесь к нам: с удовольствием проконсультируем, обсудим детали и адаптируем/доработаем функционал решения под потребности вашего проекта. Оставить заявку можно на нашем сайте.