← Назад к вопросам
Что такое параметр сеанса?
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 (разграничения доступа по строкам БД).