Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроль вводимых значений в поле ввода
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
andrew76
Добрый день !

В каких событиях лучше написать обработчик контроля вводимых значений в поле ввода-"Окончание ввода текста" или "При изменении"?
Мне нужно ,чтобы в поле ввода не попадали пустые и некорректные значения.
Petre
Для текстового реквизита все равно. Идеологически верно "ПриИзменении". "ОкончаниеВводаТекста" удобно тем, что текст уже передан в процедуру, и есть "СтандартнаяОбработка" (может быть удобным в зависимости от реализации алгоритма контроля).
andrew76
Цитата(Petre @ 02.03.15, 15:46) необходимо зарегистрироваться для просмотра ссылки
Для текстового реквизита все равно. Идеологически верно "ПриИзменении". "ОкончаниеВводаТекста" удобно тем, что текст уже передан в процедуру, и есть "СтандартнаяОбработка" (может быть удобным в зависимости от реализации алгоритма контроля).


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

Если Элемент.Значение <> Дата(1,1,1) тогда
       Предупреждение("Пустую дату вводить не разрешается !");
       Возрат;
КонецЕсли;


то получается следующее-при попытке ввода пустой даты выдается сообщение пользователю,что дата пустая,
а дальше можно перескочить на другой элемент управления-поле ввода ,расположенный выше/ниже на форме.
А мне это нежелательно,мне нужен такой вариант,что пока текущее (имеющее фокус ввода) поле ввода не будет правильно заполнено,то пользователь не имел бы возможности переходить на другие,соседние поля ввода.
Petre
Оба рассматриваемых варианта не оставляют "фокус ввода". Но в обработчиках обоих событий можно этот "фокус" вернуть программно, присвоив текущему элементы формы нужный элемент (однако, не во всех релизах это работало, где-то уже обсуждали).
В любом случае, если поля представляют разные реквизиты, надо использовать "ПриИзменении".
Что касается приведенного кода, то предупреждение будет выведено, если дата не пустая.
andrew76
Цитата(Petre @ 02.03.15, 18:07) необходимо зарегистрироваться для просмотра ссылки
Оба рассматриваемых варианта не оставляют "фокус ввода". Но в обработчиках обоих событий можно этот "фокус" вернуть программно, присвоив текущему элементы формы нужный элемент (однако, не во всех релизах это работало, где-то уже обсуждали).


Если можно по подробнее про-"Но в обработчиках обоих событий можно этот "фокус" вернуть программно, присвоив текущему элементы формы нужный элемент"
Petre
Процедура Реквизит1ПриИзменении(Элемент)
    Если Не ПроверкаСодержанияРеквизита1() Тогда
        Сообщить("Ошибка!");
        ЭтаФорма.ТекущийЭлемент = Элемент;
    КонецЕсли;
КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.