#std413

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

1.1.

Параметры сеанса используйте для хранения значений определенных типов в рамках клиентского сеанса.

Инициализируйте параметры сеанса в модуле сеанса (см. п. 2.1). Их значения используйте в запросах и в условиях ограничения доступа к данным текущего сеанса.

Примеры параметров сеанса

  • ТекущийПроект - тип СправочникСсылка.Проекты;
  • ОбменДаннымиВключен - тип Булево;
  • РабочееМестоКлиента - тип СправочникСсылка.РабочиеМеста.

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

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

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

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

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

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

1.2.

Не используйте параметры сеанса для значений, которые нужны только клиентской логике.

В клиент-серверном варианте параметры сеанса хранятся на сервере. Поэтому каждое чтение или изменение такого параметра с клиента вызывает дополнительный серверный вызов и увеличивает сетевой трафик.

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

1.3.

Не используйте параметры сеанса для кеширования вычисленных значений, которые многократно применяются в серверной бизнес-логике.

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

Исключение: когда время вычисления результата сопоставимо с периодом сброса платформенного кеша.

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

2.1.

Не инициализируйте параметры сеанса при запуске программы:

  • не все параметры реально запрашиваются при старте;
  • часть параметров может намеренно обнуляться в коде во время работы.

Правильный способ - устанавливать параметры "по требованию" в обработчике УстановкаПараметровСеанса модуля сеанса.

Параметр инициализируйте только в момент первого обращения к нему как к неустановленному.

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)

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

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

// Устанавливает значения параметров сеанса и добавляет имена
// установленных параметров в массив УстановленныеПараметры.
//
// Параметры:
//   ИмяПараметра - Строка - имя параметра сеанса для инициализации;
//   УстановленныеПараметры - Массив - имена уже инициализированных параметров.
Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)

    // Если параметр уже установлен в текущем вызове,
    // повторно его не инициализируем.
    Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
        Возврат;
    КонецЕсли;

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

КонецПроцедуры
См. также
Источник

https://its.1c.ru/db/v8std#content:413