Имя: Пароль:
1C
1С v8
Не могу "ПодключитьОбработчикОжидания()"
0 mzelensky
 
08.04.14
14:44
Доброго всем.
Управляемая форма. Пишу (нажатие кнопки):

&НаКлиенте
Процедура СоздатьДокумент(Команда)
    ИнфоСостояние="";
    ПодключитьОбработчикОжидания("ОбновитьСостояние", 1, ложь);

    СоздатьДокументСервер();    
    ПолучитьДанныеНаСервере();
    УстановитьВидимость();
    
    ИнфоСостояние="";
    ОтключитьОбработчикОжидания("ОбновитьСостояние");    
КонецПроцедуры


&НаКлиенте
Процедура ОбновитьСостояние()
    Сообщить(ИнфоСостояние);

    Если ЗначениеЗаполнено(ИнфоСостояние) тогда
        Состояние(ИнфоСостояние);    
    КонецЕсли;
КонецПроцедуры

Почему-то обработчик ожидания так ниразу и НЕ выполняется. ПОЧЕМУ?
1 mzelensky
 
08.04.14
14:45
Так тоже пробовал:

Этаформа.ПодключитьОбработчикОжидания("ОбновитьСостояние", 1, ложь);

Результат тот же - не срабатывает
2 mzelensky
 
08.04.14
14:45
Процедуру "ОбновитьСостояние()" делал Экспортной, тоже не помогло
3 mzelensky
 
08.04.14
14:45
Что делаю не так?
4 Serginio1
 
08.04.14
14:49
Не успевает. Обработчик срабатывает, когда система простаиваеи и выбирает очередь сообщений. Тут дело просто не доходит до вызова.

Сделай отключение
ОтключитьОбработчикОжидания("ОбновитьСостояние");
в процедуре вызова

Процедура ОбновитьСостояние()
    Сообщить(ИнфоСостояние);

    Если ЗначениеЗаполнено(ИнфоСостояние) тогда
        Состояние(ИнфоСостояние);    
    КонецЕсли;

ОтключитьОбработчикОжидания("ОбновитьСостояние");
КонецПроцедуры
5 mzelensky
 
08.04.14
14:50
(4) Так он в эту процедуру вообще ни разу не заходит
6 Serginio1
 
08.04.14
14:52
Убери ОтключитьОбработчикОжидания и зайдет
7 Serginio1
 
08.04.14
14:53
Если бы в
СоздатьДокументСервер();    
    ПолучитьДанныеНаСервере();
    УстановитьВидимость();

выполнялись ассинхронно то все было бы прекрасно. Но увы все методы выполняются синхронно
8 Serginio1
 
08.04.14
14:59
Смотри справку
Описание:

Подключает вызов указанной процедуры модуля управляемого приложения (модуля обычного приложения) или глобального общего модуля через определенный интервал времени. Вызов будет осуществляться только в "состоянии покоя", то есть в тот момент, когда программа не выполняет никаких действий.
9 mzelensky
 
08.04.14
15:08
(8) Ну вообще-то там написано:

" Процедура будет вызываться в период ожидания системы "

Я читал СП :)
10 mzelensky
 
08.04.14
15:17
Но в общем понятно почему оно не работает.

А через БСП и ее длительную операцию?
11 Serginio1
 
08.04.14
15:18
(9) Но она же не ожидает, а выполняет

СоздатьДокументСервер();    
    ПолучитьДанныеНаСервере();
    УстановитьВидимость();
12 Serginio1
 
08.04.14
15:23
Ну через фоновое задание можно
http://infostart.ru/public/159607/
13 mzelensky
 
08.04.14
15:27
(12) Да, смотрел я эту статью - там дурдом просто. И Пример из БСП тоже открывали...там все почему-то через дополнительные обработки и целая куча писанины, не совсем понятной.
14 Serginio1
 
08.04.14
15:34
(13) А ИнфоСостояние ты в этих процедурах изменяешь?


СоздатьДокументСервер();    
    ПолучитьДанныеНаСервере();
?

Если да, то можешь выбирать сообщения СообщениеПользователю
или например через значение в регистре сведений.
15 mzelensky
 
08.04.14
15:39
(14) Ну да. В серверных процедурах обновляю общую переменную, а в обработчике ожидания хочу выводить значение этой переменной.
16 DexterMorgan
 
08.04.14
15:52
У тебя блокировка фоновых заданий случайно не включена?
17 Serginio1
 
08.04.14
15:54
(15) Ну так и делай через фоновое задание только пиши не в переменную а в регистр.
18 mzelensky
 
08.04.14
16:08
(17) Да не хочется гемороя этого. Фоновые задания, регистры...осталось еще план видов характеристик прикрутить, да регистр бухгалтерии и вообще полный ахтунг будет!
2 + 2 = 3.9999999999999999999999999999999...