← Назад к справке

CRM

Банковские реквизиты

Работа с банковскими реквизитами CRM в коробочном Bitrix24: получение, добавление, изменение, удаление и связь с реквизитами.

Главная особенность: банковские реквизиты привязаны не к компании напрямую, а к записи реквизитов. Поэтому сначала обычно ищем реквизиты компании, а уже потом банковские реквизиты по ID этих реквизитов.

Общее понимание

Банковские реквизиты — отдельная часть CRM-реквизитов. Они нужны для счетов, документов, печатных форм и обмена с внешними системами.

Где хранятся банковские реквизиты

Для работы с банковскими реквизитами в коробочном PHP используется \Bitrix\Crm\EntityBankDetail. Через него можно получать, добавлять, изменять и удалять банковские реквизиты.

В отличие от обычных полей компании, банковский реквизит имеет свой собственный ID. Для изменения или удаления нужен именно 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, если используется.

Перед массовым заполнением лучше открыть карточку реквизитов на портале и проверить, какие именно поля используются в текущем шаблоне и стране.

Источники