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

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

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

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

antoneus

8.3.20.1914, не использовать, пустая файловая конфигурация, на клиент-сервере тоже работает.

А где не работает?

LexaK

хм, вот здесь 1С:Предприятие 8.3 (8.3.18.1289)
не работает (и в более ранних версиях тоже) не я один сталкивался с такой проблемой, откуда и возникло "такое" решение
 
если помогло нажмите: Спасибо!

antoneus

Ну не знаю, скачал, поставил - работает.

LexaK

antoneus, ну ладно, осталось посмотреть что у пользователя сработает

Yurec66, отпишитесь, какой код подошел?
если помогло нажмите: Спасибо!

Yurec66

Рапортую...
Сработал вот этот код. При вводе заведомо большего числа чем на остатке выдается сообщение. Но.. курсор таки переходит на следующее поле и через долю секунды возвращается таки обратно на первое поле ввода.
В принципе можно сказать цель достигнута. Однако как то громоздко выглядит вся система "Сообщить". на маленькой форме . Может заменить на модальное информационное окно? Тогда как его обрабатывать правильно?

Screenshot_11.jpg

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

&НаКлиенте
Процедура УстановитьФокусНаПолеРасхода()
    ЭтаФорма.ТекущийЭлемент = Элементы.КоличествоРасхода;
КонецПроцедуры       

LexaK

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

        ПоказатьПредупреждение(,"На остатке товара нет требуемого количества.",20);
        ПодключитьОбработчикОжидания("УстановитьФокусНаПолеРасхода", 0.1, Истина);
     КонецЕсли;     
   КонецЕсли;     
КонецПроцедуры

&НаКлиенте
Процедура УстановитьФокусНаПолеРасхода()
    ЭтаФорма.ТекущийЭлемент = Элементы.КоличествоРасхода;
КонецПроцедуры       
если помогло нажмите: Спасибо!

Yurec66

LexaK, Проверил, так лучше намного. Но опять есть нюанс.
Если закрыть окно сообщения, то курсор переходит в нужное поле ввода, поле активируется и если опять нажать Enter, то курсор благополучно переходит на следующее поле, оставляя в предыдущем превышающее количество для списания. Это все потому, что событие "при изменении" уже не сработает. Т.к. изменения как такового не было. Получается нужно событие типа "При выходе из поля", а такого нет  :dfbsdfbsdf:

LexaK

Yurec66, вообще таким позиционированием редко занимаются,
например делают страницу для ввода данных строки, несколько полей с реквизитами и одной кнопкой Обработать
пользователь вводит все значения
например Номенклатура, ед.изм., количество, склад и т.д.
и нажимает кнопку Обработать (или Далее)
вот по нажатию на кнопку и происходит анализ всех введенных данных и вывод сообщения об ошибке (если есть) и здесь можно позиционироваться в нужное поле
в процессе вводе уже без разницы на каком поле ввод, дальше кнопки Обработать не пройти!!!
если помогло нажмите: Спасибо!

Yurec66

LexaK, согласен, наверное так будет правильно.

Yurec66

Все, сам разобрался в методике. Еще для закрепления и ликбеза вопрос. Каким образом "оформляются" информационные окна стандартными иконками? Как то указанием пиктограммы из коллекции картинок? К примеру для информационных данных - литера "I", для ошибки - восклицательный знак и т.д.

Теги:

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

Рейтинг@Mail.ru

Поиск