Имя: Пароль:
1C
1С v8
Внешнее событие в обычных формах
0 SHAS
 
16.10.20
19:24
Добрый день!

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

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

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

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

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

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

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