При срабатывании ОбработкаВнешнегоСобытия переключается фокус #144612


#0 by Pavel_A
Ситуация такова: При сканировании штрихкода в форме документа вызывается процедура ОбработкаВнешнегоСобытия. При выполнении действий внутри этой процедуры в строке статуса выдается сообщение "Выполняется обработка" (очевидно это делает драйвер?), что приводит к переключению фокуса на статус и, после завершения процедуры, обратно на открытую форму документа. Такое переключение приводит к тому, что, если пользователь набрал что-то в поле ввода и в момент сканирования фокус находился на этом поле, весь текст в нем выделяется. Т.к. следующее действие пользователя - нажатие клавиши, оно приводит к удалению всего текста. Также один пользователь может набирать текст, а другой при этом должен сканировать штрихкоды - соответственно у пользователя, набирающего текст все удаляется в момент, когда второй сосканировал штрихкод. Посоветуйте, пожалуйста, как можно избежать переключения фокуса на статус и обратно или как можно избежать выделения всего текста в поле ввода и, следовательно, удаления его при следующем нажатии клавиши. Заранее спасибо!
#1 by 427
ХЕЗ, т майор... Баг платформы...
#2 by smaharbA
Сделай в конце обработки внешнего события WShShell=СоздатьОбъект("WScript.Shell"); WShShell.SendKeys("{END}"); может и поможет, но лучче во "внешний" скрипт вынеси тамже и задержку в начале воткни миллисекунд 200-300...
#3 by Pavel_A
C посылкой клавишь - это мысль. Ждал ответов, много думал. ;-) Сделал не WShShell'ом, а FormEx'ом посылку клавишь. С простыми полями ввода и с элементами справочников все ОК. Баг остается в полях ввода, где есть кнопка выбора (в полях даты, например). Оказывается в них при ОбработкаВнешнегоСобытия происходит не просто смена фокуса туда и обратно, а по типу нажатие кнопки (справа сбоку поля) и отмена. Естественно при этом происходят всякие гадости... Думаю, раз нельзя справиться с этим глюком по человечески, буду извращаться с определением типа поля и посылкой туда в виде нажатий клавиш текущего значения этого поля... Есть еще идеи?
#4 by smaharbA
А что если в обработке внешнего события "переактивизировать" вперед на другой элемент формы. (не работал с внешними событиями)
#5 by Pavel_A
Дело, похоже, не в простом переключении фокуса - если в поле ввода есть кнопка выбора, то происходит как-будто нажатие F4 и отмена(или энтер), если поле типа Дата, то нажатие F4, энтер и HOME... Если до сканирования была нажата кнопка выбора у поля ввода или у даты, то ничего не происходит, т.к. не вызывается ОбработкаВнешнегоСобытия... Как можно определить, может открытому окну драйвером посылаются каки-то коды?
#6 by Pavel_A
Причем, если убрать из модуля формы документа и из глобального модуля процедуру ОбработкаВнешнегоСобытия, то вышеназванной херни не происходит. Т.е. именно в момент успешного вызова драйвером ОбработкаВнешнегоСобытия происходит какое-то перещелкивание фокуса...
#7 by Pavel_A
Может есть мысли, как заменить процедуру ОбработкаВнешнегоСобытия на что-нить другое? Как можно по другому отследить активность драйвера, что данные в com-порт пришли?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С