Налаштування об'єднання дублікатів у CRM Бітрікс24

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування об'єднання дублікатів у CRM Бітрікс24
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування об'єднання дублікатів у CRM Бітрікс24

Знайти дублікати — половина роботи. Друга половина — об'єднати їх так, щоб не втратити історію дзвінків, угоди, завдання та кастомні поля. Саме тут більшість компаній стикаються з реальними проблемами: після злиття зникають активності, неправильно вибирається «головна» картка, пов'язані угоди переносяться не туди.

Механізм об'єднання у Бітрікс24 працює через клас CCrmEntityMerger — він послідовно переносить пов'язані об'єкти, а потім видаляє поглинені записи. Важливо розуміти порядок операцій, щоб не отримати «битих» зв'язків.

Ручне об'єднання через інтерфейс

Базовий сценарій: CRM → Контакти → Знайти дублікати → вибрати групу → Об'єднати. Система показує картки поруч і пропонує вибрати, яке значення кожного поля залишити в результуючому записі.

Підводні камені ручного режиму:

  • При об'єднанні компаній пов'язані контакти автоматично переносяться до «головної» — перевірте, що вибрали правильну.
  • Файли з поглинених карток переносяться, але їхній вихідний шлях у b_disk_object змінюється — якщо є зовнішні посилання на файли, вони зламаються.
  • Користувацькі поля типу «список» об'єднуються лише якщо увімкнено опцію «множинний вибір»; одиночні значення беруться з головного запису, решта втрачаються.

Налаштування правил злиття

У розділі CRM → Налаштування → Дублікати → Правила об'єднання задається логіка вибору значень при конфлікті полів:

Правило Поведінка
Головний запис Береться значення з вибраної «головної» картки
Більш заповнений Береться непорожнє значення; при конфлікті — з головного
Об'єднання Застосовується для множинних полів (телефони, email)
Останній за датою Береться значення із запису з пізнішою датою зміни

Для більшості завдань оптимально: ключові ідентифікатори (код ЄДРПОУ, телефон, email) — «об'єднання»; статусні поля (відповідальний, стадія) — «головний запис»; текстові примітки — «більш заповнений».

Програмне об'єднання через API

При масовому очищенні бази ручний режим не підходить. REST-метод для злиття контактів:

// Об'єднання: запис 1001 поглинає 1002 і 1003
$response = CRest::call('crm.contact.merge', [
    'id'      => 1001,
    'victims' => [1002, 1003],
    'fields'  => [
        'PHONE'          => 'merge',    // об'єднати телефони
        'EMAIL'          => 'merge',    // об'єднати email
        'ASSIGNED_BY_ID' => 'primary',  // відповідальний з головного
    ],
]);

Для компаній — аналогічно crm.company.merge. Метод синхронний; при об'єднанні понад 5 поглинених записів може спрацювати таймаут — розбивайте на пари.

Усередині Бітрікса на рівні PHP (коробочна версія):

$merger = new CCrmEntityMerger(CCrmOwnerType::Contact);
$merger->Merge(
    1001,          // ID головного запису
    [1002, 1003],  // жертви
    $fields,       // правила полів
    $errorMessage
);

Перенесення пов'язаних об'єктів

Це критична частина, яку легко пропустити. При злитті автоматично переносяться:

  • Угоди (поле CONTACT_ID оновлюється)
  • Активності: дзвінки, листи, зустрічі з таблиці b_crm_activity
  • Завдання через зв'язок b_tasks_member
  • Часова шкала (b_crm_timeline)

Не переносяться автоматично:

  • Зв'язки через користувацькі блоки смарт-процесів (SPA) — потрібен окремий скрипт оновлення
  • Зовнішні зв'язки зі сторонніх інтеграцій (дані в кастомних таблицях)
  • Чати у Відкритих лініях — історія прив'язана до лінії, а не до контакту

Для смарт-процесів оновлення зв'язків потрібно виконувати вручну через crm.item.update з новим contactId.

Відкат об'єднання

Вбудованого відкату немає. Після злиття поглинені записи позначаються як видалені (прапорець DELETED=Y у b_crm_contact), але фізично залишаються в БД кілька днів до очищення кошика.

Часове вікно для відновлення: CRM → Налаштування → Кошик — поглинені картки потрапляють туди і доступні для відновлення протягом 30 днів (налаштовується). Після відновлення зв'язки з головним записом не відновлюються автоматично — їх доведеться перепризначити вручну.

Перед запуском масового злиття завжди робіть резервну копію таблиць b_crm_contact, b_crm_company, b_crm_deal та таблиць активностей.