← Назад к вопросам

Что такое параметр сеанса?

1.2 Junior🔥 271 комментариев
#RLS и права#Стандарты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Параметр сеанса в 1С

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

Определение

Параметр сеанса это:

  • Глобальная переменная уровня сеанса
  • Хранит контекст пользователя (филиал, подразделение, организация)
  • Доступна из любого модуля приложения
  • Используется для RLS (разграничение доступа)
  • Имеет типизированное значение

Синтаксис

// Установка параметра сеанса:
УстановитьПараметрСеанса("ТекущаяОрганизация", Организации.ОООПримерКомпания);

// Получение параметра сеанса:
Организация = ПолучитьПараметрСеанса("ТекущаяОрганизация");

// Удаление параметра сеанса:
УдалитьПараметрСеанса("ТекущаяОрганизация");

Создание параметра сеанса в конфигураторе

Конфигурация → Параметры сеанса → Добавить параметр

Название: "ТекущаяОрганизация"
Тип: "СправочникСсылка.Организации"
Значение: не определено
Описание: "Текущая организация пользователя"

Типичные параметры сеанса

// При входе пользователя устанавливаются параметры:

// 1. Текущая организация
УстановитьПараметрСеанса("ТекущаяОрганизация", 
    Справочники.Организации.ОООПример);

// 2. Текущий филиал
УстановитьПараметрСеанса("ТекущийФилиал", 
    Справочники.Филиалы.Москва);

// 3. Текущее подразделение
УстановитьПараметрСеанса("ТекущееПодразделение", 
    Справочники.Подразделения.ИТДепартамент);

// 4. Текущий пользователь
УстановитьПараметрСеанса("ТекущийПользователь", 
    Пользователи.ТекущийПользователь());

// 5. Флаг использования RLS
УстановитьПараметрСеанса("ИспользоватьРазграничение", Истина);

Установка параметров при входе

// В модуле управляемого приложения (обработчик события ПриНачалеРаботыСистемы):

Процедура ПриНачалеРаботыСистемы(Отмена)
    
    // Получить текущего пользователя
    ТекПользователь = Пользователи.ТекущийПользователь();
    
    // Загрузить настройки пользователя
    Запрос = Новый Запрос(
        "SELECT 
            Пользователь.Организация,
            Пользователь.Филиал,
            Пользователь.Подразделение
         FROM Справочник_Пользователи as Пользователь
         WHERE Пользователь.Ссылка = &ПользовательСсылка"
    );
    Запрос.УстановитьПараметр("ПользовательСсылка", ТекПользователь);
    
    Результат = Запрос.Выполнить();
    
    Если Результат.Пустой() Тогда
        ВызватьИсключение("Пользователь не настроен");
    КонецЕсли;
    
    Строка = Результат.Выбрать().Первый();
    
    // Установить параметры сеанса
    УстановитьПараметрСеанса("ТекущаяОрганизация", Строка.Организация);
    УстановитьПараметрСеанса("ТекущийФилиал", Строка.Филиал);
    УстановитьПараметрСеанса("ТекущееПодразделение", Строка.Подразделение);
    УстановитьПараметрСеанса("ТекущийПользователь", ТекПользователь);
    
КонецПроцедуры

Использование в запросах (RLS)

// Параметры сеанса используются в запросах для RLS

Запрос = Новый Запрос(
    "SELECT 
        Документ.Номер,
        Документ.Дата,
        Документ.Сумма
     FROM Документ_ПроводкиАВТО as Документ
     WHERE Документ.Организация = &ТекущаяОрганизация
       AND Документ.Филиал = &ТекущийФилиал"
);

Запрос.УстановитьПараметр("ТекущаяОрганизация", 
    ПолучитьПараметрСеанса("ТекущаяОрганизация"));
Запрос.УстановитьПараметр("ТекущийФилиал", 
    ПолучитьПараметрСеанса("ТекущийФилиал"));

Результат = Запрос.Выполнить();
// Вернёт только документы текущей организации и филиала

Практический пример: RLS система

// Задача: менеджер видит только заказы своего филиала

// 1. При входе менеджера:
Процедура АвторизацияМенеджера(Менеджер)
    Запрос = Новый Запрос(
        "SELECT Филиал FROM Справочник_Менеджеры WHERE Ссылка = &Менеджер"
    );
    Запрос.УстановитьПараметр("Менеджер", Менеджер);
    
    Результат = Запрос.Выполнить();
    Если Не Результат.Пустой() Тогда
        Строка = Результат.Выбрать().Первый();
        УстановитьПараметрСеанса("МойФилиал", Строка.Филиал);
    КонецЕсли;
КонецПроцедуры

// 2. При загрузке списка заказов:
Процедура ЗагрузитьЗаказы()
    Запрос = Новый Запрос(
        "SELECT 
            Заказ.Номер,
            Заказ.Клиент,
            Заказ.Сумма
         FROM Документ_Заказы as Заказ
         WHERE Заказ.Филиал = &МойФилиал"
    );
    
    // Автоматически подставляется параметр сеанса
    Запрос.УстановитьПараметр("МойФилиал", 
        ПолучитьПараметрСеанса("МойФилиал"));
    
    Таблица = Запрос.Выполнить().Выгрузить();
    // Менеджер видит только свои заказы!
КонецПроцедуры

Смена параметра сеанса

// Пользователь может переключиться на другой филиал

Процедура СменитьФилиал(НовыйФилиал)
    
    // Проверить права пользователя
    Если НеПроверитьДоступ(НовыйФилиал) Тогда
        ВызватьИсключение("У вас нет доступа к этому филиалу");
    КонецЕсли;
    
    // Обновить параметр сеанса
    УстановитьПараметрСеанса("ТекущийФилиал", НовыйФилиал);
    
    // Перезагрузить формы
    ПерезагрузитьДанные();
    
    Сообщить("Вы переключились на филиал: " + НовыйФилиал.Наименование);
КонецПроцедуры

Отличие от глобальных переменных

АспектПараметр сеансаГлобальная переменная
Область видимостиВесь сеансВсё приложение
ТипизацияСтрогая типизацияСлабая типизация
ХранениеВ конфигурацииВ модулях
RLS поддержкаВстроенаНет
БезопасностьВысокаяНизкая
СохранениеМежду переходамиЗависит от модуля

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

// Безопасно получить параметр (с проверкой на наличие)

Организация = Неопределено;
Попытка
    Организация = ПолучитьПараметрСеанса("ТекущаяОрганизация");
Исключение
    ВызватьИсключение("Параметр сеанса не установлен");
КонецПопытки;

// Или с использованием функции проверки:
Если ПолучитьПараметрСеанса("ТекущаяОрганизация") = Неопределено Тогда
    ВызватьИсключение("Организация не выбрана");
КонецЕсли;

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

// Параметры сеанса хранятся в памяти, доступ быстрый

// Правильно: получить один раз, использовать несколько раз
ТекущиеПараметры = Новая Структура();
ТекущиеПараметры.Вставить("Организация", 
    ПолучитьПараметрСеанса("ТекущаяОрганизация"));
ТекущиеПараметры.Вставить("Филиал", 
    ПолучитьПараметрСеанса("ТекущийФилиал"));

// Использовать множество раз:
Для индекс = 1 По 1000 Цикл
    // Используем ТекущиеПараметры вместо ПолучитьПараметрСеанса каждый раз
КонецЦикла;

Чеклист при работе с параметрами сеанса

  • Все параметры определены в конфигураторе
  • Параметры установлены при входе
  • Используются в RLS запросах
  • Проверяется наличие параметра перед использованием
  • Параметры обновляются при смене контекста
  • Используется правильная типизация
  • Проведены тесты на безопасность

Итого: параметр сеанса это типизированная переменная уровня сеанса, которая содержит контекст пользователя (организация, филиал, подразделение) и используется для реализации RLS (разграничения доступа по строкам БД).

Что такое параметр сеанса? | PrepBro