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