Глобальные переменные в контексте сервера 8.2. Простое решение.


Можно ли в 8.2 на сервере хранить ссылку на какой либо объект?
Можно! Рассмотрим на примере...

Эта статья - более простая реализация решения задачи описанной в http://avprog.ru/public/62410/

Платформа 8.2 простым штатным способом позволяет реализовывать глобальные переменые на сервере. Достигается это использованием модулей с признаком "Повторное использование возвращаемых значений" установленным в значение "На время сеанса". Установка данного признака заставляет систему помнить все возвращаемые значения. Как сказано в СП:

Если для общего модуля установлено значение "На время вызова" или "На время сеанса", то возвращаемые значения экспортных функций повторно используются в разрезе входных значений их параметров.

Для сброса значений необходимо вызвать функцию:

	 ОбновитьПовторноИспользуемыеЗначения()

Таким образом задача решается без всяких извращений.

 

Для демонстрации приложена конфигурация, с одной единственной обработкой, со следующим текстом:

	 Процедура КнопкаВыполнитьНажатие(Кнопка)
    ОчиститьСообщения();
    Тест.ВывестиЗначенияСтруктуры();
КонецПроцедуры

Модуль "Тест" (Сервер, Вызов сервера):


Функция ВывестиЗначенияСтруктуры() Экспорт
    Соответствие = Переменные.ПолучитьПеременную();
    Для Каждого КлючЗначение Из Соответствие Цикл
        Сообщить(КлючЗначение.Ключ);
    КонецЦикла;
    Соответствие.Вставить(ТекущаяДата(), ТекущаяДата());
КонецФункции

И модуль "Переменные" (Сервер, Повторное использование возвращаемых значений=На время сеанса):


Функция ПолучитьПеременную() Экспорт
    Сообщить("Создаем объект"); //Эта строка выполнится один раз за сеанс!
    Возврат Новый Соответствие; //и эта тоже!
КонецФункции

Ложка дегтя - все что написано выше - неправильно. Везде, где написано "сеанс" надо читать "20 минут после последнего обращения" :(

И вообще - не все по факту так, как написано. Вскоре будут изменения.

Файлы обработки:

-