Имя: Пароль:
1C
1С v8
Фоновые задания и сообщения...
, ,
0 ДенисЧ
 
24.09.12
12:31
Есть процедурка в общем серверном модуле.

&НаСервере
Процедура ТестФоновоеЗадание(мДанные) Экспорт
   Сообщ = Новый СообщениеПользователю;
   сообщ.Текст = "Старт";
   сообщ.Сообщить();
КонецПроцедуры


Запускаю фоновое задание

Перем Задача;
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
   ПодключитьОбработчикОжидания("Ожидание", 10);
   
   Задача = ФоновыеЗадания.Выполнить("Мой_Производство.ТестФоновоеЗадание");
   Ожидание();
КонецПроцедуры

Процедура  Ожидание()
   Сообщить("Читаем сообщения...");
   сообщ = Задача.ПолучитьСообщенияПользователю(Ложь);
   Если сообщ = Неопределено Тогда
       Сообщить("ПУсто");
       Возврат ;
   КонецЕсли;
   Если сообщ.Количество() > 0 Тогда
       Для каждого с из сообщ Цикл
           Сообщить("" + с);
       КонецЦикла;
   Иначе
       Сообщить("Ничего нет");
   КонецЕсли;
КонецПроцедуры


В результате имею "Пусто", никаких сообщений наружу не вылезает... Вообще, это должно работать?
1 rs_trade
 
24.09.12
12:31
(0) сервер молча читает твои сообщения. а что читает, тебе не скажет.
2 HouseCD
 
24.09.12
12:36
Можно воспользоваться методом фонового задания ПолучитьСообщенияПользователю()
3 ДенисЧ
 
24.09.12
12:38
(2) А я каким пользуюсь?
4 HouseCD
 
24.09.12
12:48
Сори, не заметил код. Метод Выполнить() у менеджера фонового задания доступен только на сервере, как и ПолучитьСообщенияПользователю(). Есть подозрение, что оно вообще не создается...
5 ДенисЧ
 
24.09.12
12:56
(4) оно создаётся и выполняется, если верить консоли заданий. И попытке динамического обновления... И журналу регистрации.
Да, клиент у меня толстый, в обычных формах.
6 HouseCD
 
24.09.12
13:00
Передавай задачу в качестве параметра методу Ожидание(), не используй переменную. Дело в том, что пока ты был на клиенте и инициализировал переменную, потом пока сходил на сервер, ее уже не стало на клиенте
7 ДенисЧ
 
24.09.12
13:05
(6) А как параметр передам в обработку ожидания?

Более того, я специально циклил задачу, чтобы она не заканичвалась. Тогда ПолучитьСообщенияПользователю() Возвращает пустой массив, а не неопределено
8 Jaap Vduul
 
24.09.12
13:06
По-моему, в толстом не работает.
9 HouseCD
 
24.09.12
13:12
В данном примере процедура Ожидание() просто вызывается при нажатии..
Тут еще вот что еще может быть, метод ПолучитьСообщенияПользователю() отрабатывает и во время выполнения фонового задания, т.е. к моменту вызова, фоновое задание может быть еще не завершено. Можно попробовать вызвать одноименный метод глобального контекста.
10 pumbaEO
 
24.09.12
13:14
Я сообщения передаю через временноехранилище, при фоновом проведении .
11 ДенисЧ
 
24.09.12
13:22
(9) В приведенном примере Ожидание() срабатывает и при нажатии, и после.
(10) Не совсем понял мысль, можешь пояснить?
12 pumbaEO
 
24.09.12
13:27
Создаю временное хранилище, его адрес передаю в фоновое задание как параметр, фоновое задание результат своей работы пишет в по адресу во временное хранилище, периодически извлекаю данные из временного хранилища.
13 ДенисЧ
 
24.09.12
13:35
(12) Ага. Попробую.