Введение
При разработке на коробочной версии Битрикс24 часто возникает необходимость программно получить данные компании по её идентификатору. Это может потребоваться при выводе информации о компании на сайте, в отчётах, при интеграции с внешними системами или для последующей обработки данных. Основным и наиболее простым методом для получения информации о компании является CCrmCompany::GetByID.
Важное отличие от CCrmCompany::GetList
Ключевая особенность метода CCrmCompany::GetByID: в отличие от CCrmCompany::GetList, данный метод возвращает все поля компании, включая пользовательские поля (UF_CRM_*). Это делает его незаменимым, когда вам нужно получить значения пользовательских полей компании.
| Метод | Пользовательские поля | Скорость | Тип результата |
|---|---|---|---|
CCrmCompany::GetByID
|
✅ Возвращает | Быстрый (один запрос) | Одна запись |
CCrmCompany::GetList
|
❌ Не возвращает | Средний (можно с пагинацией) | Выборка записей |
Поэтому для получения полной информации о компании со всеми пользовательскими полями всегда используйте CCrmCompany::GetByID, а не GetList.
Область применения и ключесущности
Метод CCrmCompany::GetByID используется для получения полной информации о компании по её ID. Понимание этой связки необходимо при:
- Выводе данных компании на сайте — отображение названия, реквизитов, контактов
- Создании связанных сущностей — при добавлении сделки или лида, привязанного к компании
- Интеграции с внешними системами — выгрузка данных о контрагентах
- Отчётах и дашбордах — получение названия компании для отображения в отчётах
- Обработчиках событий — при изменении или создании компании
- Чтении пользовательских полей компании — в отличие от GetList, этот метод их возвращает
Ключевые сущности:
| Таблица / Класс | Описание |
|---|---|
b_crm_company
|
Таблица с данными компаний в CRM |
CCrmCompany
|
Класс для работы с компаниями |
CCrmOwnerType
|
Константы типов владельцев (Company = 4) |
CCrmCompany::GetByID()
|
Метод получения компании по ID |
CCrmCompany::GetList()
|
Метод получения списка компаний (НЕ возвращает пользовательские поля) |
Параметры метода CCrmCompany::GetByID
Метод имеет следующую сигнатуру:
phppublic static function GetByID($ID, $bCheckPermissions = true)
Параметр $ID (идентификатор компании)
Числовой идентификатор компании, информацию о которой необходимо получить.
Параметр $bCheckPermissions (проверка прав)
Логический параметр, определяющий, нужно ли проверять права доступа текущего пользователя:
| Значение | Описание |
|---|---|
true (по умолчанию)
|
Проверяются права доступа. Если у пользователя нет прав на чтение компании, метод вернёт false.
|
false
|
Проверка прав не выполняется. Метод вернёт данные компании независимо от прав текущего пользователя. |
Возвращаемое значение
Метод возвращает ассоциативный массив с данными компании или false, если компания не найдена или нет прав доступа.
Основные поля массива:
| Поле | Описание |
|---|---|
ID
|
Уникальный идентификатор компании |
TITLE
|
Название компании |
COMPANY_TYPE
|
Тип компании (клиент, партнёр, конкурент и т.д.) |
INDUSTRY
|
Сфера деятельности |
EMPLOYEES
|
Количество сотрудников |
ADDRESS
|
Адрес |
ADDRESS_LEGAL
|
Юридический адрес |
BANKING_DETAILS
|
Банковские реквизиты |
PHONE
|
Телефон |
EMAIL
|
|
WEB
|
Веб-сайт |
COMMENTS
|
Комментарий |
ASSIGNED_BY_ID
|
ID ответственного пользователя |
CREATED_BY_ID
|
ID создателя |
MODIFY_BY_ID
|
ID последнего изменившего |
DATE_CREATE
|
Дата создания |
DATE_MODIFY
|
Дата изменения |
OPENED
|
Открытая компания (видна всем) |
IS_MY_COMPANY
|
Флаг "Моя компания" |
ORIGINATOR_ID
|
Внешний источник |
ORIGIN_ID
|
ID во внешней системе |
UF_CRM_*
|
Пользовательские поля (ключевая особенность метода!) |
Практические примеры
Пример 1. Базовое получение компании по ID (с пользовательскими полями)
php$companyId = 123; // ID компании
if (\Bitrix\Main\Loader::includeModule('crm')) {
// Метод возвращает ВСЕ поля, включая пользовательские UF_CRM_*
$companyData = CCrmCompany::GetByID($companyId, false);
echo "<pre>";
print_r($companyData);
echo "</pre>";
// Пользовательские поля доступны напрямую
if (!empty($companyData['UF_CRM_12345678'])) {
echo "Значение пользовательского поля: " . $companyData['UF_CRM_12345678'];
}
}
Пример 2. Сравнение GetByID и GetList (пользовательские поля)
php// ❌ CCrmCompany::GetList НЕ возвращает пользовательские поля $dbList = CCrmCompany::GetList([], ['ID' => 123], ['ID', 'TITLE']); $companyFromList = $dbList->Fetch(); // В $companyFromList НЕТ полей UF_CRM_* // ✅ CCrmCompany::GetByID возвращает ВСЕ поля, включая UF_CRM_* $companyFromGetByID = CCrmCompany::GetByID(123, false); // В $companyFromGetByID ЕСТЬ все пользовательские поля UF_CRM_* echo "GetList: " . print_r($companyFromList, true); echo "GetByID: " . print_r($companyFromGetByID, true);
Пример 3. Получение компании с выводом пользовательских полей
phpfunction getCompanyWithUserFields(int $companyId, bool $skipPermissions = false): ?array
{
if (!\Bitrix\Main\Loader::includeModule('crm')) {
return null;
}
// Только GetByID возвращает пользовательские поля!
$company = \CCrmCompany::GetByID($companyId, !$skipPermissions);
if (!$company) {
return null;
}
// Собираем все пользовательские поля (начинаются с UF_CRM)
$userFields = [];
foreach ($company as $key => $value) {
if (strpos($key, 'UF_CRM') === 0) {
$userFields[$key] = $value;
}
}
return [
'ID' => $company['ID'],
'TITLE' => $company['TITLE'],
'PHONE' => $company['PHONE'],
'EMAIL' => $company['EMAIL'],
'USER_FIELDS' => $userFields // ← только GetByID может это вернуть
];
}
// Использование
$company = getCompanyWithUserFields(123, true);
echo '<pre>'; print_r($company); echo '</pre>';
Пример 4. Чтение конкретного пользовательского поля компании
phpfunction getCompanyUserFieldValue(int $companyId, string $userFieldName, bool $skipPermissions = false)
{
if (!\Bitrix\Main\Loader::includeModule('crm')) {
return null;
}
// GetByID - единственный способ получить пользовательские поля
$company = \CCrmCompany::GetByID($companyId, !$skipPermissions);
if (!$company) {
return null;
}
return $company[$userFieldName] ?? null;
}
// Использование
$sourceValue = getCompanyUserFieldValue(123, 'UF_CRM_1617204193', true);
echo "Значение пользовательского поля: " . $sourceValue;
Пример 5. Получение компании без проверки прав
php// Получаем данные компании из-под администратора (без проверки прав)
// Это также даст доступ ко всем пользовательским полям
$companyData = CCrmCompany::GetByID($companyId, false);
if ($companyData) {
echo "Название: " . $companyData['TITLE'] . "<br>";
echo "Адрес: " . $companyData['ADDRESS'] . "<br>";
// Читаем пользовательские поля
if ($companyData['UF_CRM_MY_FIELD']) {
echo "Доп. информация: " . $companyData['UF_CRM_MY_FIELD'] . "<br>";
}
}
Пример 6. Получение компании с контактами и пользовательскими полями
phpfunction getCompanyFullInfo(int $companyId): ?array
{
if (!\Bitrix\Main\Loader::includeModule('crm')) {
return null;
}
// GetByID возвращает все поля, включая пользовательские
$company = \CCrmCompany::GetByID($companyId, false);
if (!$company) {
return null;
}
// Получаем контакты компании
$contacts = [];
$dbContacts = \CCrmContact::GetList(
['LAST_NAME' => 'ASC'],
['COMPANY_ID' => $companyId],
false,
false,
['ID', 'NAME', 'LAST_NAME', 'PHONE', 'EMAIL']
);
while ($contact = $dbContacts->Fetch()) {
$contacts[] = $contact;
}
return [
'COMPANY' => $company, // содержит все поля + UF_CRM_*
'CONTACTS' => $contacts
];
}
// Использование
$fullInfo = getCompanyFullInfo(123);
echo '<pre>'; print_r($fullInfo); echo '</pre>';
Сравнительная таблица: GetByID vs GetList
| Характеристика | CCrmCompany::GetByID | CCrmCompany::GetList |
|---|---|---|
| Пользовательские поля (UF_CRM_*) | ✅ Да | ❌ Нет |
| Количество записей | 1 | Много (можно ограничить) |
| Скорость при одной записи | Быстрый | Медленнее (из-за построения запроса) |
| Необходимость перебора | Нет (Fetch не нужен) | Да (цикл while) |
| Фильтрация | Только по ID | Любые поля |
| Сортировка | Не применима | Да |
| Пагинация | Не применима | Да |
Особенности и рекомендации
-
Пользовательские поля возвращаются только в GetByID: Это ключевое отличие метода. Если вам нужно прочитать значения пользовательских полей компании (UF_CRM_*), используйте именно
GetByID, а неGetList. -
Обязательная проверка существования поля: Перед обращением к пользовательскому полю проверяйте его наличие через
isset()или!empty(). -
Формат пользовательских полей: В зависимости от типа поля, значение может быть строкой, числом, массивом (для множественных списков) или сериализованными данными.
-
Второй параметр
$bCheckPermissions: При передачеfalseметод вернёт данные даже если у текущего пользователя нет прав на просмотр компании. Это полезно для служебных скриптов и агентов. -
Кеширование: При частых запросах одной и той же компании рекомендуется кешировать результат, так как запрос идёт напрямую в базу данных.
-
Поля
PHONE,EMAIL,WEB: Возвращаются в мульти-формате (сериализованная строка). Для удобного парсинга используйтеCCrmFieldMulti::GetEntityFields().
Альтернативные методы
| Метод | Описание |
|---|---|
CCrmCompany::GetByID()
|
✅ Основной метод. Возвращает пользовательские поля. |
CCrmCompany::GetList()
|
❌ Не возвращает пользовательские поля. Только для списков. |
CCrmCompany::GetListEx()
|
Расширенная версия GetList, но тоже не возвращает UF_CRM_* |
\Bitrix\Crm\Service\Container::getInstance()->getFactory()
|
D7 способ, возвращает объект Item с пользовательскими полями |
Заключение
CCrmCompany::GetByID — это основной и наиболее удобный метод для получения полной информации о компании в коробочной версии Битрикс24. Его ключевое преимущество перед CCrmCompany::GetList — возможность получения всех пользовательских полей (UF_CRM_*). Если вам нужно прочитать значения пользовательских полей компании, вы обязаны использовать CCrmCompany::GetByID, так как GetList и GetListEx их не возвращают. Понимание этого различия критически важно для разработчиков, работающих с пользовательскими полями CRM.
