Эта статья - более простая реализация решения задачи описанной в //infostart.ru/public/62410/
Платформа 8.2 простым штатным способом позволяет реализовывать глобальные переменые на сервере. Достигается это использованием модулей с признаком "Повторное использование возвращаемых значений" установленным в значение "На время сеанса". Установка данного признака заставляет систему помнить все возвращаемые значения. Как сказано в СП:
Если для общего модуля установлено значение "На время вызова" или "На время сеанса", то возвращаемые значения экспортных функций повторно используются в разрезе входных значений их параметров.
Для сброса значений необходимо вызвать функцию:
ОбновитьПовторноИспользуемыеЗначения()
Таким образом задача решается без всяких извращений.
Для демонстрации приложена конфигурация, с одной единственной обработкой, со следующим текстом:
Процедура КнопкаВыполнитьНажатие(Кнопка)
ОчиститьСообщения();
Тест.ВывестиЗначенияСтруктуры();
КонецПроцедуры
Модуль "Тест" (Сервер, Вызов сервера):
Функция ВывестиЗначенияСтруктуры() Экспорт
Соответствие = Переменные.ПолучитьПеременную();
Для Каждого КлючЗначение Из Соответствие Цикл
Сообщить(КлючЗначение.Ключ);
КонецЦикла;
Соответствие.Вставить(ТекущаяДата(), ТекущаяДата());
КонецФункции
И модуль "Переменные" (Сервер, Повторное использование возвращаемых значений=На время сеанса):
Функция ПолучитьПеременную() Экспорт
Сообщить("Создаем объект"); //Эта строка выполнится один раз за сеанс!
Возврат Новый Соответствие; //и эта тоже!
КонецФункции
Ложка дегтя - все что написано выше - неправильно. Везде, где написано "сеанс" надо читать "20 минут после последнего обращения" :(
И вообще - не все по факту так, как написано. Вскоре будут изменения.