Передача параметров из фонового задания 8.2

Страницы: 1

В описании функции "ПоместитьВоВременноеХранилище" есть интересное примечание:
"Примечание:
Также позволяет поместить данные из фонового задания в родительский сеанс. Для этого следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание."

Сколько не бьюсь - реализовать не получается. Хотя вроде все по инструкции. Может кто уже пробовал реализовать?


Странно, неужели никого не волновала эта проблема? :(


Так стоило бы свой код показать.


из справочника запускаю процедуру

&НаСервере
Процедура ЗапуститьФоновоеЗадание()
	
	АдресДанных= ПоместитьВоВременноеХранилище("", ЭтаФорма.УникальныйИдентификатор);
   Ключ = Новый УникальныйИдентификатор;

    МассивПараметров = Новый Массив(1);
    МассивПараметров[0] = АдресДанных;
    ФоновыеЗадания.Выполнить("ИнформационныеБазыСервер.ТЕСТ", МассивПараметров, Ключ, "Получение параметра"); 
	
КонецПроцедуры	
...Показать Скрыть


АдресДанных - строковой реквизит формы

в глоб. модуле (галки сервер и вызов сервера):

Процедура ТЕСТ(АдресДанных) Экспорт
	
	стр2 = ПоместитьВоВременноеХранилище("ТестовоеСлово", АдресДанных);
	
КонецПроцедуры
...Показать Скрыть


Теперь в том же справочнике

&НаСервере
Процедура ПолучитьСлово()
		
	Слово = ПолучитьИзВременногоХранилища(АдресДанных);

//Тут должно вернуться "ТестовоеСлово" а на самом деле ""....
КонецПроцедуры
...Показать Скрыть


(4) В последнем коде откуда берется адрес данных?


(5) АдресДанных - строковой реквизит формы

Изменено: Andrey - 19.01.10 15:48


Тогда, думаю все дело в

"стр2 = ПоместитьВоВременноеХранилище("ТестовоеСлово", АдресДанных);"

Новый адрес хранилища - стр2, по нему и надо получать значение. А адрес данных служит для уникальной идентификации значения, чтобы оно не очищалось.


Так весь фокус в том что в родительском сеансе мы знаем адрес в котором будут лежать данные из фонового задания. Если адрес получается при помещении в хранилище в задании то как его передать родителю? :-)

Ps: Кстати, перед тем как добавить тему, я подозревал процентов на 90, что общение по этим вопросам будет только с тобой. :)


Всем доброго времени суток. Удалось ли побороть проблему? столкнулся ровно с такой же) Заранее спасибо.


(4) Andrey, дайте пожалуйста весь связанный код. Например, откуда вызывается ПолучитьСлово(), где вы пытаетесь достаеть результат?
Короче, сможете сделать конкретный пример воспроизведения в виде обработки, чтобы не тратить время на подготовку к поиску проблемы?

Ответили: (11)

(10) Evil Beaver,вот мой пример кода:

(Конфигурация УПП релиз 1.3.45.2, платформа 8.3.4.465, база файловая)

 &НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    ПодключитьОбработчикОжидания("ОбработчикОжидания_ОбновитьИндикаторыВыполненияЭтапов", 5);
    
    АдресВременногоХранилища = ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор);
    ИдентификаторЗадания = "ДействияПоЗавершениюПервичногоОсомтра_" + АктТехническогоОсмотра.УникальныйИдентификатор();
    ПараметрыЗадания = Новый Массив;
    ПараметрыЗадания.Добавить(АктТехническогоОсмотра);
    ПараметрыЗадания.Добавить(АдресВременногоХранилища);
    ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗадания, ИдентификаторЗадания);
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработчикОжидания_ОбновитьИндикаторыВыполненияЭтапов()
    
    СтруктураПараметровВыполнения = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); //ПолучитьСтруктуруПараметровВыполненияФоновогоЗаданияНаСерв­ере();

   . . .     
   // Далее на форму выводятся полученные результаты
        
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ВыполнитьФоновоеЗаданиеНаСервере(ПараметрыЗадания, ИдентификаторЗадания)
    
    ВыполнитьОбработкуЗаданий();
    
    ФоновоеЗадание = ФоновыеЗадания.Выполнить("ЮИК_РаботаСФоновымиЗаданиями.ВыполнитьДействияПоЗавершениюПервичногоОсомтра", ПараметрыЗадания, ИдентификаторЗадания);
    // Пробовал и с ожиданием завершения, и без
    Попытка
        ФоновоеЗадание.ОжидатьЗавершения(2);
    Исключение
        
    КонецПопытки;    
    
КонецПроцедуры

// Модуль выполнения фонового задания

Процедура ВыполнитьДействияПоЗавершениюПервичногоОсомтра(АктТехническогоОсмотра, АдресВременногоХранилища) Экспорт
    
    СтруктураПараметровВыполнения = Новый Структура("ИндексЭтапа, ИндикаторЭтапа1МаксимальноеЗначение, ИндикаторЭтапа1ТекущееЗначение,
                                                       |ИндикаторЭтапа2МаксимальноеЗначение, ИндикаторЭтапа2ТекущееЗначение,
                                                       //|ИндикаторЭтапа3МаксимальноеЗначение, ИндикаторЭтапа3ТекущееЗначение,

                                                       |ИндикаторЭтапа3,
                                                       |ИндикаторЭтапа4МаксимальноеЗначение, ИндикаторЭтапа4ТекущееЗначение",
                                                       0,0,0,0,0,0,0,0,0);
        
    СтруктураПараметровВыполнения.ИндексЭтапа = 1;
    ПоместитьВоВременноеХранилище(СтруктураПараметровВыполнения, АдресВременногоХранилища);
        
    ВыполнитьПервыйВторойЭтап(СтруктураПараметровВыполнения, АдресВременногоХранилища);
    
    СтруктураПараметровВыполнения.ИндексЭтапа = 3;
    ПоместитьВоВременноеХранилище(СтруктураПараметровВыполнения, АдресВременногоХранилища);
        
    СсылкаНаДокументОПЗС = ВыполнитьТретийЭтап(СтруктураПараметровВыполнения, АдресВременногоХранилища);
    
    СтруктураПараметровВыполнения.ИндексЭтапа = 4;
    ПоместитьВоВременноеХранилище(СтруктураПараметровВыполнения, АдресВременногоХранилища);
    
    
    ВыполнитьЧетвертыйЭтап(СсылкаНаДокументОПЗС, СтруктураПараметровВыполнения, АдресВременногоХранилища);
    
КонецПроцедуры
...Показать Скрыть

Ответили: (13)
+ 2 [ 4Shikari; FSerg; ]

Пытался сделать алгоритм через ПолучитьСообщенияПользователю, возвращает пустой массив. Такое впечатление, будто задание не выполняется, хотя в консоли пишет, что процесс идет.


(11) non1ka, спасибо за пример кода, очень помогло!

Страницы: 1
Форма ответов
Логин:
Пароль:
Текст сообщения*
Прикрепить файл