Введение
При разработке на «коробочной» версии Битрикс24 часто возникает задача программного получения значений различных справочников CRM — статусов лидов, стадий сделок, типов компаний, источников и других. Универсальным и основным инструментом для этого является статический метод CCrmStatus::GetList. Он предоставляет прямой доступ к таблице b_crm_status, где хранятся все справочные значения системы, и является базовым для множества операций выбора в CRM-модуле.
Область применения и ключевые сущности
Метод используется для получения списка статусов в следующих контекстах:
- Статусы лидов (
STATUS) — определяют этап обработки лида: новый, в работе, конвертирован, нерелевантный и др.. Семантика статуса (новый, в работе, закрыт) хранится в полеSTATUS_SEMANTIC_ID. - Стадии сделок (
DEAL_STAGE) — этапы воронки продаж, отображаемые в канбане. Для сделок с несколькими направлениями идентификатор имеет видDEAL_STAGE_XX, гдеXX— ID направления. - Источники лидов/сделок (
SOURCE) — каналы привлечения клиентов. - Типы компаний (
COMPANY_TYPE) — классификация компаний (клиент, партнер, конкурент и т.д.). - Типы контактов (
CONTACT_TYPE) — аналогичная классификация для контактов. - Типы сделок (
DEAL_TYPE) — классификация сделок (продажа, услуга и т.п.). - Обращения (
HONORIFIC) — варианты обращения в карточке лида/контакта. - Количество сотрудников (
EMPLOYEES) — диапазоны численности персонала компании. - Сфера деятельности (
INDUSTRY) — отрасль компании-клиента.
Также метод применим к стадиям смарт-процессов (DYNAMIC_{entityTypeId}_STAGE_{categoryId}) и другим справочникам, которые могут быть расширены в проекте.
Параметры метода
Метод имеет следующую сигнатуру:
phppublic static function GetList($arSort = array(), $arFilter = array())
Параметр $arSort (сортировка)
Определяет порядок сортировки элементов справочника. Представляет собой ассоциативный массив, где ключ — поле сортировки, значение — направление (ASC или DESC). Поддерживаемые ключи:
ID— уникальный идентификатор записиENTITY_ID— символьный код справочникаSTATUS_ID— символьный код значенияNAME— название значенияSORT— порядок сортировки (используется чаще всего)SYSTEM— флаг системного значения (Y/N)CATEGORY_ID— идентификатор категорииSEMANTICS— семантика статуса
Если параметр не задан, используется сортировка по CS.ID DESC.
Параметр $arFilter (фильтрация)
Позволяет отфильтровать результаты по одному или нескольким критериям. Поддерживаемые ключи:
ID— фильтр по уникальному идентификаторуENTITY_ID— фильтр по типу справочника (основной и наиболее часто используемый критерий)STATUS_ID— фильтр по символьному коду значенияNAME— фильтр по названию (с поддержкой поисковых шаблонов)SORT— фильтр по значению сортировкиSYSTEM— фильтр по системному флагу (YилиN)CATEGORY_ID— фильтр по идентификатору категорииSEMANTICS— фильтр по семантике
Возвращаемое значение
Метод возвращает объект результата запроса CDBResult, который содержит записи таблицы b_crm_status. Перебор результатов осуществляется через метод fetch() в цикле while.
Практические примеры
Пример 1. Получение всех статусов лида
php// Подключаем модуль CRM
if (\Bitrix\Main\Loader::includeModule('crm')) {
$leadStatuses = array();
$dbResult = CCrmStatus::GetList(
array('SORT' => 'ASC'), // сортировка по порядку
array('ENTITY_ID' => 'STATUS') // фильтр по типу справочника
);
while ($status = $dbResult->fetch()) {
$leadStatuses[$status['STATUS_ID']] = $status['NAME'];
}
// Результат: ['NEW' => 'Новый', 'IN_PROCESS' => 'В работе', ...]
print_r($leadStatuses);
}
Пример 2. Получение стадий сделок
php$dealStages = array();
$dbResult = CCrmStatus::GetList(
array('SORT' => 'ASC'),
array('ENTITY_ID' => 'DEAL_STAGE')
);
while ($stage = $dbResult->fetch()) {
$dealStages[$stage['STATUS_ID']] = array(
'NAME' => $stage['NAME'],
'SORT' => $stage['SORT'],
'COLOR' => $stage['COLOR'] ?? '' // цвет в канбане
);
}
Пример 3. Получение источников с полным набором полей
php$sources = array();
$dbResult = CCrmStatus::GetList(
array('SORT' => 'ASC'),
array('ENTITY_ID' => 'SOURCE')
);
while ($source = $dbResult->fetch()) {
$sources[$source['STATUS_ID']] = array(
'NAME' => $source['NAME'],
'NAME_INIT' => $source['NAME_INIT'], // исходное название
'SYSTEM' => $source['SYSTEM'], // системный ли статус
'SORT' => $source['SORT']
);
}
Пример 4. Сложный фильтр: все системные статусы сделок
php$systemDealStages = array();
$dbResult = CCrmStatus::GetList(
array('SORT' => 'ASC'),
array(
'ENTITY_ID' => 'DEAL_STAGE',
'SYSTEM' => 'Y' // только системные статусы
)
);
while ($stage = $dbResult->fetch()) {
$systemDealStages[$stage['STATUS_ID']] = $stage['NAME'];
}
Пример 5. Получение конкретного статуса по ID
php$specificStatus = null;
$dbResult = CCrmStatus::GetList(
array(),
array(
'ENTITY_ID' => 'STATUS',
'STATUS_ID' => 'CONVERTED' // статус "Конвертирован"
)
);
if ($status = $dbResult->fetch()) {
$specificStatus = $status['NAME'];
echo "Название статуса: " . $specificStatus;
}
Пример 6. Фильтрация по нескольким критериям
php$filteredStatuses = array();
$dbResult = CCrmStatus::GetList(
array('SORT' => 'ASC'),
array(
'ENTITY_ID' => 'DEAL_STAGE',
'SYSTEM' => 'N', // только пользовательские
'!STATUS_ID' => 'WON' // исключая успешную стадию
)
);
while ($stage = $dbResult->fetch()) {
$filteredStatuses[$stage['STATUS_ID']] = $stage['NAME'];
}
Альтернативные методы
Для работы со справочниками также доступны:
CCrmStatus::GetStatusList($entityId)— возвращает массивSTATUS_ID => NAMEдля указанного справочника.CCrmStatus::GetStatusListEx($entityId)— возвращает расширенный массив с дополнительными полями (SORT,SYSTEM,COLORи др.).CCrmStatus::GetStatus($entityId, $statusId)— получает конкретную запись по идентификатору сущности и статуса с кешированием на уровне статического свойства.CCrmStatus::GetEntityTypes()— возвращает описание всех типов справочников.
Метод GetStatusListEx предпочтительнее, если требуется получить не только названия, но и мета-информацию, так как он инкапсулирует логику формирования справочников и может использовать кеширование.
Особенности и рекомендации
-
Обязательное подключение модуля: Перед вызовом любого метода CRM необходимо подключить модуль через
CModule::IncludeModule('crm')или\Bitrix\Main\Loader::includeModule('crm'). -
Структура таблицы b_crm_status: Основные поля:
ID,ENTITY_ID(код справочника),STATUS_ID(код значения),NAME(название),SORT(порядок),SYSTEM(флаг системности). ПолеNAME_INITхранит исходное системное название и может использоваться для сброса изменений. -
Порядок сортировки: Рекомендуется сортировать по полю
SORT, так как это поле отражает порядок, заданный пользователем в настройках CRM. -
Кеширование: При частых вызовах одного и того же справочника внутри одного запроса рекомендуется использовать кеширование результатов на уровне приложения.
-
Производительность:
CCrmStatus::GetListвыполняет прямой запрос к базе данных без встроенного кеширования. При интенсивном использовании данных справочников рассмотрите кеширование через статические переменные или механизмы кеширования Битрикс. -
Работа со смарт-процессами: Для смарт-процессов идентификатор
ENTITY_IDформируется по шаблонуDYNAMIC_{entityTypeId}_STAGE_{categoryId}. ЗначениеentityTypeIdможно получить из адресной строки при просмотре списка элементов смарт-процесса.
Заключение
CCrmStatus::GetList — это основной инструмент для программного доступа к справочникам CRM в коробочной версии Битрикс24. Он обеспечивает гибкую фильтрацию и сортировку, позволяя получать любые справочные данные: от статусов лидов до стадий сделок и типов компаний. Понимание этого метода необходимо каждому разработчику, работающему с CRM-модулем Битрикс.
