Добавляя поля в карточки CRM, менеджер проставляет признак обязательности заполнения поля. При этом, часто необходимо настроить более сложные условия, связанные с тем, что поле становится обязательным для заполнения лишь при определенных условиях. В противном случае сделка или контакт не будет сохранен.
В стандартных настройках заложен лишь один сценарий, связанный с обязательными полями в сделках. Как быть с прочими сценариями. Например, в сделке медицинской организации есть поле «Пациенту требуется электрокардиограмма» (первое поле) и дополнительное поле «Дата снятия электрокардиограммы» (второе поле), становящееся обязательным для заполнения, если первое поле имеет значения да.
В таких случаях, на помощь в коробочной версии придет обработчик события
OnBeforeCrmDealUpdate
или аналогичный обработчик для любой другой сущности CRM. Добавьте в функцию обработчика следующий код:
$arFilterDeal = array('ID'=>$dealId);
$arSelectDeal = array('ID','UF_код1поля', 'UF_код2поля');
// смотрим какие значения у полей в базе
$obResDeal = CCrmDeal::GetListEx(false,$arFilterDeal,false,false,$arSelectDeal)->Fetch();
// сценарий если пользователь не ввел дату
if($arFields['UF_код1поля']=='код значения да' && !$arFields['UF_код2поля']) {
if(!$obResDeal['UF_код2поля']) {
$arFields['RESULT_MESSAGE'] = "Поле 2 должно быть заполнено";
$APPLICATION->ThrowException($arFields['RESULT_MESSAGE']);
return false;
}
// сценарий, если пользователь вводит дату для значения нет
} else if($arFields['UF_код1поля'] != 'код значения да' && $arFields['UF_UF_код2поля']) {
if($obResDeal['UF_код1поля'] != 'код значения да') {
$arFields['RESULT_MESSAGE'] = "Поле 1 должно иметь значение да";
$APPLICATION->ThrowException($arFields['RESULT_MESSAGE']);
return false;
}
}
// сценарий если пользователь удаляет дату
if (array_key_exists('UF_код2поля', $arFields) && $arFields['UF_UF_код2поля']==""
&& $obResDeal['UF_код1поля']=='код значения да') {
$arFields['RESULT_MESSAGE'] = "Поле дата не может быть пустой";
$APPLICATION->ThrowException($arFields['RESULT_MESSAGE']);
return false;
}
Как вы понимаете, конструкция
$APPLICATION->ThrowException($arFields['RESULT_MESSAGE']
возвращает сообщение в сделку о том, какое действие должен предпринять пользователь, чтобы ее сохранить.
