Имя: Пароль:
1C
 
v8: 8.2 ВводДоступен() и ВнешнееСобытие - не могу разобраться что и как
0 dreadnouth
 
03.03.11
16:41
Стоит задача: чтобы обработчик ВнешнееСобытие выполнялся только в активной форме.

казалось бы - для этого есть прекрасная функция формы ВводДоступен(), но вот такая незадача
в форме списка справочника номенклатуры есть такой код:

Процедура ВнешнееСобытие(Источник, Событие, Данные)
сообщить("я вызвана из формы списка - мой ответ: "+ВводДоступен());
Если Не ВводДоступен() Тогда
       Возврат;
   КонецЕсли;
//прочий код дальше
КонецПроцедуры

в форме элемента того же справочника есть аналогичный код:
Процедура ВнешнееСобытие(Источник, Событие, Данные)
сообщить("я вызвана из формы элемента - мой ответ: "+ВводДоступен());
Если Не ВводДоступен() Тогда
       Возврат;
   КонецЕсли;
//прочий код дальше
КонецПроцедуры

при тестировании получаем следующую картину - если открыть справочник номенклатуры и потом что угодно открыть, например пару документов и  считать штрихкод(активен один из открытых документом), то в окне сообщений появится следующее:
я вызвана из формы списка - мой ответ: да

если ко всему прочему открыто несколько форм элементов номенклатуры(активна одна из форм элементов) то выдается следующее:
я вызвана из формы списка - мой ответ: да
я вызвана из формы элемента - мой ответ: да
я вызвана из формы элемента - мой ответ: да

платформа 1С:Предприятие 8.2 (8.2.11.236)

помогите разобраться!
1 hhhh
 
03.03.11
17:18
а где написано, что ВводДоступен() только в активной форме?
2 dreadnouth
 
03.03.11
17:24
УправляемаяФорма.ВводДоступен (ManagedForm.IsInputAvailable)
УправляемаяФорма (ManagedForm)
ВводДоступен (IsInputAvailable)
Синтаксис:

ВводДоступен()
Возвращаемое значение:

Тип: Булево.
Описание:

Определяет, возможен ли ввод данных в форму. Может быть использован для того, чтобы определить, активизирована ли текущая форма.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент
3 dreadnouth
 
03.03.11
17:28
подскажите есть ли другой способ определить активную форму?
4 hhhh
 
03.03.11
17:31
(2) так они все вроде активизированы.
5 a_alenkin
 
03.03.11
17:36
Внешнее событие сначала обрабатывается всеми открытыми формами, имеющими обработчик этого события, а затем может быть обработано в процедуре модуля обычного приложения с именем
6 dreadnouth
 
03.03.11
17:42
(4) и (5)
это в решении поставленной задачи ничем не поможет

(5)
а в какой порядке идет обработка события в открытых формах?
7 a_alenkin
 
03.03.11
17:43
Глобальный контекст (Global context)
АктивноеОкно (ActiveWindow)
Синтаксис:

АктивноеОкно()
Возвращаемое значение:

Тип: ОкноКлиентскогоПриложения; Неопределено.
Описание:

Получает текущее активное окно.

Доступность:

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

В режиме запуска клиентского приложения "Обычное приложение" возвращает Неопределено.
8 dreadnouth
 
03.03.11
17:47
(7) ключевая фраза
"В режиме запуска клиентского приложения "Обычное приложение" возвращает Неопределено."
9 a_alenkin
 
03.03.11
17:47
сравниваешь со своим окном в событии - если не оно - то не выполняешь его
10 dreadnouth
 
03.03.11
17:49
(9) смотрите (8)
11 a_alenkin
 
03.03.11
17:50
так в режиме обычного?
12 dreadnouth
 
03.03.11
17:52
(11) это очевидно из (8)
и к тому же в свете скорого выхода 14 версии платформы, вариант с АктивноеОкно() сразу потеряет актуальность и для управляемого режима.
13 a_alenkin
 
03.03.11
18:00
почему?
14 dreadnouth
 
03.03.11
18:03
(13) это не важно
важно то, что задача не решается таким образом=(
15 a_alenkin
 
03.03.11
18:06
а что в обычном режиме отличается такое поведение от 8.1?
16 dreadnouth
 
03.03.11
21:09
видимо отличается...

все ещё прошу помощи в текущем вопросе...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.