Как можно реализовать проверку уникальности поля ИНН для компаний при сохранении в смарт-процессе "Главный офис компании" в ЦРМ, чтобы предотвратить сохранение компании с уже существующим ИНН и вывести сообщение об ошибке "Такая компания уже существует"?
Для проверки уникальности поля в смарт-процессах перед сохранением значения, можно использовать следующий алгоритм: 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>