Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 18:41

Правильная обработка ошибки с возвратом в поле

Автор Yurec66, 24 авг 2022, 00:13

0 Пользователей и 1 гость просматривают эту тему.

antoneus

Не, так уж работает сообщение пользователю.
Если совсем заморачиваться - есть еще в модуле объекта предопределенная процедура ОбработкаПроверкиЗаполнения, которая вызывается при вызове функции ПроверитьЗаполнение и в которой можно редактировать список проверяемых реквизитов. То есть можно в ней избавиться от проверок заполнения других реквизитов, пока еще скрытых, если проверка вызывается из процедуры добавления строки. Как узнать, что проверка вызывается из процедуры добавления строки? Добавить в объект реквизит-флаг и устанавливать его в истину при вызове проверки из процедуры добавления и сбрасывать после.

Yurec66

Да, походу от этого не избавиться  <_<

Yurec66

Столкнулся с похожей ситуацией. Суть такова. Есть поле ввода количества для списания с остатка товара. Я делаю контроль на допустимость, т.е., чтобы заказное числе не было больше, чем есть реально на остатке товара. Вот таким кодом

Если КоличествоРасхода > ТекущийОстаток Тогда
Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "На остатке товара нет требуемого количества.";
        Сообщение.Поле = "Объект.КоличествоРасхода";
        Сообщение.Сообщить();
        Отказ = Истина;
        Возврат
КонецЕсли;

Да, проверка выполняется, ошибка выдается, но курсор спокойно переходит на следующее поле ввода, минуя запрет на недопустимость заявленного числа. Это не есть хорошо. Как мне запретить переход на следующее поле, если условия не удовлетворительны? Как опять активировать поле ввода без перехода наследующее?

antoneus

Поле ввода в табличной части? Какое событие обрабатывается? У обработчика есть всякие параметры, возможно, стоит к ним приглядеться.

Yurec66

Нет, не в табличной. Обычное поле на форме элемента. А обработчик поля стандартный "ПриИзменении"

antoneus

Если КоличествоРасхода > ТекущийОстаток Тогда
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = "На остатке товара нет требуемого количества.";
        Сообщение.Поле = "Объект.КоличествоРасхода";
        Сообщение.Сообщить();
        ТекущийЭлемент = Элементы.КоличествоРасхода;//или как он там называется
        Возврат
     КонецЕсли;     

LexaK

antoneus, так не будет работать!
здесь надо использовать ОбработчикОжидания()
примерно так
&НаКлиенте
Процедура КурсПриИзменении(Элемент)
Если Курс = 0 Тогда
ПодключитьОбработчикОжидания("УстановитьФокусНаКурс", 0.1, Истина);
КонецЕсли;
КонецПроцедуры
 
&НаКлиенте
Процедура УстановитьФокусНаКурс()
ЭтаФорма.ТекущийЭлемент = Элементы.Курс;
КонецПроцедуры


вы хотя бы проверяли, то что чайникам/ученикам советуете! они же вам верят!!!
если помогло нажмите: Спасибо!

antoneus

У меня работает, что я делаю не так?

LexaK

antoneus, какая платформа, совместимость, клиент?
если помогло нажмите: Спасибо!

LexaK

с какой-то версии платформы, на тонком клиенте, упр.формы, в обработке события элемента формы, не удается простым присвоением перезадать/назначить Текущий элемент
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск