|   |   | 
| 
 | Фоновые задания, Временное хранилище и Обычные формы | ☑ | ||
|---|---|---|---|---|
| 0
    
        seperblunt2 23.07.19✎ 09:47 | 
        Всем добрый день.
 Пытаюсь реализовать возврат результат работы ФЗ в "клиента" на обычных формах через временное хранилище. Не могу сообразить, что нужно передать в качестве УникальногоИдентификатора формы в моменте когда получаешь адрес ВХ для передачи его в ФЗ. На УФ это выглядит так: Адрес_ВХ = ПоместитьВоВременноеХранилище(Неопределено, ЭтаФорма.УникальныйИдентификатор); на ОФ - что передать? КлючУникальности не отрабатывает.. | |||
| 1
    
        zwolf 23.07.19✎ 09:53 | 
По-моему, так исчерпывающе | |||
| 2
    
        seperblunt2 23.07.19✎ 09:57 | 
        (1) УникальныйИдентификатор формы есть только в УФ и там у меня все хорошо отрабатывает 
 (реализую многопоточность - готовятся куча ТаблицЗначений).. ... или я чего то не увидел в исчерпывающей справке? | |||
| 3
    
        Andreyyy 23.07.19✎ 10:01 | 
        Адрес_ВХ = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);     | |||
| 4
    
        zwolf 23.07.19✎ 10:02 | 
        (2) > готовятся куча ТаблицЗначений
 Глубоко поъ. Третий абзац. | |||
| 5
    
        seperblunt2 23.07.19✎ 10:04 | 
        (3)(4) Тогда то, что помещу во временном в фоновое не будет доступно из формы: 
 Временное хранилище, сформированное в одном сеансе, недоступно из другого сеанса. Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание. | |||
| 6
    
        Andreyyy 23.07.19✎ 10:05 | 
        С ОФ какая-то засада была для клиент-сервера и пришлось сделать так:
 1. Адрес получать в модуле на сервере: АдресРезультатаФоновогоЗадания = ОбщийМодульНаСервереТакойТо.ПолучитьАдресРезультатаФоновогоЗадания(КлючУникальности); Функция ПолучитьАдресРезультатаФоновогоЗадания(УникальныйИдентификатор) Экспорт Возврат(ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор)); КонецФункции | |||
| 7
    
        Andreyyy 23.07.19✎ 10:07 | 
        2. Получение результата:
 РезультатПодключения = ОбщийМодульНаСервереТакойТо.ПолучитьРезультатФоновогоЗадания(АдресРезультатаФоновогоЗадания); УдалитьИзВременногоХранилища(АдресРезультатаФоновогоЗадания); Функция ПолучитьРезультатФоновогоЗадания(АдресРезультатаФоновогоЗадания) Экспорт Возврат(ПолучитьИзВременногоХранилища(АдресРезультатаФоновогоЗадания)); КонецФункции | |||
| 8
    
        seperblunt2 23.07.19✎ 10:13 | 
        (6) (7) - увы не взлетело 
 модуль формы: Процедура Кнопка1Нажатие(Элемент) Массив_Заданий = Новый Массив; Для Сч = 1 По 1 Цикл Массив_Параметров = Новый Массив; Адрес_ВХ = РК_Операции_BI.ПолучитьАдресРезультатаФоновогоЗадания(КлючУникальности); //Адрес_ВХ = ПоместитьВоВременноеХранилище(Неопределено, КлючУникальности); ////Адрес_ВХ = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор); Массив_Параметров.Добавить(Адрес_ВХ); //СтрЗаменить(Новый УникальныйИдентификатор, "-", "_") Задание = ФоновыеЗадания.Выполнить("РК_Операции_BI.Поместить_ТЗ_В_Ячейку_Памяти", Массив_Параметров, , "Тест_фона"); Массив_Заданий.Добавить(Новый Структура("Задание, Адрес_ВХ", Задание, Адрес_ВХ)); КонецЦикла; КонецПроцедуры Процедура Кнопка2Нажатие(Элемент) Для каждого Сохр_Задание Из Массив_Заданий Цикл Тек_Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Сохр_Задание.Задание.УникальныйИдентификатор); Если Тек_Задание.Состояние = СостояниеФоновогоЗадания.Завершено Тогда Результат = РК_Операции_BI.ПолучитьРезультатФоновогоЗадания(Сохр_Задание.Адрес_ВХ); УдалитьИзВременногоХранилища(Сохр_Задание.Адрес_ВХ); Если ЗначениеЗаполнено(Результат) Тогда Сообщить(Результат); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры Процедура ПриОткрытии() КлючУникальности = Новый УникальныйИдентификатор; КонецПроцедуры модуль РК_Операции_BI: Процедура Поместить_ТЗ_В_Ячейку_Памяти(Адрес_Ячейки) Экспорт ГС = Новый ГенераторСлучайныхЧисел; ПоместитьВоВременноеХранилище(ГС.СлучайноеЧисло(100, 200), Адрес_Ячейки); Сообщить(ГС.СлучайноеЧисло(100, 200)); КонецПроцедуры Функция ПолучитьАдресРезультатаФоновогоЗадания(УникальныйИдентификатор) Экспорт Возврат(ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор)); КонецФункции Функция ПолучитьРезультатФоновогоЗадания(АдресРезультатаФоновогоЗадания) Экспорт Возврат(ПолучитьИзВременногоХранилища(АдресРезультатаФоновогоЗадания)); КонецФункции | |||
| 9
    
        Andreyyy 23.07.19✎ 10:15 | 
        (8) КлючУникальности это свойство формы, присваивать ничего не нужно.     | |||
| 10
    
        seperblunt2 23.07.19✎ 10:22 | 
        (7) (8) заработало - снимаю шляпу. На модуле стояла галка "Клиент" сделал в чисто серверном модуле - полетело. 
 Благодарю | |||
| 11
    
        seperblunt2 23.07.19✎ 10:24 | 
        Миста всемогущая :)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |