Имя: Пароль:
1C
 
Где хранится кеш модулей с повторно возвращаемыми значениями?
0 ЭтожЯ
 
23.09.15
12:49
Есть функция в модуле с повторно возвращаемыми значениями. База клиент-серверная. Функция вызывается фоновым заданием. Получает значение. А  потом ,по идее, это значение должна получать переменная  в событии При Записи документа. При использовании фонового задания, далее не получается использовать кешируемое значение. Без использования фонового, значение кешируемой функции получается повторно. Как можно решить эту проблему?
1 ЭтожЯ
 
23.09.15
12:49
Процедура ЦЗСОбменДаннымиСВесовойПриЗаписи(Источник, Отказ) Экспорт
    // Вставить содержимое обработчика.
    // выполнять действия если документ имеет тип самовывоз
    Попытка
        
    глV21Object=МодульПовтИспЗначений.ПолучитьЗначениеCOMСоединение();
    Исключение
    глV21Object=Неопределено;    
    КонецПопытки;
2 PR третий
 
23.09.15
12:51
(0) Правильно писать "хранится"
3 ЭтожЯ
 
23.09.15
12:52
(2)что делает?- хранится, да правильно пишется без мягкого знака, извините, тороплюсь.
4 Бубка Гоп
 
23.09.15
12:57
Помещать во временное хранилище?
5 ЭтожЯ
 
23.09.15
12:57
что помещать? значение?
6 Бубка Гоп
 
23.09.15
12:58
(5) ага
7 ЭтожЯ
 
23.09.15
12:59
Я думаю возможно дело в доступно Кеша- НаКлиенте, НаСервере. Может во время фонового задания значение сохранилось в серверном кеше, и как его теперь получить на клиенте?
8 Бубка Гоп
 
23.09.15
12:59
Кстати что за значение то, какой тип?
9 Cyberhawk
 
23.09.15
13:02
"Как можно решить эту проблему?" // какую проблему?
10 DexterMorgan
 
23.09.15
13:03
(0) те не это нада: http://catalog.mista.ru/public/62649/ ?
11 ЭтожЯ
 
23.09.15
13:12
(8)COMОбъект
12 ЭтожЯ
 
23.09.15
13:12
(10)Как получить значение функции, после выполнения этой функции фоновым заданием?
13 EugeniaK
 
23.09.15
13:18
(12) Никак.
Фоновое задание это другой сеанс.
Повторно используемые значения используются только в пределах сеанса.
14 Гёдза
 
23.09.15
13:19
В хранилище сеансовых данных наверно
15 Бубка Гоп
 
23.09.15
13:21
(12) все таки попробуй помещать во ВХ, возращать из фонового адрес и получать ПриЗаписи по этому адресу нужное значение.
16 ЭтожЯ
 
23.09.15
13:21
(13)ок. Как можно использовать одну переменную в фоновом задании и в клиентских вызовах?
17 Гёдза
 
23.09.15
13:23
Можно в фоновое задание параметр передать
18 EugeniaK
 
23.09.15
13:23
(16)  Заведи константу.
Хотя если это для COM-соединения, то никак.
19 DexterMorgan
 
23.09.15
13:24
Глобальный контекст.ПоместитьВоВременноеХранилище (Global context.PutToTempStorage)
Глобальный контекст (Global context)
ПоместитьВоВременноеХранилище (PutToTempStorage)

Примечание:

Также позволяет поместить данные из фонового задания в родительский сеанс. Для этого следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
20 GROOVY
 
23.09.15
13:25
(16)  На клиенте создаешь ВХ, и его адрес передаешь в фоновое.
Только не забудь ВХ связать с сеансом, а то оно убьется при серверном вызове.
21 ЭтожЯ
 
23.09.15
13:27
(19)Ок. Спасибо. сейчас буду пробовать.
22 Бубка Гоп
 
23.09.15
13:27
(19) (20) ТС, смотри сколько уже людей кроме меня предлагают использовать ВХ. Что тебя останавливает?
23 ЭтожЯ
 
23.09.15
13:33
Меня ничего не останавливает))Просто пытаюсь узнать все способы, в самом начале у нас была глобальная переменная, но это до фонового, но думаю глобальные переменные это дохлый номер в этом случае. Получается, что ее нужно объявлять и в модуле обычного приложения и в модуле внешнего соединения? И вообще как мне сказали, что  не рекомендуется в клиент-серверном варианте использовать глобальные переменные...
24 ЭтожЯ
 
23.09.15
13:34
Кто может как-то меня просвятить?
25 Cyberhawk
 
23.09.15
13:35
Просвятить тебя может батюшка в церкви.
А просветить тебя может процесс перечитывания ветки и поиск по ИТС, например.
26 Cyberhawk
 
23.09.15
13:35
+(25) или рентгеновский аппарат
27 apokrit
 
23.09.15
14:07
(0) Хранится в том процессе, в котором была вызвана функция. В разрезе сеансов.
Т.е. если значение было помещено в кеш, в фоновом задании - только в этом фоновом задании оно может быть получено.
28 ЭтожЯ
 
25.09.15
08:07
Сделала следующее: Создала Параметр Сеанса:
Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)
    
    // Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже
    // был установлен - возврат.
    Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если ИмяПараметра = "ЗначениеВременногоХранилища" Тогда      
        
        Адрес=УстановитьАдресВременногоХранилища();
        ПараметрыСеанса.ЗначениеВременногоХранилища =Адрес;
        УстановленныеПараметры.Добавить(ИмяПараметра);
    КонецЕсли;
КонецПроцедуры

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

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

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

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

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

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

Как правильно извлечь и поместить данные во временное хранилище  при использовании фонового задания?Вроде все делаю по синтаксис помошнику.
29 ЭтожЯ
 
25.09.15
08:09
Синтаксис помощнику
30 ЭтожЯ
 
25.09.15
08:35
Подскажите как правильно помещать данные во временное хранилище в фоновом задании и извлекать в родительском!!