Как можно реализовать проверку уникальности поля ИНН для компаний при сохранении в смарт-процессе "Главный офис компании" в ЦРМ, чтобы предотвратить сохранение компании с уже существующим ИНН и вывести сообщение об ошибке "Такая компания уже существует"?
Для проверки уникальности поля в смарт-процессах перед сохранением значения, можно использовать следующий алгоритм: 1. При сохранении значения поля ИНН компании в смарт-процессе "Главный офис компании" в ЦРМ, сначала необходимо выполнить запрос к базе данных или другому источнику данных, чтобы проверить, есть ли уже компания с таким ИНН. 2. Если компания с таким ИНН уже существует, то необходимо отобразить сообщение об ошибке пользователю и предотвратить сохранение данных. 3. Если компания с таким ИНН не найдена, то можно продолжать сохранение данных. Для реализации проверки уникальности поля ИНН при сохранении компании в смарт-процессе "Главный офис компании" можно использовать следующие шаги: 1. Создать компонент или скрипт, который будет выполнять запрос к базе данных или другому источнику данных для проверки уникальности ИНН. 2. Добавить этот компонент или скрипт в смарт-процесс перед сохранением данных. 3. Если компания с таким ИНН уже существует, то вывести сообщение об ошибке "Такая компания уже существует" и предотвратить сохранение данных. 4. Если компания с таким ИНН не найдена, то продолжить сохранение данных. Таким образом, с помощью проверки уникальности поля ИНН перед сохранением его значения, можно предотвратить дублирование компаний с одинаковыми ИНН и обеспечить корректное сохранение данных в ЦРМ.
добавьте обработчик события <br/> <pre><code class="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;
}</code></pre> <br/> <br/> Либо можно добавить валидацию на фронте <br/> <pre><code class="javascript"><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></code></pre>