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

Как можно реализовать проверку уникальности поля ИНН для компаний при сохранении в смарт-процессе "Главный офис компании" в ЦРМ, чтобы предотвратить сохранение компании с уже существующим ИНН и вывести сообщение об ошибке "Такая компания уже существует"?
  • 28 апреля 2024 г. 21:10
Ответы на вопрос 2
Для проверки уникальности поля в смарт-процессах перед сохранением значения, можно использовать следующий алгоритм:

1. При сохранении значения поля ИНН компании в смарт-процессе "Главный офис компании" в ЦРМ, сначала необходимо выполнить запрос к базе данных или другому источнику данных, чтобы проверить, есть ли уже компания с таким ИНН.

2. Если компания с таким ИНН уже существует, то необходимо отобразить сообщение об ошибке пользователю и предотвратить сохранение данных.

3. Если компания с таким ИНН не найдена, то можно продолжать сохранение данных.

Для реализации проверки уникальности поля ИНН при сохранении компании в смарт-процессе "Главный офис компании" можно использовать следующие шаги:

1. Создать компонент или скрипт, который будет выполнять запрос к базе данных или другому источнику данных для проверки уникальности ИНН.
2. Добавить этот компонент или скрипт в смарт-процесс перед сохранением данных.
3. Если компания с таким ИНН уже существует, то вывести сообщение об ошибке "Такая компания уже существует" и предотвратить сохранение данных.
4. Если компания с таким ИНН не найдена, то продолжить сохранение данных.

Таким образом, с помощью проверки уникальности поля ИНН перед сохранением его значения, можно предотвратить дублирование компаний с одинаковыми ИНН и обеспечить корректное сохранение данных в ЦРМ.
добавьте обработчик события 
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>
Похожие вопросы