Имя: Пароль:
1C
1С v8
Запрет перевода фокуса в табличной части
0 dizpers
 
21.05.12
10:18
Здравствуйте! Есть форма документа. На форме есть табличное поле для редактирования табличной части документа. В табличном поле есть два поля ввода.Мне нужно сделать проверку вводимых в первое поле данных, и если поле не прошло проверку, то вывести сообщение и установить фокус на этом же поле (чтобыпользователь продолжил редактирование данных в этом поле).

Делаю следующим образом.


Процедура ТабличнаяЧасть1ВремяНачалаПриИзменении(Элемент)
   СтрокаТабличнойЧасти = ЭлементыФормы.ТабличнаяЧасть1.ТекущаяСтрока;
   тзВремяСеансов = ПолучитьВремяСеансов(СтрокаТабличнойЧасти.Зал, СтрокаТабличнойчасти.Дата);
   
   Для Каждого ВремяСеанса Из тзВремяСеансов Цикл
       Если Элемент.Значение >= ВремяСеанса.ВремяНачала И Элемент.Значение <= ВремяСеанса.ВремяОкончания Тогда
           Режим = РежимДиалогаВопрос.ОК;
           Вопрос("Неверная дата начала!", Режим, 0);
           Возврат;
       КонецЕсли;
   КонецЦикла;
КонецПроцедуры

Но после возврата из процедуры фокус падает на следующий элемент. В чем проблема?
1 Wobland
 
21.05.12
10:20
(0) ПриОкончанииРедактирования не думал?
2 dizpers
 
21.05.12
10:31
В свойствах поля табличной части в редакторе форм не вижу такого события. Или его надо как-то программно назанчить?
3 Wobland
 
21.05.12
10:31
(2) это у ТП
4 Wobland
 
21.05.12
10:31
(3) просто там есть такие штуки как Элемент, НоваяСтрока, ОтменаРедактирования
5 dizpers
 
21.05.12
10:36
Я так понимаю это событие срабатывает после ввода всей строки ТЧ. А мне бы хотелось обработать окончание редактирования конкретного поля, поэтому использую ПриИзменении()
6 dizpers
 
21.05.12
18:05
ап

Так что - нет что ли способа вернуть фокус на отредактированный элемент после вывода сообщения об ошибке?
7 dizpers
 
21.05.12
18:55
Поэкспериментировав я понял, что проблема не конкретно в фокусе, а в том, что после использования процедуры "Возврат" мы попадаем в основной поток программы и события обрабатываются в обычном порядке. То есть

1. ввели данные в поле1
2. нажали таб
3. сработало событие ПриИзменении()
4. проверяем условие - корректны ли введенные данные
5. проверили их, они некорректные
6. выдаем сообщение об ошибке
7. делаем "Возврат"
8. обрабатывается нажатый в пункте 2 таб (или другое событие)

а мне надо, чтобы на шаге 8 фокус вернулся на поле1 и пока пользователь не введет корректные данные - мучать его
8 dizpers
 
21.05.12
19:00
Хотя наверное мучать так пользователя не очень хорошая практика, как думаете? Будет он тыкать в это поле какие-то значения, получая неинформативные сообщения об ошибке. В конце концов ему это надоест. Если мыслить так, то лучше проверять при вводе все строке табличной части. Учитывая то, что у меня два поля ввода в строке табличной части будут таким образом проверяться - интервал времени - начало и конец.