Добрый день, уважаемые коллеги!

Есть следующий кейс: 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);
                }
		},

 

Нравится

5 комментариев
Лучший ответ

Для того, что Вы хотите есть как раз валидация, которую Вы пробовали в первом сообщении. Она должна предотвращать и от ручного ввода. Не смотрели в отладке, функция-валидатор выполняется, что в поле AccountDepartments и как срабатывает условие?

Доброго дня, Марина. Почему Вы не хотите сделать настройку посредством бизнес-правила (фильтрацией)? 

Марина, ещё можно деактивировать при помощи стандартного механизма:

Если одно или несколько значений справочника устарели и больше не используются, то такие значения можно деактивировать (Рис. 2). Деактивированное значение не будет отображаться при выборе значений в справочных полях. При этом пользователи продолжат видеть это значение в тех записях, где оно было указано ранее, и смогут использовать его для фильтрации. По умолчанию возможность деактивировать значения справочника выключена. Разрешить деактивацию записей для нужного справочника можно в разделе [Конфигурация]. Подробнее о настройке читайте в статье “Деактивация записей объектов”.

Рис. 2 — Деактивированное значение справочника [Типы статей базы знаний]

section_lookups_deactivated_record_example.png 

Но так будет запрещён выбор не в конкретной карточке, а везде. 

Уважаемые коллеги, спасибо за Ваши предложения.

Стандартные фильтры и деактивация не подходят, так как в справочнике настроена иерархия, которая не совмещается с данными инструментами.

Нет ли метода, который будет проверять значение при вводе вручную? а также при открытии страницы (так как неправильные записи у нас пока появляются в результате их создания в мобильном приложении)? Благодарю за помощь

Для того, что Вы хотите есть как раз валидация, которую Вы пробовали в первом сообщении. Она должна предотвращать и от ручного ввода. Не смотрели в отладке, функция-валидатор выполняется, что в поле AccountDepartments и как срабатывает условие?

Зверев Александр,

 

благодарю), ситуация, действительно, прояснилась через отладчик

Показать все комментарии

Подскажите как сделать следующее.
В карточке есть поле - идентификатор почтового отправления.
В какой-то момент времени я получаю этот идентификатор и мне необходимо внести в карточку, но я не хочу при этом открывать карточку, а хочу открыть окно состоящее из одного поля (модальное окно для ввода одного значения). Такие окошки для ввода есть во многих языках программирования.

Мне эту задачу необходимо решать в бизнес процессе.

Например, есть задача - получить идентификатор. Ставлю, что задача выполнена. Следующий шаг в БП ввести идентификатор. Так чтобы мне не открывать всю карточку редактирования, я хочу открыть только окно для ввода этого значения. После ввода это значение сохраняю уже в нужную запись нужного объекта.

Как мне вызвать такое окно для ввода одного значения?

Нравится

1 комментарий

Здравствуйте, Илья.

Для этой задачи подойдет элемент бизнес-процесса "Автогенерируемая страница", выберите объект привязки, конкретный экземпляр и поля, которые необходимо изменять.

Показать все комментарии

Коллеги, прошу вас совета:

Идея такая: в карточке контрагента вводить поле "основной контакт" без открытия карточки создания контакта. При большом колличестве холодных звонков удобнее ввести только имя в карточку контрагента, а остальное заполнить позже.

Делаю я это так - в карточке контрагента обрабатываю сообщение OnKeyUp, пока код клавиши не равен Enter (13), и тогда, если нажат "Enter", из содержимого в поле создаю новый контакт, добавляю его в базу и подвязываю его к контрагенту.

Проблема: При нажатии клавиши "Enter" открывается окно поиска контактов и обработчик не запускается. Возможно ли перехватить это событие и открывать справочник только по определенному условию?

Нравится

3 комментария

Здравствуйте Дмитрий,
Можете, пожалуйста уточнить пару моментов:
1) Вы поменяли контрол для поля PrimaryContactID с LookUpDataControl на TextDataControl в карточке контрагента?
2) Уточните версию Terrasoft пожалуйста.

1)Прошу прощения. Действительно на PrimaryContactID установлен контрол LookUpDataControl.
Я не обратил на это внимание.
2) Версия 3.3.2.251

Именно для LookUpDataControl нужна такая функциональность, при которой он, если поле пустое, работал, как TextDataControl (при нажатии Enter выполнял скрипт), если же нет, то как LookUpDataControl (открывал справочник)

Дмитрий, скорее всего, запретить показ выбора в LookUpDataControl, предлагаю вам использовать TextDataControl, и рядом с ним разместить Button, для вызова окна выбора

Показать все комментарии