Сегодня я расскажу как работать с реквизитами компании в CRM Битрикс24.
В 16.х версии Битрикса24 в модуле CRM адреса компании и контактов начали храниться в реквизитах.

Предания гласят, что в ранних версиях Битрикса24 <16.х адреса хранились в карточке компании: фактический и юридические адреса. Их можно было легко вывести с помощью метода CCrmCompany::GetByID($companyId), который возвращал такой массив
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
array (size=57) // Много полей 'ADDRESS' => null 'ADDRESS_2' => null 'ADDRESS_CITY' => null 'ADDRESS_POSTAL_CODE' => null 'ADDRESS_REGION' => null 'ADDRESS_PROVINCE' => null 'ADDRESS_COUNTRY' => null 'ADDRESS_COUNTRY_CODE' => null 'ADDRESS_LEGAL' => null 'REG_ADDRESS' => null 'REG_ADDRESS_2' => null 'REG_ADDRESS_CITY' => null 'REG_ADDRESS_POSTAL_CODE' => null 'REG_ADDRESS_REGION' => null 'REG_ADDRESS_PROVINCE' => null 'REG_ADDRESS_COUNTRY' => null 'REG_ADDRESS_COUNTRY_CODE' => null |
Сейчас адреса перенесены в реквизиты и методом CCrmCompany::GetByID($companyId) уже нельзя делать выборку адресов. Как видите в массиве все по нулям.
Как же получить реквизиты компании?
Для этого нужен класс \Bitrix\Crm\EntityRequisite().
Пример для компании:
1 2 3 4 5 6 7 8 |
$requisite = new \Bitrix\Crm\EntityRequisite(); $rs = $requisite->getList([ "filter" => ["ENTITY_ID" => 1, "ENTITY_TYPE_ID" => 4, ] ]); $reqData = $rs->fetchAll(); |
Создаем экземпляр обьекта и через метод getList делаем выборку. Про фильтрацию поговорим подробнее.
- «ENTITY_ID» — ид сущности. В нашем случае ид компании, который равен 1. Сущности могут быть разными. Какими?
- За это отвечает ENTITY_TYPE_ID. Откуда взялась цифра 4? Это означает, что мы ищем тип «Компания». Со всеми типами можно познаскомиться в классе
1234567891011121314151617class CCrmOwnerType{const Undefined = 0;const Lead = 1; // refresh FirstOwnerType and LastOwnerType constantsconst Deal = 2;const Contact = 3;const Company = 4;const Invoice = 5;const Activity = 6;const Quote = 7;const Requisite = 8;const DealCategory = 9;const System = 10; // refresh FirstOwnerType and LastOwnerType constantsconst FirstOwnerType = 1;const LastOwnerType = 10;
То есть предыдущий пример мы могли записать как
1 2 3 4 5 6 7 |
$requisite = new \Bitrix\Crm\EntityRequisite(); $rs = $requisite->getList([ "filter" => ["ENTITY_ID" => 1, "ENTITY_TYPE_ID" => CCrmOwnerType::Company, ] ]); |
Такая запись более читабельна и предпочтительней. Идем дальше…
Запись $reqData = $rs->fetchAll(); может вернуть не одну строку, так как в компанию могут быть добавлены разные виды реквизитов. Например, «Организация», «ИП», «Физ лицо» и свои собственные. Эти шаблоны вы можете редактировать в настройках→шаблоны реквизитов.
Например, вы хотите получить реквизиты «ИП» определенной компании. Для этот в фильтр нужно добавить параметр «PRESET_ID».
1 2 3 4 5 6 7 8 9 10 11 |
$req = new \Bitrix\Crm\EntityRequisite(); $rs = $req->getList([ "filter" => [ "ENTITY_ID" => 1, "ENTITY_TYPE_ID" => CCrmOwnerType::Company, 'PRESET_ID' => 2 ] ]); $row = $rs->fetch(); |
«PRESET_ID» вы можете посмотреть при редактировании шаблонов реквизитов:
или в таблице b_crm_preset. Для «ИП» оно равно 2.
Так реквизиты мы получили, но массиве ($row) нет адреса(ов). Чтобы получить адрес:
1 2 3 |
$address = Bitrix\Crm\EntityRequisite::getAddresses($row['ID']); |
Метод Bitrix\Crm\EntityRequisite::getAddresses принимает ИД реквизита, на выходе отдает массив с адресами.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Array ( [1] => Array ( [ADDRESS_1] => Фактический адрес [ADDRESS_2] => Квартира [CITY] => Г [POSTAL_CODE] => П [REGION] => Р [PROVINCE] => О [COUNTRY] => С [COUNTRY_CODE] => ) [4] => Array ( [ADDRESS_1] => Адрес регистрации [ADDRESS_2] => К [CITY] => Г [POSTAL_CODE] => П [REGION] => Р [PROVINCE] => О [COUNTRY] => С [COUNTRY_CODE] => ) [6] => Array ( [ADDRESS_1] => Юридический [ADDRESS_2] => К [CITY] => Г [POSTAL_CODE] => П [REGION] => Р [PROVINCE] => О [COUNTRY] => С [COUNTRY_CODE] => ) [9] => Array ( [ADDRESS_1] => Адрес бенефициара [ADDRESS_2] => К [CITY] => Г [POSTAL_CODE] => П [REGION] => Р [PROVINCE] => О [COUNTRY] => С [COUNTRY_CODE] => ) ) |
Как видите каждый тип адреса хранится под своим номером. 1 — Фактический, 4 — адрес регистрации 6 — юридический, 9 — Адрес бенефициара
Я пока не нашел почему фактическому адресу отдается цифра 1, а юридическому 6. Если у кого то есть информация по этому поводу, поделитесь в комментариях.
UPD: Посмотреть константы адресов можно в классе \Bitrix\Crm\EntityAddress
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class EntityAddress { const Undefined = 0; const Primary = 1; const Secondary = 2; const Third = 3; const Home = 4; const Work = 5; const Registered = 6; const Custom = 7; const Post = 8; const Beneficiary = 9; const Bank = 10; |
Ну что ж, сегодня мы приоткрыли завесу в мир реквизитов Битрикс24. Пойду дальше копать картошку ядро…. 🙂