Добавляя поля в карточки 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']
возвращает сообщение в сделку о том, какое действие должен предпринять пользователь, чтобы ее сохранить.