CRM
Банковские реквизиты
Работа с банковскими реквизитами CRM в коробочном Bitrix24: получение, добавление, изменение, удаление и связь с реквизитами.
Главная особенность: банковские реквизиты привязаны не к компании напрямую, а к записи реквизитов. Поэтому сначала обычно ищем реквизиты компании, а уже потом банковские реквизиты по ID этих реквизитов.
Общее понимание
Банковские реквизиты — отдельная часть CRM-реквизитов. Они нужны для счетов, документов, печатных форм и обмена с внешними системами.
Где хранятся банковские реквизиты
Для работы с банковскими реквизитами в коробочном PHP используется
\Bitrix\Crm\EntityBankDetail. Через него можно получать, добавлять,
изменять и удалять банковские реквизиты.
В отличие от обычных полей компании, банковский реквизит имеет свой собственный
ID. Для изменения или удаления нужен именно ID банковского реквизита.
Связь с реквизитами
Поле ENTITY_ID у банковского реквизита — это ID реквизита. Это не ID
компании и не ID контакта.
| Уровень | Класс | Ключевые поля |
|---|---|---|
| Компания | CCrmCompany или ORM CRM | ID |
| Реквизиты | \Bitrix\Crm\EntityRequisite | ID, ENTITY_ID, ENTITY_TYPE_ID |
| Банковские реквизиты | \Bitrix\Crm\EntityBankDetail | ID, ENTITY_ID |
Основные операции
Базовая работа: получить список, добавить, изменить или удалить банковские реквизиты.
Получить банковские реквизиты
Пример получает реквизиты компании, затем получает банковские реквизиты по ID этих реквизитов.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\EntityRequisite;
use Bitrix\Crm\EntityBankDetail;
const CRM_COMPANY_TYPE_ID = \CCrmOwnerType::Company;
Loader::includeModule('crm');
/**
* Получает ID реквизитов компании.
*/
function fetchCompanyRequisiteIds(int $company_id): array
{
$requisite_ids = [];
$entity_requisite = new EntityRequisite();
$requisite_result = $entity_requisite->getList([
'select' => [
'ID',
],
'filter' => [
'=ENTITY_TYPE_ID' => CRM_COMPANY_TYPE_ID,
'=ENTITY_ID' => $company_id,
],
'order' => [
'SORT' => 'ASC',
'ID' => 'ASC',
],
]);
while ($requisite = $requisite_result->fetch()) {
$requisite_ids[] = (int) $requisite['ID'];
}
return $requisite_ids;
}
/**
* Получает банковские реквизиты по ID реквизитов.
*/
function fetchBankDetailsByRequisiteIds(array $requisite_ids): array
{
if (empty($requisite_ids)) {
return [];
}
$bank_details = [];
$entity_bank_detail = new EntityBankDetail();
$bank_detail_result = $entity_bank_detail->getList([
'select' => [
'ID',
'ENTITY_ID',
'COUNTRY_ID',
'NAME',
'RQ_BANK_NAME',
'RQ_BIK',
'RQ_ACC_NUM',
'RQ_COR_ACC_NUM',
'RQ_SWIFT',
'RQ_IBAN',
'COMMENTS',
],
'filter' => [
'@ENTITY_ID' => $requisite_ids,
],
'order' => [
'ENTITY_ID' => 'ASC',
'SORT' => 'ASC',
'ID' => 'ASC',
],
]);
while ($bank_detail = $bank_detail_result->fetch()) {
$bank_details[] = $bank_detail;
}
return $bank_details;
}
$requisite_ids = fetchCompanyRequisiteIds($company_id);
$bank_details = fetchBankDetailsByRequisiteIds($requisite_ids);
print_r($bank_details);
Если известен ID конкретного реквизита, можно сразу фильтровать банковские реквизиты по
ENTITY_ID.
Добавить банковские реквизиты
При добавлении банковских реквизитов в ENTITY_ID передаётся ID реквизита.
COUNTRY_ID лучше проверить на своём портале и в своём шаблоне реквизитов.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\EntityBankDetail;
const BANK_DETAIL_COUNTRY_ID = 1;
const BANK_DETAIL_SORT = 500;
Loader::includeModule('crm');
/**
* Подготавливает поля банковских реквизитов.
*/
function buildBankDetailFields(
int $requisite_id,
string $bank_name,
string $bik,
string $account_number,
string $correspondent_account_number
): array {
return [
'ENTITY_ID' => $requisite_id,
'COUNTRY_ID' => BANK_DETAIL_COUNTRY_ID,
'NAME' => $bank_name,
'ACTIVE' => 'Y',
'SORT' => BANK_DETAIL_SORT,
'RQ_BANK_NAME' => $bank_name,
'RQ_BIK' => $bik,
'RQ_ACC_NUM' => $account_number,
'RQ_COR_ACC_NUM' => $correspondent_account_number,
];
}
/**
* Добавляет банковские реквизиты.
*/
function addBankDetail(array $bank_detail_fields): int
{
$entity_bank_detail = new EntityBankDetail();
return (int) $entity_bank_detail->add($bank_detail_fields);
}
$bank_detail_fields = buildBankDetailFields(
$requisite_id,
$bank_name,
$bik,
$account_number,
$correspondent_account_number
);
$bank_detail_id = addBankDetail($bank_detail_fields);
if ($bank_detail_id > 0) {
// Банковские реквизиты добавлены
} else {
// Банковские реквизиты не добавлены
}
Для российских банков обычно важны RQ_BANK_NAME, RQ_BIK,
RQ_ACC_NUM и RQ_COR_ACC_NUM. Для международных реквизитов
могут понадобиться RQ_SWIFT и RQ_IBAN.
Изменить банковские реквизиты
Для изменения нужен ID банковского реквизита, а не ID компании и не ID реквизита.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\EntityBankDetail;
Loader::includeModule('crm');
/**
* Изменяет основные банковские поля.
*/
function updateBankDetail(
int $bank_detail_id,
string $bank_name,
string $bik,
string $account_number,
string $correspondent_account_number
): bool {
$entity_bank_detail = new EntityBankDetail();
$is_updated = $entity_bank_detail->update(
$bank_detail_id,
[
'NAME' => $bank_name,
'RQ_BANK_NAME' => $bank_name,
'RQ_BIK' => $bik,
'RQ_ACC_NUM' => $account_number,
'RQ_COR_ACC_NUM' => $correspondent_account_number,
]
);
return (bool) $is_updated;
}
$is_updated = updateBankDetail(
$bank_detail_id,
$bank_name,
$bik,
$account_number,
$correspondent_account_number
);
if ($is_updated) {
// Банковские реквизиты обновлены
} else {
// Банковские реквизиты не обновлены
} Удалить банковские реквизиты
Удаление выполняется по ID банковского реквизита. Перед удалением лучше получить запись и проверить, к какому реквизиту она относится.
<?php
use Bitrix\Main\Loader;
use Bitrix\Crm\EntityBankDetail;
Loader::includeModule('crm');
/**
* Получает банковские реквизиты по ID.
*/
function fetchBankDetailById(int $bank_detail_id): ?array
{
$entity_bank_detail = new EntityBankDetail();
$bank_detail = $entity_bank_detail->getById($bank_detail_id);
return is_array($bank_detail) ? $bank_detail : null;
}
/**
* Удаляет банковские реквизиты.
*/
function deleteBankDetail(int $bank_detail_id): bool
{
$entity_bank_detail = new EntityBankDetail();
return (bool) $entity_bank_detail->delete($bank_detail_id);
}
$bank_detail = fetchBankDetailById($bank_detail_id);
if ($bank_detail !== null) {
$is_deleted = deleteBankDetail($bank_detail_id);
}
Если нужно удалить все банковские реквизиты конкретного реквизита, можно смотреть в
сторону deleteByEntity(), но для разовых правок безопаснее удалять по
конкретному ID.
Поля
Набор полей зависит от страны и шаблона реквизитов, но базовые поля встречаются почти всегда.
Основные поля
| Поле | Что означает |
|---|---|
ID | ID банковского реквизита. |
ENTITY_ID | ID реквизита, к которому привязан банковский реквизит. |
COUNTRY_ID | Страна набора банковских полей. |
NAME | Название записи банковских реквизитов. |
ACTIVE | Флаг активности. В текущей модели может фактически ни на что не влиять. |
SORT | Сортировка, если у реквизита несколько банковских счетов. |
COMMENTS | Комментарий. |
Поля для российских банков
| Поле | Что означает |
|---|---|
RQ_BANK_NAME | Название банка. |
RQ_BANK_ADDR | Адрес банка. |
RQ_BIK | БИК. |
RQ_ACC_NUM | Расчётный счёт. |
RQ_COR_ACC_NUM | Корреспондентский счёт. |
RQ_ACC_CURRENCY | Валюта счёта. |
RQ_SWIFT | SWIFT, если используется. |
RQ_IBAN | IBAN, если используется. |
Перед массовым заполнением лучше открыть карточку реквизитов на портале и проверить, какие именно поля используются в текущем шаблоне и стране.