Сегодня я расскажу как работать с реквизитами компании в 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. Пойду дальше копать картошку ядро…. 🙂
· Permalink
Крайне полезная статья. Спасибо. А как получить банковские данные — ИНН, КПП и пр.?
· Permalink
Здравствуйте.
Спасибо большое.
Попробуйте код
Должно вывести, примерно
· Permalink
Да с этим разобрался. Спасибо. А как насчет БИК, Банк, к/c, р/c? Это отдельный объект?
· Permalink
Пример растянулся на небольшую заметку https://almat.pro/kak-poluchit-bankovskie-rekvizity-v-bitriks24-chast-2/
· Permalink
Нашел, кажется. EntityBankDetail::getList($params) — далее по аналогии)
UPD: По аналогии не вышло. Не могли бы вы привести пример? Заранее спасибо.
· Permalink
Если ещЁ надо , то EntityBankDetail::getList
$bank = BitrixCrmEntityBankDetail::getList([«filter»=>[‘ENTITY_ID’=>’ID компании’]]);
$bankData = $bank->fetchAll();
var_dump($bankData);
· Permalink
https://uploads.disquscdn.com/images/c80a00a0081783d1f2bdce77260e81a74526f62f0d3ba9fb67b30fdd80fc0ccd.jpg
Вот пример заполнения реквизитов компании
· Permalink
Здравствуйте!
Подскажите, если возможно, а как можно получить контакты компании?
Как добавить контакт к компании — сложности не представляет. А как получить массив контактов компании?
· Permalink
Здравствуйте.
Вам нужно получить все контакты определенной компании?
Нужно использовать класс CCrmContact. У него много методов, но для выборки есть GetList. Первый параметр это сортировка, второй — фильтр.
· Permalink
Спасибо!
· Permalink
Добрый день. У меня есть несколько отвлеченный вопрос.
Как получить доступ к комментариев в действиям БП. Например, комментарий к форме ввода доп. информации: http://prntscr.com/e0146k
Заранее спасибо.
· Permalink
Немного удалось покопать в этом вопросе. Пока остановился на компоненте main.post.list. Похоже этот компонент выводить все сообщения в БП. Ему передается ИД БП. Все начинается с компонента bizproc.task — затем bitrix:forum.comments — который вызывает main.post.list
К сожалению до конца еще не разобрался.
· Permalink
Подскажите, может кому-то удавалось найти в какой таблице хранятся адреса из реквизитов? Сами реквизиты лежат в b_crm_bank_detail, а вот адреса никак найти не могу(
· Permalink
https://uploads.disquscdn.com/images/3e082e1568d769d872f5b5699b34dff51394cbf13c6d65c8efe51012df0230d2.jpg А как получить доступ к реквизитам в редакторе бизнес процессов, в поле вставка значения?
· Permalink
К сожалению, не знаю. Лучше написать в техподдержку Битрикса по этому вопросу.
· Permalink
А как сохранить адрес?
· Permalink
Куда именно?
· Permalink
Подскажите, а как отфильтровать по дате реквизиты?
function findRequisiteDel()
{
$entityRequisite = new BitrixCrmEntityRequisite;
$rsRequisite = $entityRequisite->getList([
"select" => array("*"),
"filter" => array(
"CREATED_BY_ID" => 394,
'>=DATE_CREATE' => '2022-09-28',
'<=DATE_CREATE' => '2022-09-30'
),
"order" => array("SORT" => "asc", "ID" => "desc")
]);
return $rsRequisite->fetchAll();
}