В Битрикс24 часто работают с несколькими сделками в CRM одновременно. Данные дублируются, а связь между ними держится на людях: менеджер вручную ищет сделку, сверяет данные — и только потом продолжает работу.
Это медленно, может произойти ошибка и плохо масштабируется. Один неверный ID — и заявка уходит не в ту воронку, не тому ответственному, с неверными данными.
Решение — короткий PHP-код в активити «PHP-код» бизнес-процесса: по трём параметрам автоматически находит нужную сделку и сохраняет её ID в переменную `FoundDealId` для дальнейших шагов автоматизации.
// Коды полей СДЕЛКИ
$dealFieldSellerId = 'UF_CRM_.....'; // Поле 1
$dealFieldCategory = 'UF_CRM_.....'; // Поле 2 (тип CRM)
$dealFieldDirection = 'CATEGORY_ID'; // Направление (системное)
// Значения для поиска
$variable1 = $this->GetVariable('Ваша_переменная1');
$variable2 = $this->GetVariable('Ваша_переменная2');
$directionId = 0; // ID направления сделки — подставьте цифру
$resultVariable = 'FoundDealId';
if (!\Bitrix\Main\Loader::includeModule('crm')) {
$this->WriteToTrackingService('Ошибка: модуль CRM не подключён');
return;
}
$filter = ['CHECK_PERMISSIONS' => 'N'];
if ($variable1 !== '' && $variable1 !== null) {
$filter[$dealFieldVariable1] = $variable1;
}
if ($variable2 !== '' && $variable2 !== null) {
$filter[$dealFieldVariable2] = $variable2;
}
if ((int)$directionId > 0) {
$filter[$dealFieldDirection] = (int)$directionId;
}
$foundId = 0;
$res = \CCrmDeal::GetListEx(['ID' => 'DESC'], $filter, false, ['nTopCount' => 1], ['ID']);
if ($row = $res->Fetch()) {
$foundId = (int)$row['ID'];
}
$this->SetVariable($resultVariable, $foundId > 0 ? $foundId : null);
$this->WriteToTrackingService($foundId > 0 ? 'Найдена сделка ID=' . $foundId : 'Сделка не найдена');Преимущества решения
1. Быстрое внедрение
Не нужно разрабатывать и публиковать приложение в Маркетплейсе. Код копируется в шаблон бизнес-процесса и работает сразу — на коробочной версии Битрикс24.
2. Гибкая настройка под бизнес
Коды полей, имена переменных и ID направления меняются в нескольких строках. Скрипт легко адаптировать под другую воронку, другие UF-поля или другой смарт-процесс.
3. Точная привязка «один к одному»
Поиск по трём параметрам снижает риск привязать заявку к чужой сделке. Особенно важно, когда в CRM тысячи сделок и одинаковые поставщики работают в разных категориях и воронках.
4. Прозрачность для администратора
Скрипт пишет в журнал БП, какие значения использовались при поиске. Если что-то пошло не так — не нужно гадать, достаточно открыть историю процесса.
5. Основа для дальнейшей автоматизации
После получения `FoundDealId` можно без участия человека:
— обновить поля сделки;
— сменить стадию;
— создать задачу ответственному;
— запустить вложенный бизнес-процесс;
— отправить уведомление.
6. Экономия на разработке
Вместо кастомного модуля или интеграции — готовый рабочий блок, который решает конкретную задачу «найти и связать». Для многих компаний этого достаточно на годы.