Имя: Пароль:
1C
 
Как использовать временное хранилище в фоновом задании
,
0 ЭтожЯ
 
25.09.15
09:10
Необходимо Получить переменную COMсоединения в фоновом задании, и в дальнейшем использовать ее на клиенте.При записи документа например. Посоветовали использовать временное хранилище.Но что-то не получается.
Сделала следующее: Создала Параметр Сеанса:
Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)
    
    // Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже
    // был установлен - возврат.
    Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если ИмяПараметра = "ЗначениеВременногоХранилища" Тогда      
        
        Адрес=УстановитьАдресВременногоХранилища();
        ПараметрыСеанса.ЗначениеВременногоХранилища =Адрес;
        УстановленныеПараметры.Добавить(ИмяПараметра);
    КонецЕсли;
КонецПроцедуры

Функция  УстановитьАдресВременногоХранилища()
    
    Адрес=ПоместитьВоВременноеХранилище(, Новый УникальныйИдентификатор());

Возврат Адрес;
    
    
КонецФункции

При открытии формы списка документа вызываю фоновое задание:
МассивПараметров=Новый Массив();
     МассивПараметров.Добавить(ПараметрыСеанса.ЗначениеВременногоХранилища);
      
    
     ФоновыеЗадания.Выполнить("МодульФоновыхЗаданий.УстановитьCOMСоединение",МассивПараметров);

Фоновое задание:

Процедура УстановитьCOMСоединение(Адрес) Экспорт    
Если  ЗначениеЗаполнено(Константы.ПутьКБазеАвтовесов.Получить()) Тогда
    //глV21Object = Неопределено;
    ПутьКБазе = Константы.ПутьКБазеАвтовесов.Получить();
    СтруктураПодключения = МодульРегламентныхЗаданий.ПолучитьСтруктуруПодключения_Авто(ПутьКБазе) ;
    глV21Object              = МодульРегламентныхЗаданий.ПодключитсяКИнформационнойБазе2(СтруктураПодключения);
    Если глV21Object = Неопределено Тогда
        
        # Если Клиент Тогда
            Сообщить( "Ошибка подключения к базе данных!!!", СтатусСообщения.Важное ) ;
        #КонецЕсли
             
        //Возврат Неопределено ;
        
    Иначе
            
        //Возврат глV21Object;
        
        #Если Клиент Тогда
            
            Сообщить( ""+ТекущаяДата() + " - Подключение к конфигурации "+глV21Object.Метаданные.Synonym+" выполнено успешно!" ) ;
        #КонецЕсли    
        
    КонецЕсли;
//Значение глV21Object=СОМобъект    
ПоместитьВоВременноеХранилище(глV21Object, Адрес);    
    
КонецЕсли;    
КонецПроцедуры

При извлечении данных ПриЗаписи документа переменная =неопределенно
Попытка
        глV21Object=ПолучитьИзВременногохранилища(ПараметрыСеанса.ЗначениеВременногоХранилища);
  
    Исключение
        
    КонецПопытки;    

Как правильно извлечь и поместить данные во временное хранилище  при использовании фонового задания?Вроде все делаю по синтаксис помощнику.
1 Fragster
 
гуру
25.09.15
09:14
> COMсоединения в фоновом задании, и в дальнейшем использовать ее на клиенте

не выйдет
2 ЭтожЯ
 
25.09.15
09:15
что не выйдет?
3 ЭтожЯ
 
25.09.15
09:16
Примечание:

Также позволяет поместить данные из фонового задания в родительский сеанс. Для этого следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
4 Апош
 
25.09.15
09:16
(2) закрой глаза и представь себя фоновым заданием...
5 ЭтожЯ
 
25.09.15
09:17
объясните объективно почему?
6 Fragster
 
гуру
25.09.15
09:18
(5) можно использовать только сериализуемые значения
7 ЭтожЯ
 
25.09.15
09:18
Синтаксис помощник говорит о другом, возможно это я не правильно делаю
8 ЭтожЯ
 
25.09.15
09:23
как быть -то с ком-соединением... уже неделю бьюсь
9 aleks_default
 
25.09.15
09:42
само com-соединение на клиент передать нельзя, можно только какое-либо сериализуемое значение из этого соединения
10 Fragster
 
гуру
25.09.15
10:32
11 Провинциальный 1сник
 
25.09.15
10:34
(9) Ну это логично. Ведь что такое ком-соединение? Это по сути запущенная где-то программа со своим контекстом выполнения. Если она запущена на сервере в фоновом задании, то откуда её контекст возникнет на клиенте?
12 ЭтожЯ
 
25.09.15
10:41
(10):))
13 ЭтожЯ
 
25.09.15
10:45
Хорошо, я так поняла, что это в принципе невозможно?
14 ДенисЧ
 
25.09.15
10:47
(13) Понятливая...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn