Имя: Пароль:
1C
1С v8
Как обработать сход с поля ввода?
,
0 kiwi
 
04.07.14
13:47
В обычной форме есть текстовое поле ввода. Необходимо при сходе с этого поля *даже при неизменившемся значении* обработать такое событие. Как это сделать? (ПриИзменении и ОкончаниеВводаТекста не канают)
1 kiwi
 
04.07.14
14:00
суть в чём: когда введено неверное значение в текстовое поле ввода, то при переходе на след. элемент управление это можно отловить с помощью ПриИзменении и, например, вернуть фокус в то же поле ввода. Но если это ошибочное значение так и не изменить, а тупо ещё раз нажать ввод, то повторно отловить сход с этого поля уже ничем не удаётся.
Я правильно понимаю, что в 1С вообще никак не поймать потерю фокуса элементом управления?
2 Enders
 
04.07.14
14:02
(1) Лови это не ПриИзменении, а в ОбработкеВыбора/ОкончаниеВводаТекста. Если введено некорректное значение отказывайся от изменения, зачем лишний гемор?)
3 kiwi
 
04.07.14
14:06
(2) ОкончаниеВводаТекста не годится, т.к. в повторном сходе с поля ввода никакой текст не вводился, соответственно события ОкончаниеВводаТекста не произошло и эта процедура не вызывается.
Ща попробую ОбработкуВыбора...
4 Enders
 
04.07.14
14:11
(3) Так правильно, пользователь ввел не то значение. Вы выругались на него и откатились к старым/пустым. Пользюк может проигнорить это и вводит другие данные.
Дальше перед записью проверять реквизит на заполненность и бить током если он не заполнен.

Хотя может и есть способ отловить события схода с элемента, но увы, я не знаю=)
Можно при активизации других реквизитов, смотреть на этот и если что возвращать ему активность... хз
5 ChiginAV
 
04.07.14
14:11
(1) Ты же потом это значение где-то использовать будешь (записывать или еще как-то). Вот в начале той процедуры и проверяй корректность введенных значений
6 kiwi
 
04.07.14
14:15
(4) да, пожалуй придется именно чистить введённое, тогда очевидно будет срабатывать.
7 Ринат-СПб
 
04.07.14
14:23
(6) если это текст, да еще и на сотню символов, то когда ты ошибся на один символ и тебе очищают поле - ты будешь очень рад :)
8 Ринат-СПб
 
04.07.14
14:25
и как ты будешь проверять правильность ввода текстового поля? будет несколько вариантов, что там можно написать? Не проще тогда сделать перечисление и дать из них выбирать пользователю?
9 acsent
 
04.07.14
14:26
у формы есть ПриАктивизацииОбъекта
10 samozvanec
 
04.07.14
14:31
(8) нет нет, там будет 6 вариантов текста от 50 до 150 символов без права на ошибку при вводе)
(0) проверяй потом! в (8) кстати дело говорят, если это применимо
11 YF
 
04.07.14
14:32
(10) Забей эти 6 вариантов и предложи выбор из табличного документа, например
12 Enders
 
04.07.14
14:33
(8) а если там вводится номер телефона?)
Проверить корректность ввода можно, а вот сделать перечислением нет;)
13 Ринат-СПб
 
04.07.14
14:41
(12) тогда после первого неправильного изменения поля подключи обработчик ожидания, который отключиться только с правильным вводом данных
14 samozvanec
 
04.07.14
14:51
(11) мне не надо, я со скуки
15 samozvanec
 
04.07.14
14:51
(12) маску
16 PR
 
04.07.14
14:53
(0) В 1С нет события "ПотеряФокуса"
17 Enders
 
04.07.14
14:54
(15) это как вариант может быть номер телефона. могут быть и другие данные и не всегда можно обойтись маской;)
(13) Да мне это не надо, я б проверял значение реквизита перед записью, или, если это обработка, то в начале процедуры :)
18 Ринат-СПб
 
04.07.14
15:00
(17) Сорри... перепутал тебя с ТС
я бы тоже проверял перед записью :) Но ТС хочет по извращаться :)))
19 samozvanec
 
04.07.14
15:05
(17) а вот тут действительно становится интересно, что же хочет ТС)
20 Ринат-СПб
 
04.07.14
15:11
(19) ТС пропал :)
21 kiwi
 
04.07.14
15:49
ТС хочет примерно следующее:
в форме есть несколько полей ввода, при вводе в первое из них с помощью ПриИзменении проверяется соответствие некоему шаблону (ну или просто, достаточное ли количество символов введено), после чего фокус переходит в следующее поле и т.д. Так вот, если сразу ввести что-то неподходящее, то после соотв. предупреждения хотелось бы вернуться в это поле и, например, добавить недостающую цифру, НО, чтобы при этом было невозможно энтером перейти в следующее поле ничего не исправив
22 Enders
 
04.07.14
15:57
(21) ну можно вообще извратится)
После первой проверки, когда сообщил что пользователь не правильно ввел данные.
Циклом пробегаешь по всем элементам формы и ставишь доступность в ложь (кроме твоего элемента)
Дальше у пользователя только 2 варианта:
1. Закрыть форму (но при закрытии оно всё равно захочет сохранить изменения, так что от проверки перед записью не уйти)
2. Исправить. Тогда снова включается твоя проверка и если всё хорошо, то возвращает доступность всем элементам ;)