Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Внешнее событие в обычных формах

Внешнее событие в обычных формах
Я
   SHAS
 
16.10.20 - 19:24
Добрый день!

Открыта форма документа (Д1). Сканирую ШК, отрабатывает "Внешнее событие" в этой форме, в результате которого создаётся другой документ (Д2) на основании первого. Соответственно, открывается форма нового документа Д2. После чего сканирую другой ШК, попадаем во внешнее событие документа Д2. В этом внешнем событии проводится и закрывается Д2.

Сразу после закрытия Д2 программа попадает во внешнее событие Д1, хотя там и написано
Если Не ВводДоступен() Тогда
    Возврат;
КонецЕсли;

Программа проходит это условие и идёт дальше.

Как сделать, чтобы после попадания во внешнее событие Д2, не срабатывало внешнее событие в Д1 (или ВводДоступен() получало Ложь)?
   SHAS
 
1 - 16.10.20 - 20:08
Как я понимаю - никак. Выкрутилась через однократный ПодключитьОбработчикОжидания, в процедуре которого 1 строка "Закрыть()"
   Garykom
 
2 - 16.10.20 - 20:18
какая знакомая штука

тоже обработчик но не открывал/закрывал форму внутри первого сканирования а через обработчик ее

т.е. пик - надо открыть новую или закрыть текущую форму (активной станет предыдущая и там отработает ВводДоступен) то не сразу ее а запуская однократный ПодключитьОбработчикОжидания с 0.2-0.5 сек и уже в вызываемой им функции\процедуре выполнял открытие или закрытие формы.
   Garykom
 
3 - 16.10.20 - 20:19
Хотя это дикий костыль, по уму надо свой механизм сканирования куда формы регаются и им передаются события или нет
   Garykom
 
4 - 16.10.20 - 20:20
Фишка что ВшешнееСобытие прилетает во ВСЕ открытые формы, но обработка пойдет по очереди
   SHAS
 
5 - 16.10.20 - 20:44
Мне пока такой костыль пойдёт.

Оно скорее не "прилетает во все", а обходит все по очереди. Но к следующему оно переходит после того, как обработает предыдущий. И если событие не закрывает форму, то оно прийдёт в следующую форму, а в ней ВводДоступен() вернёт ложь. А если из "Внешнего события" первой формы она же закрывается, то после этого срабатывает в другой форме, которая при закрытии первой стала активной и в ней ВводДоступен() уже истина. Я путём "ПодключитьОбработчикОжидания" разрываю этот порочный круг. Внешнее событие успевает прошвырнуться по всем формам, пока не открывается процедура из ПодключитьОбработчикОжидания...
   Сияющий в темноте
 
6 - 18.10.20 - 20:25
по хорошему,нужно вводить флаг СобытиеОбработано,так как ситуаций много и можно попасть в несколько форм сразу.
также,нужно очень аккуратно работать с модально открытыми формами(или лучше вообще не работать)
есть вариант,когда в форме мы регистрируем в момент события того,кто будет обрабатывать,а ввзываем его из модуля приложения,куда прилетает событие после всех форм.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.