Проблема: При попытке в коде обработки выполнить команду Активизировать, чтобы вернуть курсор в поле ввода - получаем ошибку "В данной формуле не может быть вызвана эта процедура(функция)"
Решение: Несколько вариантов, например Установить фокус на поле ввода 7.7 или Активизировать поле ввода
Предлагаемый метод - использовать фиктивное закрытие формы.
Бонус - получаем защиту от случайных нажатий клавиши Esc
Пример:
"РазрешитьЗакрытие" - служебная переменная, анализируемая в процедуре ПриЗакрытии().
"Штрихкод" - имя поля на форме, которое надо активизировать.
При закрытии анализируется переменная "РазрешитьЗакрытие", и в зависимости от её значения - закрытие отменяется, активизируется требуемое поле и снова таки закрытие отменяется, или же - просто закрываем форму.
Перем РазрешитьЗакрытие; // флаг используем для разрешения закрытия формы и для обхода ошибки активизации реквизита Процедура АктивизироватьШтрихКод() // через фиктивное закрытие формы обойдем ошибку функции Активизировать РазрешитьЗакрытие = 2; Форма.Закрыть(0); // вызываем процедуру закрытия КонецПроцедуры Процедура ЗакрытьОбработку() // нажали на кнопку Х - разрешаем закрытие РазрешитьЗакрытие = 1; Форма.Закрыть(0); // вызываем процедуру закрытия КонецПроцедуры Процедура ПриЗакрытии() Если РазрешитьЗакрытие=0 Тогда // простое закрытие запрещаем (страхуемся от случайных закрытий по ESC) Сообщить("Закрыть форму можно только по кнопке!"); СтатусВозврата(0); // отменяем закрытие ИначеЕсли РазрешитьЗакрытие=1 Тогда // всё в порядке, это закрытие по кнопке // ИначеЕсли РазрешитьЗакрытие=2 Тогда // фиктивное закрытие - для активизации реквизита на форме Активизировать("ШтрихКод"); // активизируем наше поле СтатусВозврата(0); // отменяем закрытие РазрешитьЗакрытие = 0; // сбрасывам переменную возврат; КонецЕсли; КонецПроцедуры
Комментариев нет:
Отправить комментарий