Описание link
Реквизиты в Битрикс24 — это юридическая и контактная информация компании: название, ИНН, КПП, адреса и банковские данные. Данный раздел содержит примеры PHP-кода для работы с реквизитами компаний. Вы можете использовать эти примеры для автоматического заполнения реквизитов, синхронизации с внешними системами и генерации документов в бизнес-процессах.
Реквизиты хранятся отдельно от компании и могут быть нескольких типов: организация, ИП, физическое лицо.
Примеры использования link
Пример 1: Получение реквизитов компании link
Этот пример показывает, как получить список реквизитов компании.
- Установлен лимит: не больше 500 реквизитов (лимит можно изменить в строке 28-31)
use Bitrix\Crm\EntityRequisite;
use Bitrix\Main\Loader;
Loader::includeModule('crm');
// ВХОДНОЙ ПАРАМЕТР: ID компании
$companyId = "{{CompanyID}}";
// Валидация входных данных
if (empty($companyId)) {
$this->WriteToTrackingService("[ERROR] Не передан ID компании");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "INPUT_ERROR");
$rootActivity->SetVariable("ErrorMessage", "Отсутствует обязательный параметр CompanyID");
return;
}
$companyId = (int)$companyId;
try {
if (!Loader::includeModule('crm')) {
$this->WriteToTrackingService("[ERROR] Модуль CRM не установлен");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "MODULE_ERROR");
return;
}
// ПОЛУЧЕНИЕ ДАННЫХ: Выборка реквизитов компании
$requisite = new EntityRequisite();
$requisiteList = $requisite->getList([
'filter' => [
'ENTITY_ID' => $companyId,
'ENTITY_TYPE_ID' => \CCrmOwnerType::Company
],
'select' => ['ID', 'PRESET_ID', 'RQ_COMPANY_NAME']
])->fetchAll();
if (empty($requisiteList)) {
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("RequisiteIDs", array());
$rootActivity->SetVariable("FoundCount", 0);
$rootActivity->SetVariable("Status", "NOT_FOUND");
return;
}
$requisiteIDs = array();
foreach ($requisiteList as $req) {
$requisiteIDs[] = $req['ID'];
}
// ВЫХОДНЫЕ ПАРАМЕТРЫ: Массив ID реквизитов и статус
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("RequisiteIDs", $requisiteIDs);
$rootActivity->SetVariable("FoundCount", count($requisiteIDs));
$rootActivity->SetVariable("Status", "SUCCESS");
} catch (\Exception $e) {
$this->WriteToTrackingService("[CRITICAL] Ошибка получения реквизитов: " . $e->getMessage());
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "DB_ERROR");
$rootActivity->SetVariable("ErrorMessage", $e->getMessage());
}
Входные параметры: link
| Параметр | Тип | Описание | Обязательный |
|---|
| CompanyID | int/string | ID компании | Да |
Выходные переменные: link
| Переменная | Тип | Описание |
|---|
| RequisiteIDs | array | Массив ID реквизитов компании |
| FoundCount | int | Количество найденных реквизитов |
| Status | string | Статус выполнения: SUCCESS, NOT_FOUND, INPUT_ERROR, MODULE_ERROR, DB_ERROR |
| ErrorMessage | string | Описание ошибки (заполняется при ошибках) |
Возможные ошибки: link
| Статус | Причина | Решение |
|---|
| INPUT_ERROR | Не передан CompanyID | Передать ID компании |
| MODULE_ERROR | Модуль CRM не установлен | Проверить установку модуля |
| NOT_FOUND | Реквизиты не найдены | Проверить наличие реквизитов у компании |
| DB_ERROR | Ошибка при работе с базой данных | Проверить логи системы |
Рекомендации по использованию: link
- Всегда проверяйте переменную
Status в следующих шагах БП - У одной компании может быть несколько реквизитов разных типов
- PRESET_ID определяет тип реквизита (1-Организация, 3-ИП, 5-Физлицо)
- Для получения полной информации добавьте в select нужные поля (RQ_INN, RQ_KPP и т.д.)
Пример 2: Добавление или обновление реквизитов компании link
Этот пример демонстрирует добавление новых реквизитов или обновление существующих.
use Bitrix\Crm\EntityRequisite;
use Bitrix\Main\Loader;
Loader::includeModule('crm');
// ВХОДНЫЕ ПАРАМЕТРЫ: ID компании и данные реквизитов
$companyId = "{{CompanyID}}";
$companyName = "{{CompanyName}}";
$presetId = "{{PresetID}}"; // 1-Организация, 3-ИП, 5-Физлицо
$inn = "{{INN}}";
// Валидация входных данных
if (empty($companyId) || empty($companyName) || empty($presetId)) {
$this->WriteToTrackingService("[ERROR] Не переданы обязательные параметры");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "INPUT_ERROR");
$rootActivity->SetVariable("ErrorMessage", "Отсутствуют обязательные параметры: CompanyID, CompanyName или PresetID");
return;
}
$companyId = (int)$companyId;
$presetId = (int)$presetId;
// Дополнительная валидация PresetID
if (!in_array($presetId, [1, 3, 5])) {
$this->WriteToTrackingService("[ERROR] Некорректный PresetID. Допустимы: 1, 3, 5");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "INPUT_ERROR");
$rootActivity->SetVariable("ErrorMessage", "Некорректный тип реквизита");
return;
}
try {
if (!Loader::includeModule('crm')) {
$this->WriteToTrackingService("[ERROR] Модуль CRM не установлен");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "MODULE_ERROR");
return;
}
$requisite = new EntityRequisite();
// СЛОЖНАЯ ЛОГИКА: Проверка существующих реквизитов
$existingRequisites = $requisite->getList([
'filter' => [
'ENTITY_ID' => $companyId,
'ENTITY_TYPE_ID' => \CCrmOwnerType::Company,
'PRESET_ID' => $presetId
],
'select' => ['ID']
])->fetchAll();
// Подготовка полей
$fields = array(
'ENTITY_ID' => $companyId,
'ENTITY_TYPE_ID' => \CCrmOwnerType::Company,
'PRESET_ID' => $presetId,
'NAME' => $companyName,
'SORT' => 500,
'ACTIVE' => 'Y',
'RQ_COMPANY_NAME' => $companyName,
'RQ_COMPANY_FULL_NAME' => $companyName
);
// Добавление ИНН если передан
if (!empty($inn)) {
$fields['RQ_INN'] = $inn;
}
// СОЗДАНИЕ ИЛИ ОБНОВЛЕНИЕ: Логика выбора операции
if (!empty($existingRequisites)) {
// Обновление существующего реквизита
$requisiteId = $existingRequisites[0]['ID'];
$result = $requisite->update($requisiteId, $fields);
$operation = "UPDATE";
} else {
// Добавление нового реквизита
$result = $requisite->add($fields);
$requisiteId = $result->getId();
$operation = "CREATE";
}
if (!$result->isSuccess()) {
$errors = $result->getErrorMessages();
$this->WriteToTrackingService("[ERROR] Ошибка операции: " . implode(", ", $errors));
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "OPERATION_ERROR");
$rootActivity->SetVariable("ErrorMessage", implode(", ", $errors));
return;
}
// ВЫХОДНЫЕ ПАРАМЕТРЫ: ID реквизита и статус
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("RequisiteID", $requisiteId);
$rootActivity->SetVariable("Operation", $operation);
$rootActivity->SetVariable("Status", "SUCCESS");
$this->WriteToTrackingService("[SUCCESS] Реквизит " . $operation . ". ID: " . $requisiteId);
} catch (\Exception $e) {
$this->WriteToTrackingService("[CRITICAL] Ошибка работы с реквизитами: " . $e->getMessage());
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "DB_ERROR");
$rootActivity->SetVariable("ErrorMessage", $e->getMessage());
}
Входные параметры: link
| Параметр | Тип | Описание | Обязательный |
|---|
| CompanyID | int/string | ID компании | Да |
| CompanyName | string | Название компании | Да |
| PresetID | int/string | ID шаблона реквизитов (1-Организация, 3-ИП, 5-Физлицо). Как узнать? | Да |
| INN | string | ИНН компании | Нет |
Выходные переменные: link
| Переменная | Тип | Описание |
|---|
| RequisiteID | int | ID реквизита (созданного или обновленного) |
| Operation | string | Тип операции: CREATE (создан) или UPDATE (обновлен) |
| Status | string | Статус выполнения операции |
| ErrorMessage | string | Описание ошибки |
Возможные ошибки: link
| Статус | Причина | Решение |
|---|
| INPUT_ERROR | Не переданы обязательные параметры или некорректный PresetID | Передать все параметры с корректным PresetID |
| MODULE_ERROR | Модуль CRM не установлен | Проверить установку модуля |
| OPERATION_ERROR | Ошибка при создании/обновлении реквизита | Проверить корректность данных |
| DB_ERROR | Ошибка при работе с базой данных | Проверить логи системы |
Типы реквизитов (PRESET_ID): link
| ID | Тип | Описание |
|---|
| 1 | Организация | Юридическое лицо (ООО, ЗАО и т.д.) |
| 3 | ИП | Индивидуальный предприниматель |
| 5 | Физлицо | Физическое лицо |
Рекомендации по использованию: link
- Код автоматически определяет: создавать новый реквизит или обновлять существующий
- Проверяйте переменную
Operation для понимания выполненного действия - ИНН является опциональным параметром, но рекомендуется для организаций
- Используйте константы для PresetID для избежания ошибок
Пример 3: Production-ready работа с реквизитами и адресами link
Продвинутый пример создания/обновления реквизитов с добавлением юридического адреса.
use Bitrix\Crm\EntityRequisite;
use Bitrix\Crm\EntityAddress;
use Bitrix\Main\Loader;
Loader::includeModule('crm');
// ВХОДНЫЕ ПАРАМЕТРЫ: Полные данные реквизитов и адреса
$companyId = "{{CompanyID}}";
$companyName = "{{CompanyName}}";
$presetId = "{{PresetID}}"; // 1-Организация, 3-ИП, 5-Физлицо
$inn = "{{INN}}";
$kpp = "{{KPP}}";
$addressStreet = "{{AddressStreet}}";
$addressCity = "{{AddressCity}}";
$addressPostalCode = "{{AddressPostalCode}}";
$addressCountry = "{{AddressCountry}}";
// Валидация обязательных параметров
if (empty($companyId) || empty($companyName) || empty($presetId)) {
$this->WriteToTrackingService("[ERROR] Не переданы обязательные параметры");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "INPUT_ERROR");
$rootActivity->SetVariable("ErrorMessage", "Отсутствуют обязательные параметры");
return;
}
$companyId = (int)$companyId;
$presetId = (int)$presetId;
// Валидация типа реквизита
if (!in_array($presetId, [1, 3, 5])) {
$this->WriteToTrackingService("[ERROR] Некорректный PresetID");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "INPUT_ERROR");
return;
}
// Валидация адреса (если хотя бы одно поле адреса передано)
$hasAddress = !empty($addressStreet) || !empty($addressCity) || !empty($addressPostalCode);
if ($hasAddress && empty($addressCountry)) {
$this->WriteToTrackingService("[WARNING] Адрес передан без страны, используется значение по умолчанию");
$addressCountry = "Россия";
}
try {
if (!Loader::includeModule('crm')) {
$this->WriteToTrackingService("[ERROR] Модуль CRM не установлен");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "MODULE_ERROR");
return;
}
$requisite = new EntityRequisite();
// СЛОЖНАЯ ЛОГИКА: Поиск существующих реквизитов
$existingRequisites = $requisite->getList([
'filter' => [
'ENTITY_ID' => $companyId,
'ENTITY_TYPE_ID' => \CCrmOwnerType::Company,
'PRESET_ID' => $presetId
],
'select' => ['ID']
])->fetchAll();
// ПОДГОТОВКА ДАННЫХ: Формирование полей реквизита
$fields = array(
'ENTITY_ID' => $companyId,
'ENTITY_TYPE_ID' => \CCrmOwnerType::Company,
'PRESET_ID' => $presetId,
'NAME' => $companyName,
'SORT' => 500,
'ACTIVE' => 'Y',
'RQ_COMPANY_NAME' => $companyName,
'RQ_COMPANY_FULL_NAME' => $companyName
);
// Добавление опциональных полей
if (!empty($inn)) {
$fields['RQ_INN'] = $inn;
}
if (!empty($kpp) && $presetId == 1) { // КПП только для организаций
$fields['RQ_KPP'] = $kpp;
}
// СОЗДАНИЕ/ОБНОВЛЕНИЕ реквизита
if (!empty($existingRequisites)) {
$requisiteId = $existingRequisites[0]['ID'];
$result = $requisite->update($requisiteId, $fields);
$operation = "UPDATE";
} else {
$result = $requisite->add($fields);
$requisiteId = $result->getId();
$operation = "CREATE";
}
if (!$result->isSuccess()) {
$errors = $result->getErrorMessages();
$this->WriteToTrackingService("[ERROR] Ошибка операции с реквизитом: " . implode(", ", $errors));
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "OPERATION_ERROR");
$rootActivity->SetVariable("ErrorMessage", implode(", ", $errors));
return;
}
// РАБОТА С АДРЕСОМ: Регистрация юридического адреса если данные переданы
if ($hasAddress && $requisiteId > 0) {
$address = new EntityAddress();
$addressFields = array(
"ADDRESS_1" => $addressStreet,
"CITY" => $addressCity,
"POSTAL_CODE" => $addressPostalCode,
"COUNTRY" => $addressCountry
);
// Регистрация адреса: тип 8 (реквизит), тип адреса 6 (юридический)
$addressResult = $address->register(8, $requisiteId, 6, $addressFields);
if (!$addressResult) {
$this->WriteToTrackingService("[WARNING] Ошибка добавления адреса к реквизиту");
}
}
// ВЫХОДНЫЕ ПАРАМЕТРЫ: Результаты операции
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("RequisiteID", $requisiteId);
$rootActivity->SetVariable("Operation", $operation);
$rootActivity->SetVariable("AddressAdded", $hasAddress);
$rootActivity->SetVariable("Status", "SUCCESS");
$this->WriteToTrackingService("[SUCCESS] Реквизит " . $operation . ". ID: " . $requisiteId .
($hasAddress ? " с адресом" : ""));
} catch (\Exception $e) {
$this->WriteToTrackingService("[CRITICAL] Ошибка работы с реквизитами: " . $e->getMessage());
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "DB_ERROR");
$rootActivity->SetVariable("ErrorMessage", $e->getMessage());
}
Входные параметры: link
| Параметр | Тип | Описание | Обязательный |
|---|
| CompanyID | int/string | ID компании | Да |
| CompanyName | string | Название компании | Да |
| PresetID | int/string | ID шаблона реквизитов (1, 3, 5). Как узнать? | Да |
| INN | string | ИНН компании. Список полей | Нет |
| KPP | string | КПП компании (только для организаций). Список полей | Нет |
| AddressStreet | string | Улица, дом | Нет |
| AddressCity | string | Город | Нет |
| AddressPostalCode | string | Почтовый индекс | Нет |
| AddressCountry | string | Страна | Нет* |
*Если передан адрес, страна обязательна (по умолчанию “Россия”)
Выходные переменные: link
| Переменная | Тип | Описание |
|---|
| RequisiteID | int | ID реквизита |
| Operation | string | Тип операции: CREATE или UPDATE |
| AddressAdded | boolean | Был ли добавлен адрес |
| Status | string | Статус выполнения операции |
| ErrorMessage | string | Описание ошибки (если есть) |
Возможные ошибки: link
| Статус | Причина | Решение |
|---|
| INPUT_ERROR | Не переданы обязательные параметры или некорректный PresetID | Проверить все параметры |
| MODULE_ERROR | Модуль CRM не установлен | Проверить установку модуля |
| OPERATION_ERROR | Ошибка при создании/обновлении реквизита | Проверить корректность данных |
| DB_ERROR | Ошибка при работе с базой данных | Проверить логи системы |
Рекомендации по использованию: link
- КПП применяется только для организаций (PresetID = 1)
- Адрес регистрируется отдельно после создания/обновления реквизита
- Параметры адреса опциональны, но если передаются - нужна страна
- Переменная
AddressAdded показывает, был ли обработан адрес - Юридический адрес имеет тип 6 в системе Битрикс24
Фича примера кода №3: link
Данный пример демонстрирует production-ready подход с:
- ✅ Полной валидацией всех параметров (обязательные + опциональные)
- ✅ Умной обработкой адреса (только если данные переданы)
- ✅ Автоматической установкой значений по умолчанию (страна)
- ✅ Условным добавлением КПП (только для организаций)
- ✅ Детальным логированием всех операций
- ✅ Раздельной обработкой реквизитов и адресов
Этот код можно использовать для автоматической синхронизации реквизитов из внешних систем.
Пример 4: Удаление всех реквизитов компании link
Этот пример демонстрирует удаление всех реквизитов компании с предварительной проверкой их наличия.
use Bitrix\Crm\EntityRequisite;
use Bitrix\Main\Loader;
Loader::includeModule('crm');
// ВХОДНОЙ ПАРАМЕТР: ID компании
$companyId = "{{CompanyID}}";
// Валидация входных данных
if (empty($companyId)) {
$this->WriteToTrackingService("[ERROR] Не передан ID компании");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "INPUT_ERROR");
$rootActivity->SetVariable("ErrorMessage", "Отсутствует обязательный параметр CompanyID");
return;
}
$companyId = (int)$companyId;
try {
if (!Loader::includeModule('crm')) {
$this->WriteToTrackingService("[ERROR] Модуль CRM не установлен");
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "MODULE_ERROR");
return;
}
// ПОЛУЧЕНИЕ ДАННЫХ: Поиск всех реквизитов компании
$requisite = new EntityRequisite();
$requisiteList = $requisite->getList([
'filter' => [
'ENTITY_ID' => $companyId,
'ENTITY_TYPE_ID' => \CCrmOwnerType::Company
],
'select' => ['ID']
])->fetchAll();
// Проверка наличия реквизитов
if (empty($requisiteList)) {
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("DeletedCount", 0);
$rootActivity->SetVariable("Status", "NOT_FOUND");
$this->WriteToTrackingService("[INFO] У компании нет реквизитов для удаления");
return;
}
// УДАЛЕНИЕ: Удаление всех найденных реквизитов
$deletedCount = 0;
$errors = array();
foreach ($requisiteList as $req) {
$requisiteId = $req['ID'];
$deleteResult = $requisite->delete($requisiteId);
if ($deleteResult->isSuccess()) {
$deletedCount++;
} else {
$errors[] = "ID " . $requisiteId . ": " . implode(", ", $deleteResult->getErrorMessages());
}
}
// Проверка результатов удаления
if (!empty($errors)) {
$this->WriteToTrackingService("[WARNING] Ошибки при удалении некоторых реквизитов: " . implode("; ", $errors));
}
// ВЫХОДНЫЕ ПАРАМЕТРЫ: Статистика удаления
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("DeletedCount", $deletedCount);
$rootActivity->SetVariable("TotalFound", count($requisiteList));
$rootActivity->SetVariable("Status", $deletedCount > 0 ? "SUCCESS" : "DELETE_ERROR");
if (!empty($errors)) {
$rootActivity->SetVariable("ErrorMessage", implode("; ", $errors));
}
$this->WriteToTrackingService("[SUCCESS] Удалено реквизитов: " . $deletedCount . " из " . count($requisiteList));
} catch (\Exception $e) {
$this->WriteToTrackingService("[CRITICAL] Ошибка при удалении реквизитов: " . $e->getMessage());
$rootActivity = $this->GetRootActivity();
$rootActivity->SetVariable("Status", "DB_ERROR");
$rootActivity->SetVariable("ErrorMessage", $e->getMessage());
$rootActivity->SetVariable("DeletedCount", 0);
}
Входные параметры: link
| Параметр | Тип | Описание | Обязательный |
|---|
| CompanyID | int/string | ID компании | Да |
Выходные переменные: link
| Переменная | Тип | Описание |
|---|
| DeletedCount | int | Количество успешно удалённых реквизитов |
| TotalFound | int | Общее количество найденных реквизитов |
| Status | string | Статус выполнения операции |
| ErrorMessage | string | Описание ошибок (если были проблемы при удалении) |
Возможные ошибки: link
| Статус | Причина | Решение |
|---|
| INPUT_ERROR | Не передан CompanyID | Передать ID компании |
| MODULE_ERROR | Модуль CRM не установлен | Проверить установку модуля |
| NOT_FOUND | У компании нет реквизитов | Операция пропускается |
| DELETE_ERROR | Все реквизиты не удалось удалить | Проверить права доступа и логи |
| DB_ERROR | Ошибка при работе с базой данных | Проверить логи системы |
Рекомендации по использованию: link
- ⚠️ Операция необратима - используйте с осторожностью
- Проверяйте переменные
DeletedCount и TotalFound для контроля результата - При частичном удалении (DeletedCount < TotalFound) проверьте ErrorMessage
- Удаление реквизитов не удаляет саму компанию
- Рекомендуется использовать этот код в связке с бэкапом данных
- Удаление также удаляет связанные адреса
Общие рекомендации по использованию link
- Валидация: Всегда проверяйте обязательные параметры и тип реквизита (PresetID)
- Статусы: Проверяйте переменную
Status в следующих шагах БП - Типы реквизитов: Используйте правильный PresetID (1, 3, 5) в зависимости от типа компании
- КПП: Применяется только для организаций (PresetID = 1)
- Адреса: Регистрируются отдельно через EntityAddress после создания реквизита
- Обновление: Код автоматически определяет создание или обновление реквизита
- Безопасность: Всегда приводите ID к типу int перед использованием
Связанные статьи link