Проверка выбранного справочного значения при быстром вводе. Не отрабатывает валидация
Добрый день, уважаемые коллеги!
Есть следующий кейс: 1. На странице Контрагента указывается наше ответственное подразделение, выбирается из справочника.
2. В записях справочника Подразделений есть признак (булево) можно выбирать это подразделение для указания в Контрагентах или нет - UsrProhibitSelectionAccount
3. Нужно запретить выбор записи Подразделения, если признак UsrProhibitSelectionAccount = true
4. Настраиваю правило валидации, как описано https://academy.terrasoft.ru/documents/technic-sdk/7-16/dobavlenie-vali…
5. При выборе значения из справочника правило отрабатывает. Но если вводить запрещенное подразделение вручную, то оно спокойно остается в поле и позволяет сохранить значение.
Подскажите, пожалуйста, что нужно сделать в данном случае? Благодарю за помощь
Добавленные методы в карточку Контрагента
methods: { // Метод-валидатор значения колонки [UsrDepartment] // semmrn DepartmentValidator: function() { // Переменная для хранения сообщения об ошибке валидации. var invalidMessage = ""; // Проверка значения колонки [UsrDepartment] var AccountDepartments = this.get("UsrDepartment"); if (AccountDepartments.UsrProhibitSelectionAccount) { // Если значение колонки [UsrAccountDepartments.UsrProhibitSelectionAccount] // запрещено к выбору = да, то // в переменную invalidMessage помещается значение локализуемой строки с сообщением // об ошибке валидации. invalidMessage = this.get("Resources.Strings.DepartmentMustBeAllowed"); } // Объект, свойство которого содержит сообщение об ошибке валидации. // Если валидация прошла успешна, в объекте возвращается пустая строка. return { // Сообщение об ошибке валидации. invalidMessage: invalidMessage }; }, // Переопределение базового метода, инициализирующего пользовательские валидаторы. setValidationConfig: function() { // Вызывает инициализацию валидаторов родительской модели представления. this.callParent(arguments); // Для колонки [UsrDepartment] добавляется метод-валидатор DepartmentValidator(). this.addColumnValidator("UsrDepartment", this.DepartmentValidator); } },
Нравится
Для того, что Вы хотите есть как раз валидация, которую Вы пробовали в первом сообщении. Она должна предотвращать и от ручного ввода. Не смотрели в отладке, функция-валидатор выполняется, что в поле AccountDepartments и как срабатывает условие?
Доброго дня, Марина. Почему Вы не хотите сделать настройку посредством бизнес-правила (фильтрацией)?
Марина, ещё можно деактивировать при помощи стандартного механизма:
Если одно или несколько значений справочника устарели и больше не используются, то такие значения можно деактивировать (Рис. 2). Деактивированное значение не будет отображаться при выборе значений в справочных полях. При этом пользователи продолжат видеть это значение в тех записях, где оно было указано ранее, и смогут использовать его для фильтрации. По умолчанию возможность деактивировать значения справочника выключена. Разрешить деактивацию записей для нужного справочника можно в разделе [Конфигурация]. Подробнее о настройке читайте в статье “Деактивация записей объектов”.
Рис. 2 — Деактивированное значение справочника [Типы статей базы знаний]
Но так будет запрещён выбор не в конкретной карточке, а везде.
Уважаемые коллеги, спасибо за Ваши предложения.
Стандартные фильтры и деактивация не подходят, так как в справочнике настроена иерархия, которая не совмещается с данными инструментами.
Нет ли метода, который будет проверять значение при вводе вручную? а также при открытии страницы (так как неправильные записи у нас пока появляются в результате их создания в мобильном приложении)? Благодарю за помощь
Для того, что Вы хотите есть как раз валидация, которую Вы пробовали в первом сообщении. Она должна предотвращать и от ручного ввода. Не смотрели в отладке, функция-валидатор выполняется, что в поле AccountDepartments и как срабатывает условие?
Зверев Александр,
благодарю), ситуация, действительно, прояснилась через отладчик