@Anton_98

Как в смарт-процессах проверять поле на дубль перед сохранением?

Добрый вечер!

Не работал с смарт-процессами, тут прилетела такая задачка:

Есть смарт-процесс «Главный офис компании» (раздел «Компании» в ЦРМ, хранящий дочерние филиалы). В этом процессе заводятся компании с полем ИНН, и нужно, при нажатии на кнопку «Сохранить», проверять поле ИНН по всем ранее заведенным компаниям в смарт-процессе на уникальность, и, если такой ИНН уже есть, то не давать сохранить и выводить сообщение: «Такая компания есть»

Подскажите как такое реализовать можно, с стандартными событиями на сохранение я так понял смарт-процессы не работают
  • Вопрос задан
  • 98 просмотров
Пригласить эксперта
Ответы на вопрос 1
Real_Fermer
@Real_Fermer
Программист PHP
добавьте обработчик события
AddEventHandler('crm', 'OnBeforeCrmCompanyAdd', 'checkINN');

function checkINN(&$fields) {
    if (isset($fields['UF_CRM_INN'])) {  // Предполагается, что UF_CRM_INN - это пользовательское поле для ИНН
        $filter = array("UF_CRM_INN" => $fields['UF_CRM_INN']);
        $result = CCrmCompany::GetList(array(), $filter);
        if ($row = $result->Fetch()) {
            global $APPLICATION;
            $APPLICATION->throwException("Такая компания с ИНН уже есть.");
            return false;
        }
    }
    return true;
}


Либо можно добавить валидацию на фронте
<script>
BX.ready(function() {
    var form = document.querySelector('[name="form_element"]'); // Замените на актуальный селектор формы
    form.addEventListener('submit', function(e) {
        var innValue = document.querySelector('[name="UF_CRM_INN"]').value; // Замените на актуальный селектор поля ИНН
        BX.ajax.runComponentAction('bitrix:crm.company', 'getList', {  // Замените на актуальный вызов API
            data: {
                filter: {'UF_CRM_INN': innValue},
                select: ['ID']
            }
        }).then(function(response) {
            if (response.data.length > 0) {
                alert('Такая компания с ИНН уже есть.');
                e.preventDefault(); // Остановить отправку формы
            }
        });
    });
});
</script>
Ответ написан
Ваш ответ на вопрос

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

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