10 дек. 2016 г.

Установить фокус на поле ввода 7.7

На форме есть элемент Поле ввода, туда вводиться штрих код товара кассиром. Задача при каждом вводе штрих кода фокус (курсор) не переносился на другой элемент формы, а оставался в Поле ввода штрих кода.

Казалось бы, все просто, ввел в процедуру или функцию вызываемую в Поле ввода на вкладке Дополнительно
Активизировать(ПолеВвода);
и все, но при тестировании у нас появилась ошибка
Активизировать(ПолеВвода,); {D:\1CTEST\1C\EXTFORMS\РАБОЧЕЕМЕСТОКАССИРА1.ERT(737)}: В данной формуле не может быть вызвана эта процедура(функция)
поэтому один умный человек порекомендовал использовать "фиктивное" закрытие формы и вот как это работает.

В модуле формы пишем
Перем ПередатьФокус;

Процедура ИзмШКТов()
 ПоискНоменклатуры(СокрЛП(ШКтов),1);
 ПередатьФокус = "ШКтов"; 
 Форма.Закрыть(0); 
КонецПроцедуры    

Процедура ПриЗакрытии()        
 Если ПустоеЗначение(ПередатьФокус) = 0 тогда 
  Активизировать(ПередатьФокус); 
  СтатусВозврата(0); 
  ПередатьФокус = ""; 
  Возврат; 
 КонецЕсли; 
КонецПроцедуры
Поясню...
Объявили глобальную переменную, по которой будет проверять в последующем, закрывается ли, так сказать, по настоящему форма или это мы "фиктивно" используем закрытие, что бы фокус передать на наше Поле ввода.
В Поле ввода на вкладке Дополнительно мы вызываем процедуру ИзмШКТов(в ней моя лабуда обработки штрих кода, а далее мы присваиваем нашей глобальной переменной имя Поле ввода (в моем случаи называется поле ввода ШКтов) и через Форма.Закрыть(0)закрываем нашу форму для того, что бы в обработчике события ПриЗакрытии(проверить, закрывается ли форма стандартным способом или фиктивно и если фиктивно тогда методом Активизировать(ПередатьФокусуже удачно, без ошибок установиться фокус (курсор) на Поле ввода. Далее делаем глобальную переменную пустой, что бы в следующий раз сделать тоже, что и выше описано, а в конце Возвратнам не дает закрыть наше фиктивное закрытие формы.
 

CopyPaste Copyright © 2017 - |- Шаблон создан O Pregador - |- Отредактирован myr4ik07