Вы неправильно используете аргументы в
CCrmCompany::getList(), из-за этого получаете вообще все компании и вынуждены их перебирать. Плюс, для событий "OnBefore....Add" ключ ID не может существовать - ведь такие события происходят до создания новой записи ( в смысле элемента, раздела, компании ).
Должно быть что-то такое ( префиксный фильтр в arFilter должен работать, но я не проверял ):
function OnBeforeCrmCompanyAddHandler(&$arFields)
{
$res = CCrmCompany::getList(['ID' => 'ASC'], ['=TITLE' => $arFields["TITLE"]], ['ID'], 1);
if ($res->Fetch()) {
$arFields["RESULT_MESSAGE"] = "Данная компания уже существует!";
return false;
}
return true;
}
Список префиксов можно посмотреть в файле bitrix/modules/main/classes/general/sqlwhere.php , в свойстве $operations