Не работает ВнешнееСобытие в модально открытой форме

1. CaSH_2004 372 25.09.15 18:06 Сейчас в теме
Сделал механизм чтобы при сканировании определенного ШК в форме документа открывается модальная форма в которой при помощи СШК можно внести некие данные. Все работало на Windows XP, но на Windows 2008 Server R2 Standart этот же механизм не работает. 1С:Предприятие 8.2 (8.2.19.130)
Поискал в инете - люди все говорят что в модальных формах не работает внешнее событие.
Самое что забавное что если не отключать перехватчик событий в форме документа, то все события которые возникли в модальной форме (визуально их не видно) после ее закрытия сыпятся в обработчик ВнешнеСобытие() формы документа.
При открытии той же модальной формы не модально все события возникают в ней.
Кто-то сталкивался с подобным?
Способы обхода есть, но все они некрасивые по сравнению с исходным вариантом и требуют значительных доработок.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Dnki 4 25.09.15 23:10 Сейчас в теме
Я бы задумался:
1) Трудно поверить, что поведение 1С зависит от версии ОС
2) Надо думать СкШК работает в режиме COM-порта. Значит есть драйвер. Может дело в нем?
deniseek77; +1 Ответить
5. CaSH_2004 372 29.09.15 08:38 Сейчас в теме
(2)
1) пока все указывает на это, но буду скоро тестить на разных ОС и отпишусь
2) забыл сказать СШК в режиме клавиатуры, драйвер стоит 1С:Сканер штрихкода 8.0.17.3
(3) Вы ничего не путаете? Я как раз говорю про то что не возникает ВнешнееСобытие() в модальном окне, но накапливается и после его закрытия все эти события возникают в родительском окне, подключение СШК в обоих формах одинаковое и при открытии формы 2 в обычном режиме все работает четко
6. Serginio 938 29.09.15 10:23 Сейчас в теме
(5) Если в режиме клавиатуры, то какое еще ВнешнееСобытие?
Но события от нажатия клавиши посылается не тому окну. Смотри драйвера
7. CaSH_2004 372 29.09.15 11:05 Сейчас в теме
(6)Вы по ходу не в курсе как работает в 1С 8.х СШК.
Я тоже не спец по этому но вот примерно как это происходит: СШК может работать в режиме COM (эмуляции если это USB) или в режиме клавиатуры, при сканировании ШК вызывается обработчик формы ВнешнееСобытие(), в данном случае он не вызывается для модально открытой формы.

Кстати проблему нашел, драйвера и ОС не при чем, тут особенность работы 1С с внешними событиями и модальными окнами. Я где то встречал описание поумнее но вот примерно как происходит: 1С гасит все события посылаемые всем окнам кроме модального, а у меня произошло следующее - подозревая это я отключал в родительской форме перехват событий (а при закрытии включал), но оказывается у меня при запуске базы по умолчанию открывается еще одна форма которая тоже работает со СШК, и на ней то 1С и глушило событие (возможно по принципу стека а может и просто так), причем настолько тихо что даже отладчик не показывал никакой активности. Обнаружилось это случайно - на ПК с XP из-за особенностей запуска лишней формы (скажем № 3) он не запускалась и все отрабатывало нормально отсюда и возник пост.

Вобщем вывод такой: для того чтобы в модальном окне работать с СШК нужно чтобы только одна форма была подключена к СШК, остальные нужно получается отключать перед (или после запуска - порядок не важен).

PS:
(6) "Смотри драйвера" - как вы предполагаете на них смотреть? Перебирать все версии? по другому бы я не смог т.к. я не разработчик драйверов.
3. Serginio 938 26.09.15 00:27 Сейчас в теме
Помню такое было. Внешнее событие передается окну документа, но очередь сообщений обрабатывает только сообщения модального окна.
Можно сделать обработку внешнего события в модальном окне, тогда сообщения должны посылаться ему.
4. deniseek77 86 26.09.15 10:03 Сейчас в теме
(3) Serginio, Не можно, а нужно
8. Serginio 938 29.09.15 12:05 Сейчас в теме
Если вызывается внешнее событие, то это явно не режиме клавиатуры. В режиме клавиатыры посылается сообщение активному элементу формы.
9. spacecraft 29.09.15 12:08 Сейчас в теме
(8) Serginio, тут просто путаница в понятиях. Есть режим "эмуляции клавиатуру", правильное название HID. Он как раз и работает через внешнее событие.
А есть в разрыв клавиатуры, то что Вами описано.
11. Serginio 938 29.09.15 14:26 Сейчас в теме
10. гаврюша 2 29.09.15 13:05 Сейчас в теме
(8) Serginio, CaSH_2004 прав: когда подключается сканер штрих-кода, в настройках "Номер порта" выбирается "Клавиатура".
Процедура ВнешнееСобытие(Источник, Событие, Данные)
ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
Форма у нас не модальная...
12. madway 119 14.04.17 22:20 Сейчас в теме
у себя обошел эту проблему открытием формы модально, но из обработчика ожидания.
т.е. даем завершится внешнему событию.
Подключаем в нем обработчик ожидания на открытие модальной формы. И все работает.
rolin555; demONx7; +2 Ответить
13. rolin555 51 26.07.18 11:45 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот