Использование параметров сеанса

#std413

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1.1. Параметры сеанса предназначены для хранения значений определенных типов для каждого клиентского сеанса на время работы этого сеанса. Инициализацию параметров сеанса следует выполнять в модуле сеанса (см. ниже раздел 2.1), а их значения рекомендуется использовать в запросах и условиях ограничения доступа к данным для текущего сеанса.
Примеры параметров сеанса:

Параметры сеанса доступны из встроенного языка 1С:Предприятия, например:

Проект = ПараметрыСеанса.ТекущийПроект;

В этом случае, для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.

Также они могут использоваться в текстах ограничений доступа, например:

ГДЕ Документ.Автор = &ТекущийПользователь

В последнем случае для получения значения параметра сеанса наличия у текущего пользователя соответствующего права не требуется.

1.2. Не рекомендуется использовать параметры сеанса для хранения значений, используемых исключительно в клиентской логике. Поскольку в клиент-серверном варианте 1С:Предприятия параметры сеанса хранятся на сервере, то любое их считывание или изменение в процессе работы на клиенте потребует дополнительного серверного вызова и увеличит объем передаваемых данных с клиента на сервер и обратно.

В таких случаях следует использовать глобальные переменные модуля управляемого приложения (и обычного приложения – для режима обычного приложения, соответственно).

1.3. Также не рекомендуется использовать параметры сеанса для кеширования вычисленных значений, которые многократно используются в серверной бизнес-логике. В таких случаях следует определять функцию в серверном общем модуле с повторным использованием возвращаемых значений. Исключение составляют случаи, когда время вычисления результата функции модуля с повторным использованием возвращаемых значений соизмеримо с периодом сброса платформенного кеша.

Установка параметров сеанса "по требованию"

2.1. Не следует производить инициализацию параметров сеанса при запуске программы, так как: 

Правильным способом установки значений параметров сеанса является установка значений "по требованию" в обработчике УстановкаПараметровСеанса модуля сеанса. Т.е. параметры сеанса должны быть инициализированы только в тот момент, когда к ним происходит первое обращение, как к неустановленным.

Пример установки параметров сеанса "по требованию":

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
 
 Если ИменаПараметровСеанса = Неопределено Тогда
  // Раздел установки параметров сеанса при начале сеанса (ИменаПараметровСеанса = Неопределено)
  // Выполняется установка параметров сеанса, которые можно инициализировать
  // при начале работы системы
  
 Иначе
  // Установка параметров сеанса "по требованию"
  
  // Параметры сеанса, инициализация которых требует обращения к одним и тем же данным
  // следует инициализировать сразу группой. Для того, чтобы избежать их повторной инициализации,
  // имена уже установленных параметров сеанса сохраняются в массиве УстановленныеПараметры
  УстановленныеПараметры = Новый Массив;
  Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
   УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры);
  КонецЦикла;
  
 КонецЕсли;
 
КонецПроцедуры

// Установить значения параметров сеанса и возвратить имена установленных параметров сеанса
// в параметре УстановленныеПараметры.
//
// Параметры
//  ИмяПараметра  - Строка - имя параметра сеанса, который требуется установить (проинициализировать).
//  УстановленныеПараметры  - Массив - массив, в который добавляются имена
//                                     установленных (проинициализированных) параметров.
//
Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)
 
 // Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже
 // был установлен - возврат.
 Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
  Возврат;
 КонецЕсли;
 
 Если ИмяПараметра = "ТекущийПользователь" Тогда
   ПараметрыСеанса.ТекущийПользователь = <значение>;
   ПараметрыСеанса.<другой параметра сеанса> = <значение>;
   УстановленныеПараметры.Добавить(ИмяПараметра);
   УстановленныеПараметры.Добавить("<другой параметра сеанса>");
 КонецЕсли;

КонецПроцедуры

См. также