Имя: Пароль:
1C
1С v8
Глобальная переменная модуля обработки на сервере
0 Slon747
 
16.09.16
10:38
УФ. В модуле обработки нужно хранить строковую переменную между вызовами процедур на сервере.
Как лучше сделать?
1 Лефмихалыч
 
16.09.16
10:39
реквизит обработки для этого используй
2 Slon747
 
16.09.16
10:41
(1) А изящнее никак? Вроде как ВременноеХранилище для этого можно использовать. Но как-то тоже не очень просто писать/читать.
3 Остап Сулейманович
 
16.09.16
10:44
(0) Классика жанра - передавать параметром при каждом вызове.
4 Slon747
 
16.09.16
10:46
Что за черт?
Создал реквизит обработки, записываю в него данные.
На сервере этот реквизит пуст.
???
5 Slon747
 
16.09.16
10:53
Сохраняю:
МояПеременная = "123";

Отладчик:
МояПеременная = "123"
ЭтотОбъект.МояПеременная = "123"

Вызов процедуры на сервере:
МояПеременная = ""
ЭтотОбъект.МояПеременная = ""
6 Остап Сулейманович
 
16.09.16
10:58
(5) МояПеременная остается там, где объявлена. На клиенте - значит на клиенте. На сервере - значит на сервере до передачи управления на клиент.
7 4St
 
16.09.16
11:00
&НаСервере
Перем мОбработкаОбъект; //кэш на время серверного вызова

&НаСервере
Функция ОбработкаОбъект()
    
    Если мОбработкаОбъект=Неопределено Тогда
        
        мОбработкаОбъект = РеквизитФормыВЗначение("Объект");
            мОбработкаОбъект.МояПеременная = МояПеременнаяКакРеквизитНаФорме;
        
    КонецЕсли;
    
    Возврат мОбработкаОбъект;
    
КонецФункции
    
&НаКлиенте
Процедура ЖмиКнопку()
ЖмиКнопкуНаСервере();
КонецПроцедуры


&НаСервере
Процедура ЖмиКнопкуНаСервере()
ОбработкаОбъект().МояФункция(); // it's a kind of magic, lalala
КонецПроцедуры
8 RomanYS
 
16.09.16
11:00
(5) А РеквизитФормыВЗначение ты делаешь?
9 В тылу врага
 
16.09.16
11:02
реквизиты объекта живут на сервере только до конца вызова с клиента, в следующем вызове как и не бывало

такой вот велосипедный концепт
10 Slon747
 
16.09.16
11:25
(7) Не понял.
Сделал так:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    ПриОткрытииНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
    
    ОбработкаОбъект().УстановитьВерсиюКонфигурации();
    
КонецПроцедуры

&НаСервере
Функция ОбработкаОбъект()
    
    Если мОбработкаОбъект=Неопределено Тогда
        
        мОбработкаОбъект = РеквизитФормыВЗначение("Объект");
        мОбработкаОбъект.ВерсияКонфигурации = мОбработкаОбъект.ПолучитьВерсиюКонфигурации();
        
    КонецЕсли;
    
    Возврат мОбработкаОбъект;
    
КонецФункции


Как мне теперь прочитать переменную ВерсияКонфигурации в модуле обработки?
11 4St
 
16.09.16
12:21
(10)
Эта строка
мОбработкаОбъект.ВерсияКонфигурации = мОбработкаОбъект.ПолучитьВерсиюКонфигурации();
намекает на то, что глобальная переменная ВерсияКонфигурации в модуле обработки уже не нужна, раз есть такая функция. Надо просто выпилить обращение к этой переменной и заменить его вызовом функции. Результат функции кэшировать - примерно так же, как кэшируется ОбработкаОбъект().
Но вопрос, похоже, не в этом.
"Как мне теперь прочитать переменную ВерсияКонфигурации в модуле обработки?"
А откуда ты ее собираешься читать? С клиента?

P.S. Вместо

Процедура ПриОткрытии(Отказ)
    
    ПриОткрытииНаСервере();
    
КонецПроцедуры

&НаСервере
Процедура ПриОткрытииНаСервере()
    
    ОбработкаОбъект().УстановитьВерсиюКонфигурации();
    
КонецПроцедуры

лучше делать

&НаСервере
Процедура ПриСозданииНаСервере()
    
    ОбработкаОбъект().УстановитьВерсиюКонфигурации();
    
КонецПроцедуры

хотя, повторюсь, даже это здесь ни к чему.
12 polosov
 
16.09.16
12:31
(0) В ут11 есть

Процедура ХранилищеОбщихНастроекСохранить(КлючОбъекта, КлючНастроек = "", Значение,
    ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено,
    НужноОбновитьПовторноИспользуемыеЗначения = Ложь) Экспорт

Функция ХранилищеОбщихНастроекЗагрузить(КлючОбъекта, КлючНастроек = "", ЗначениеПоУмолчанию = Неопределено,
    ОписаниеНастроек = Неопределено, ИмяПользователя = Неопределено) Экспорт