Имя: Пароль:
1C
1С v8
Как узнать, заблокирован ли интерфейс формой?
, ,
0 alexei366
 
14.09.16
16:33
Есть база на 8.2, обычные формы.
Нужно узнать в коде, не блокирует ли сейчас интерфейс некая форма (самого факта будет достаточно, кто блокирует не важно).
Пока толком ничего не нашел ни в СП, ни в интернете, так что подскажите, кто что знает.
1 Jokero
 
14.09.16
16:42
может это?

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

Тип: Булево.
Истина - ввод данных в форму возможен (форма активна); Ложь - форма не активна.
Описание:

Определяет, возможен ли ввод данных в форму. Может быть использован для того, чтобы определить, активизирована ли текущая форма.
2 alexei366
 
14.09.16
17:10
(1) Представим что я нахожусь в модуле приложения, в процедуре вызванной обработчиком ожидания. То есть у меня нет формы в которой я работаю, тогда я не смогу использовать данный метод.
Есть ли еще у кого какие идеи?
3 Fragster
 
гуру
14.09.16
17:15
(2) а ты уверен, что твой обработчик ожидания при открытой, блокирующей весь интерфейс форме, сработает?
4 alexei366
 
14.09.16
17:32
(3) Сам офигел, но он работает(((((
5 alexei366
 
14.09.16
17:33
(3) Собственно в этом то и проблема, чтобы разные обработчики не наплодили блокирующих окон сотни
6 Fragster
 
гуру
14.09.16
17:40
(4) именно "блокировать весь интерфейс"?
7 Fragster
 
гуру
14.09.16
17:40
(5) открывать окно моветон. сделай форму на рабочий стол и показывай оповещение периодически
8 Fragster
 
гуру
14.09.16
17:40
ну, на краяняк воспользуйся ключем уникальности, чтобы вторую форму не открывать
9 Fragster
 
гуру
14.09.16
17:41
в БСП в напоминаниях это реализовано
10 alexei366
 
14.09.16
17:57
(9) Может, может. Но желание пока такое. Есть различные обработчики ожидания, которые могут выкидывать блокирующие окна, чтоб пользователь обязательно среагировал. Но в текущей ситуации могут быть случаи когда такие окна будут наслаиваиться, если каждый обработчик не будет чекать заблокирован ли интерфейс или нет.
И хотелось бы чекать каждым обработчиком, а не писать какие-нибудь механизмы флагов и т.п.,  и оставить жесткую блокировку интерфейса.
11 Vaflya
 
14.09.16
18:56
константу поставь Заблокирован
12 ifso
 
14.09.16
20:58
(10)
> Есть различные обработчики ожидания, которые могут
> выкидывать блокирующие окна, чтоб пользователь обязательно
> среагировал.
чё за афтоматизация когда фсёвручную?
13 Torquader
 
14.09.16
22:22
В данном случае, пишется одно окно, в котором будут отображаться все предупреждения - для этого просто кнопка "Закрыть" переименовывается в кнопку "Следующее" и хранится массив сообщений.
По крайней мере, у меня с 7.7 так было сделано, и - форма не была блокирующей - просто пользователю, если требовалась его реакция - не давали форму закрыть.
14 alexei366
 
14.09.16
23:09
(12) Не все конечно, но есь операции не требующие отлагательсв, ну или такие могут повлятся. Да даже представим, что при рабое пользоваел просто выпадает блокируещее окно, при выборе чегото там, и обрабочик ожидания тоже хоче заблокировать, во от этих моментов хочу и избавиться.
15 alexei366
 
14.09.16
23:12
(13) Думалось об этом, но капаться придется долго и много всего всего переписывать. Такие затраты пока неоправданы. Проблема, которую я описал, в жизни почти встречаться не будет, при работе пользователя, но хочется конечно решить.
16 Torquader
 
14.09.16
23:14
(15) Просто, если пользователь занят чем-то одним, а в этот момент всплывает окно, то у пользователя одно желание - побыстрее закрыть окно.
17 alexei366
 
14.09.16
23:21
(16) Это уже организаторский уровень, есть события на которые нужно реагировать оперативно.
18 youalex
 
14.09.16
23:40
(17) это кривая организация. Если, конечно, не сам юзер задает, какие окна у него должны вылазить и блокировать всю работу в тот момент, когда он реализацию на тыщу строк колбасит.
19 youalex
 
14.09.16
23:43
Кстати, очень жаль, что Оповестить()  - это не функция, результатом которой является (условно) - массив ответов всех открытых форм, способных ответить на данное сообщение.
20 alexei366
 
14.09.16
23:43
(18) Возможно. Тут еще подумаем. Но сам вопрос по определению в коде блокирован ли интерфейс всеже инересен
21 Torquader
 
14.09.16
23:44
(20) Вообще-то, 1С призывает отказаться от модальности, так что эти вопросы, со временем, станут совсем не актуальными.
22 alexei366
 
14.09.16
23:45
(19) Можно по другому завернуть, передавать в параметрах форму котора вызывае события, а из других уже юзать экспортный метод или както еще
23 alexei366
 
14.09.16
23:46
(21) Прими это как не модальные окна, а окна блокирующие интерфейс, такие и при отказе о модальности остаются)
24 youalex
 
14.09.16
23:53
(22) без полновесного обмена сообщениями между формами - лучше заюзать контекст сеанса, что угодно - параметр сеанса, разного рода блокировки (от блокировки сеанса до  ЗаблокироватьДанныеДляИзменения()) . Через параметр сеанса (в который в виде ХЗ можно пихать всё, и структуру в т.ч.)- думаю, можно нормально рулить. Но через оповещения было бы красивше.
25 Torquader
 
15.09.16
00:01
(23) Так это тоже самое - например - в Windows модальный диалог всего-лишь блокирует интерфейс основного окна, просто убивая сообщения ввода данных из его очереди.
26 youalex
 
15.09.16
00:09
(25) в 1с 77 (проверял в недавней теме) - при открытии модального окна - тупо все остальные окна приложения становятся disabled (смотрел через Windows Scanner). Сомневаюсь, что при этом они не способны ловить сообщения.
27 Torquader
 
15.09.16
00:19
(26) Так это и есть "неспособность принимать сообщения ввода".
28 Torquader
 
15.09.16
00:21
В семёрке, я, играясь с очередью сообщений, заставлял её пересчитывать бухгалтерские итоги в момент проведения документа - и оно даже работало.
29 alexei366
 
15.09.16
13:03
Эх, задача с определением состояния интерфейса, или получением списка открытых форм (без модернизации этих форм) в обычном интерфейсе не решается встроенными процедурами и функциями 1С((((