@roman_vo

Почему \Bitrix\Crm\FieldMultiTable::getList не находит компанию с номером телефона +7, а с 7 видит?

от тильды приходит так: +7 (921) 000-00-09
в битрикс номер записан так:
6267b62cb1cdb842952922.png
Если поменять номер в компании на 7 921 000-00-09, то он найдет, с +7 ни в какую

// поиск компании по телефону
$dbResultCompany =  \Bitrix\Crm\FieldMultiTable::getList([
    'filter' => [
        'ENTITY_ID' => 'COMPANY',
        'TYPE_ID' => 'PHONE',
        'VALUE' => [
            preg_replace("/[^0-9]/", '', $phone),
            $phone,
            str_replace(array( '(', ')' ), '', $phone)
]
    ]
]);
$findCompanyPhone = $dbResultCompany->Fetch();
  • Вопрос задан
  • 835 просмотров
Решения вопроса 1
@roman_vo Автор вопроса
битрикс хотел видеть в формате +79210000009
preg_replace("/[^+0-9]/", '', $phone)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
gromdron
@gromdron Куратор тега Битрикс24
Работаю с Bitrix24
Дело в том что у вас номер телефона хранится в международном формате, т.е. "+7...", а вы в первой регулярке указываете что он должен начинаться строго с цифры.

Надо сказать что искать по сырым значениям телефонного номера это то еще занятие и так лучше не делать.

Лучше воспользоваться методом поиска дубликатов:

\Bitrix\Main\Loader::requireModule('crm');

/**
 * Телефон который будем искать
 * @var string
 */
$phone = '2131164';

/**
 * Список всех ID лидов с этим телефонным номером
 * @var int[]
 */
$leadIds = [];


$adapter = \Bitrix\Crm\EntityAdapterFactory::create([
        'FM' => [
            'PHONE' => [
                ['VALUE' => $phone]
            ]
        ]
    ],
    \CCrmOwnerType::Lead
);

$dups = (new \Bitrix\Crm\Integrity\ContactDuplicateChecker())
    ->findDuplicates(
        $adapter,
        new \Bitrix\Crm\Integrity\DuplicateSearchParams([
            'FM.PHONE'
        ])
    );

foreach($dups as &$dup)
{
    if(!($dup instanceof \Bitrix\Crm\Integrity\Duplicate))
    {
        continue;
    }

    $entities = $dup->getEntities();
    if(!(is_array($entities) && !empty($entities)))
    {
        continue;
    }

    //Each entity type limited by 50 items
    foreach($entities as &$entity)
    {
        if(!($entity instanceof \Bitrix\Crm\Integrity\DuplicateEntity))
        {
            continue;
        }

        if ( $entity->getEntityTypeID() != \CCrmOwnerType::Lead)
        {
            continue;
        }

        $leadIds[] = $entity->getEntityID();
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы