Добрый день.
Проблема: Перед записью документа открывается модальная форма (обычные формы) для ввода штрихкода пользователя. Штрихкод подхватывается внешним событием (в сканере все настроено как надо). В итоге когда сканируем ШК ничего не происходит, либо срабатывает ВС из основной формы.
В соседних темах читал про подобный косяк. там пишут, что обработка ожидания нужна для запуска модальных форм, только как ее применить не понял.
(9) спасибо) глобальная переменная решает)
В общем добавил в модуль объекта экспортную переменную НеВыполнятьВС и ставлю ей значение "истина" перед открытием мод.окна и возвращаю "ложь" после его закрытия. В ВС основной формы проверяю данную переменную
НеОбрабатыватьВЭтойФормеВнешнееСобытие = Истина;
Результат = ОткрытьФормуМодально(ИмяФормы);
НеОбрабатыватьВЭтойФормеВнешнееСобытие = Ложь;
в ОбработкаОповещения:
Если Источник = "ПодключаемоеОборудование" И НеОбрабатыватьВЭтойФормеВнешнееСобытие = Ложь Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование" И НеОбрабатыватьВЭтойФормеВнешнееСобытие = Ложь Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Обработка оповещения в основной форме? или в модальной?
Подключаемое оборудование при получении данных из компоненты устанавливает переменную глПодключаемоеОборудованиеСобытиеОбработано = Ложь, и оповещает все формы о событии. Первая форма, которая обработает событие, установит глобальную переменную глПодключаемоеОборудованиеСобытиеОбработано = Истина; (возможно в вашей конфигурации переменная несколько иначе называется), чтобы это событие не обрабатывалось повторно.
Смысл того, что я написал в том, чтобы основная форма не обрабатывала событие, пока открыта модальная. Сомневаюсь, что какие то обработчики ожидания помогут вам решить вашу проблему. Если можете, пришлите ссылку на эту тему, я прочитаю и подумаю, что там предлагают
у себя обошел эту проблему открытием формы модально, но из обработчика ожидания.
т.е. даем завершится внешнему событию.
Подключаем в нем обработчик ожидания на открытие модальной формы. И все работает.
то видимо человек ловит внешнее событие и сразу после него пытается открыть модальное окно.
Если я правильно вас понял, то у вас уже открыто модальное окно, и в нем нужно обработать внешнее событие.
К слову, где то ниже сказали о том, что в основной форме хорошо бы отключить ТО. Т.е в событии при закрытии должна быть строчка, которая отключает ТО от формы. Ее бы тоже вызвать не мешало бы перед открытием модальной формы, а после вызвать подключение ТО назад.
(9) спасибо) глобальная переменная решает)
В общем добавил в модуль объекта экспортную переменную НеВыполнятьВС и ставлю ей значение "истина" перед открытием мод.окна и возвращаю "ложь" после его закрытия. В ВС основной формы проверяю данную переменную
Если срабатывает процедура ВнешнееСобытие в основной форме, видимо там после этого происходит что-то блокирующее.
Обычно происходит вызов этой процедуры во всех открытых формах, где она прописана в свойствах. (Но глюки тоже случаются, не редко)
Как уже писали выше, в модуле основной формы добавить ВводДоступен()
Например так
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Не ВводДоступен() Тогда
Возврат;
КонецЕсли;
Ну и в свойствах формы ввода ШК в разделе Событий, проверьте выбрана ли процедура для ВнешнегоСобытия.