
У клиента был настроен смарт процесс, который запускался из сделки. По каким-то причинам использовалась не стандартная привязка сделки и смарт-процесса, а было создано пользовательское поле Сделка типа Привязка к элементу CRM. Элемент смарт-процесса создавался отдельным процессом в БП этого типа смарт-процессов (Настройки —> Роботы и бизнес-процессы —> Бизнес-процессы —> Смарт-процесс —> Список шаблонов).
Содержание
Задача:
- Изменить привязку на стандартную при создании элемента смарт-процесса;
- Связать уже созданные элементы со сделками.
Стандартная привязка позволяет создавать сколько угодно элементов смарт-процесса, привязанных к сделке.
Создание элемента смарт-процесса
Для начала надо убедиться, что в смарт-процессе включена связь со сделкой. Переходим в смарт-процесс, нажимаем на шестеренку справа вверху, Настройки смарт-процесса.

Откройте связи, там включите переключатель Привязать к этому смарт-процессу и выберите ниже сделку.

Далее меняем в бизнес-процессе стадии сделки запуск бп создания элемента смарт-процесса на действие Создать элемент CRM.

Это действие уже связывает элемент смарт-процесса со сделкой, т.к. при создании есть соответствующее поле. Первый пункт задачи выполнен.
Привязка существующих элементов к сделкам
Я решила, что самый простой способ – SQL запрос. Рассмотрим таблицы, которые отвечают за смарт-процессы и связи:
- b_crm_dynamic_items_191 — таблица с элементами смарт-процесса типа 191. На каждый тип смарт-процесса своя таблица.
b_crm_entity_relation — таблица связей сущностей.
b_crm_deal — таблица сделок.
В таблице b_crm_dynamic_items_191 было пользовательское поле со сделкой, им можно воспользоваться для привязки.

Но ID сделки записывалось в поле с префиксом D_, поэтому от него сначала нужно избавиться.
Есть два варианта выполнить запрос:
- Подключить любую удобную программу для работы с SQL к базе данных;
- Выполнить запрос в административной панели Настройки —> SQL запрос.
Т.к. это разовое мероприятие, то быстрее и проще 2й вариант.

Выполняем запрос для удаления префикса:
функция SUBSTRING возвращает строку по заданным параметрам.
- Строка, которую надо модифицировать
- Символ, с которого читать строку
- Количество символов, которые нужно возвратить (т.к. нам нужна вся строка с 3го символа, то можно этот параметр опустить)
UPDATE b_crm_dynamic_items_191
SET UF_CRM_1_1632041040 = SUBSTRING(UF_CRM_1_1632041040, 3)
where UF_CRM_1_1632041040 like 'D_%'

Введите запрос и нажмите Выполнить запрос. Если все успешно, то внизу появится соответствующее сообщение. В результате мы получим ID сделок без префиксов. Это не повлияет на отображение сделки в карточке элемента смарт-процесса.

Теперь в таблицах есть общее значение, по которому их можно сопоставить. Чтобы появилась связь между сделками и элементами смарт-процесса, надо добавить записи в таблицу b_crm_entity_relation. Эта таблица имеет следующие поля:
- SRC_ENTITY_TYPE_ID — тип сущности (2 — сделка),
- SRC_ENTITY_ID — ID сущности,
- DST_ENTITY_TYPE_ID — тип смарт-процесса,
- DST_ENTITY_ID — ID смарт-процесса,
- RELATION_TYPE — тип связи.
Соответственно нам нужно добавить записи в таком же виде.

Сформируем запрос, который найдет все непривязанные пары:
SELECT
'2',
D.ID as deal,
'191',
S.ID as smart,
'BINDING'
FROM b_crm_dynamic_items_191 AS S, b_crm_deal AS D
where D.ID=S.UF_CRM_1_1632041040 and D.CATEGORY_ID=4 and (D.ID not in (select SRC_ENTITY_ID from b_crm_entity_relation where SRC_ENTITY_TYPE_ID=2))
order by D.ID desc
Т.к. мне нужна определенная воронка сделок, то я добавила фильтрацию по категории сделки CATEGORY_ID. Когда мы убедились, что данные верны, можно добавлять их в таблицу связей.
INSERT INTO b_crm_entity_relation (SRC_ENTITY_TYPE_ID,SRC_ENTITY_ID,DST_ENTITY_TYPE_ID,DST_ENTITY_ID,RELATION_TYPE)
SELECT
'2',
D.ID as deal,
'191',
S.ID as smart,
'BINDING'
FROM b_crm_dynamic_items_191 AS S, b_crm_deal AS D
where D.ID=S.UF_CRM_1_1632041040 and D.CATEGORY_ID=4 and (D.ID not in (select SRC_ENTITY_ID from b_crm_entity_relation where SRC_ENTITY_TYPE_ID=2))
order by D.ID desc
Готово!