Имя: Пароль:
1C
 
ОбработкаВнешнегоСобытия и Модальные окна.....
0 GrayT
 
19.12.05
09:48
Такой вопрос. Есть документ с подбором номенклатуры по штрих коду. ПриЗаписи документа открывается модально обработка запроса автора (т.е. к компу могут подойти разные продавцы). Автор может либо пароль ввести, либо сканером по бэйджу со шрихкодом.
Все хорошо, все работает.
Но вот потребовалось открыть модально форму самого документа. ПриЗаписи открывается модально окно запроса автора, но ОбработкаВнешнегоСобытия от сканера не срабатывает :(
Куда рыть? Есть подозрение, что первая модальная форма (документ) блокирует работу второй модальной формы (обработки) Я прав?
1 skunk
 
19.12.05
10:01
нет не прав


в обработке открываю док

openformmodal("Document.ПеремещениеТМЦ", Cont);


в этом документе на кнопку вешаю процедуру
//****************************
procedure btPrint(flPrint = 0, Count = 1)
 openformmodal("Report", , "d:\111.ert");
endprocedure

клик по кнопке открывает форму внешнего отчета
2 427
 
19.12.05
10:02
Это ... будет ... опа.... опа.... опа    повторяло Эхо
3 GrayT
 
19.12.05
10:08
(1)кажись ты не понял. С открытием модальных окон проблем нет. Проблемы с тем что во втором модальном окне ОбработкаВнешнегоСобытия не срабатывает.
(2)...... а-а-а, все равно ни чего не скажешь :(
4 skunk
 
19.12.05
10:10
(3)туплю... сорри...
5 romix
 
модератор
19.12.05
10:17
Я бы не использовал модальные окна вообще.
Если они нужны, чтобы отследить (и потом где-то поюзать) событие закрытия формы, то используй генерацию события наподобие
Быстрое отображение остатка в справочнике и другие трюки с событиями в 1С
(там не совсем в тему, но близко, и позволяет отказаться от модальных окон).
6 GrayT
 
19.12.05
10:20
(5)Я их тоже не использую. Модально документ открыла другая обработка (не моя). По сабжу можешь чего сказать? Если не трудно запусти асю, плиз
7 romix
 
19.12.05
10:23
(6) асю прикрыли в целях безопасности. :-)

ОбработкаВнешнегоСобытия() по-моему не срабатывает при модальных окнах и при выполнении программного кода, т.к. 1С поддерживает единственный поток выполнения.
8 GrayT
 
19.12.05
10:23
+6 Обработка не моя и достаточно большая. Разбираться с ней и уходит от модального окна мне не очень хочеться. Если мой вывод правильный (на счет модальности) то либо заказчик напрягает разработчика открывшего документ модально, либо наливает мой стакан.
9 GrayT
 
19.12.05
10:25
Ром, ты с ВК много работал. МОжешь кинуть пример простой ВК, которая просто генерит события. Я вот тут думаю попробовать смому навоять - пусть каждую минуту посылает события.
Цель - просто поэксперементировать. В настоящий момент сканера нет под рукой, а разобраться надо.
10 GrayT
 
19.12.05
10:27
(7)Что вообще не срабатывает? Хочешь сказать, что в доке открытом модально я сканером даже не смогу подобрать номенклатуру?
Этот вариант не проверялся, т.к. обрабока заполняла документ и подбор номенклатуры там не осуществлялся.
11 romix
 
модератор
19.12.05
10:31
(9) Пример простой ВК (с тестом) по ссылке в 5.
12 romix
 
модератор
19.12.05
10:31
(10) Не проверял но могу щас это проверить у себя.
13 GrayT
 
19.12.05
10:34
(11)Сенкс. Я правда уже скачал работу с ИНИ файлами :)
(12)Глянь, плиз.
14 romix
 
модератор
19.12.05
10:38
(13-1) Ну и как - оно работает, или лучше убрать подальше? :0)
(13-2) Проверил. События работают. Но их похоже ловит только сама модальная форма.
15 GrayT
 
19.12.05
10:39
14.1 ПОка еще не смотрел :(
14.2 Т.е. следующая модальная обламывается?
16 romix
 
модератор
19.12.05
11:26
(15) Вообще, события в 7.7 по-моему приходят только в одну форму, где сейчас находится фокус ввода. Т.е. где мигает курсор пользователя.
17 GrayT
 
19.12.05
11:30
Э-э-э-э. Мигает у меня курсор во второй форме, мигает. Если Продавец введет пароль руками, то обработка отрабатывает нормально, а вот со сканера считать не желает :(
18 GrayT
 
19.12.05
12:17
Похоже моя догадка верная :(
Для теста использовал Факира от Ромикса - пинал первым попавшимся событием :)
Две обработки Новая1 и Новая 2
Новая1:
Процедура Выполнить()
   fakir.ВызватьСобытие("fakir", "ПриНачалеРаботыСистемы", "");
   ОткрытьФормуМодально("Обработка.новый2");
КонецПроцедуры                                  

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
   Сообщить("------------ Обработка1 -----------------------");
КонецПроцедуры

Новая2:
Процедура Выполнить()
   fakir.ВызватьСобытие("fakir", "ПриНачалеРаботыСистемы", "");
КонецПроцедуры

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
   Сообщить("------------- Обработка 2 ----------------------");
КонецПроцедуры

Если первую обработку вызывать НЕ модально, то отрабатывает ОбработкаВнешнегоСобытия ВТОРОЙ формы. Дальше вторая форма реагирует на события нормально.

Если первую обработку вызвать модально,то сообщения не появляются. На события во второй форме не реагирует. После закрытия второй формы отрабатывает ОбработкаВнешнегоСобытия первой формы.
19 romix
 
модератор
19.12.05
14:29
(18) Обработка 1
//*******************************************
Процедура Выполнить()
   ОткрытьФормуМодально("Обработка.новый2");
КонецПроцедуры

Обработка 2:

//*******************************************
Процедура Выполнить()
   fakir.ВызватьСобытие("fakir", "Проверка", "");
   

КонецПроцедуры
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
   Сообщить("-----------------------------------");
   Сообщить("Поступило событие");
   Сообщить("Источник: "+Источник);
   Сообщить("Сообщение: "+Событие);
   Сообщить("Данные: "+Данные);
КонецПроцедуры

Короче, что модально, что не модально - событие срабатывает, если обработчик во 2 форме. В первую по-моему в любом случае не попадает.
20 romix
 
модератор
19.12.05
14:33
(+19) Подтверждаю, в 1 форму в любом случае событие не попадает, если фокус ввода находится во 2 форме.
21 GrayT
 
19.12.05
14:40
(19)" Короче, что модально, что не модально - событие срабатывает" - открой обработку1 модально и во второй срабатывать перестанет.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.