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

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

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

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

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

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

Как сделать, чтобы после попадания во внешнее событие Д2, не срабатывало внешнее событие в Д1 (или ВводДоступен() получало Ложь)?
 
 Партнерская программа EFSOL Oblako
   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 или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.