К статье
Практический материал

Разработка и Конфигурация · 10 мин

Где устанавливаются параметры сеанса в 1С и как их правильно настроить

Разбираем, где устанавливаются параметры сеанса в 1С: модуль сеанса, код заполнения, права доступа, типовые ошибки и проверка значений в работе.

Параметры сеанса в 1С — это значения, которые платформа хранит в течение всего сеанса работы пользователя: текущий пользователь, организация, подразделение, признаки использования функциональных опций. Они доступны из любого места кода без передачи через параметры процедур, поэтому активно применяются для ограничения доступа на уровне записей (RLS), персонализации интерфейса и хранения контекста работы.

Главное место, где устанавливаются параметры сеанса, — обработчик УстановкаПараметровСеанса в модуле сеанса конфигурации. Именно туда платформа обращается при старте сеанса и при первом обращении к параметру, если он ещё не инициализирован. Дополнительно значения можно задавать программно из любого серверного кода через объект ПараметрыСеанса.

Ниже разберём, где именно в конфигураторе и в коде задаются параметры сеанса, как устроен механизм их инициализации, какие права нужны для изменения и какие ошибки встречаются чаще всего.

Где в конфигураторе объявляются параметры сеанса

Прежде чем параметр можно установить, его нужно описать в метаданных. Откройте конфигуратор и в дереве конфигурации перейдите в ветку Общие → Параметры сеанса. Через контекстное меню добавьте новый параметр, задайте имя и тип. Тип может быть любым: примитивным (строка, число, булево, дата), ссылочным (например, СправочникСсылка.Пользователи) или составным.

Имя параметра должно быть уникальным в пределах конфигурации и удобным для чтения кода — типовые конфигурации используют, например, «ТекущийПользователь», «ОсновнаяОрганизация». Если параметр участвует в ограничении доступа к данным, в его свойствах дополнительно отмечают, что он применяется в шаблонах RLS для соответствующих ролей.

После добавления параметра обновите конфигурацию базы данных. Без этого шага обращение к параметру из кода вызовет ошибку «Параметр сеанса не найден». В файловой базе обновление выполняется напрямую, в клиент-серверной — через стандартную команду обновления конфигурации базы данных с контролем реструктуризации.

Модуль сеанса: основное место установки значений

Центральная точка установки параметров — модуль сеанса. Он находится в корне дерева конфигурации: выделите строку с именем конфигурации, откройте контекстное меню и выберите «Модуль сеанса». В нём размещается обработчик УстановкаПараметровСеанса(ИменаПараметровСеанса).

Платформа вызывает этот обработчик в двух ситуациях: при старте сеанса и при первом обращении к параметру, значение которого ещё не задано (ленивая инициализация). В параметр ИменаПараметровСеанса передаётся массив имён, которые требуется установить, либо Неопределено, если нужно установить все параметры сразу.

Типовой каркас обработчика выглядит так:

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

Если ИменаПараметровСеанса = Неопределено Тогда

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

ПараметрыСеанса.ТекущийПользователь = НайтиТекущегоПользователя();

Возврат;

КонецЕсли;

Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл

Если ИмяПараметра = "ТекущийПользователь" Тогда

ПараметрыСеанса.ТекущийПользователь = НайтиТекущегоПользователя();

КонецЕсли;

КонецЦикла;

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

Обратите внимание: код в модуле сеанса выполняется на сервере. В нём нельзя обращаться к клиентскому контексту, открывать формы или использовать модальные вызовы. Все данные для заполнения берутся из информационной базы, из ПользователиИнформационнойБазы.ТекущийПользователь() или из настроек хранилища общих настроек.

Порядок действий
  1. 1
    Откройте конфигуратор и добавьте параметр в Общие → Параметры сеанса, задайте имя и тип
  2. 2
    Откройте модуль сеанса и добавьте обработчик УстановкаПараметровСеанса
  3. 3
    Заполните ветку для нового параметра: присвойте значение через ПараметрыСеанса.ИмяПараметра
  4. 4
    Обновите конфигурацию базы данных
  5. 5
    Перезапустите сеанс и проверьте значение через ПараметрыСеанса.ИмяПараметра

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

Помимо обработчика, значение параметра можно назначить в любой момент жизни сеанса из серверного кода. Синтаксис простой: ПараметрыСеанса.ИмяПараметра = Значение;. Это используют, например, при смене текущей организации пользователем, при входе в режим обмена данными или при включении специальных режимов работы.

Чтение выполняется аналогично — обращением к свойству ПараметрыСеанса.ИмяПараметра. Если параметр не был установлен, платформа при первом чтении вызовет обработчик УстановкаПараметровСеанса с именем этого параметра. Если и обработчик его не заполнил, значение будет равно Неопределено.

Важное ограничение: объект ПараметрыСеанса недоступен на тонком и веб-клиенте напрямую в клиентском коде. Чтобы получить значение на клиенте, вызывают серверную функцию общего модуля с признаком «Сервер», которая вернёт нужное значение. В типовых конфигурациях для этого существуют готовые обёртки вроде функций получения текущего пользователя.

Параметры сеанса и ограничение доступа к данным (RLS)

Одно из ключевых применений параметров сеанса — шаблоны ограничения доступа на уровне записей. В ролях, на закладке «Шаблоны ограничений», в текст запроса RLS подставляют параметр вида &ТекущийПользователь. При выполнении запроса платформа подставляет актуальное значение параметра сеанса, и пользователь видит только разрешённые ему записи.

Из-за этого корректность заполнения параметров критична: если параметр, используемый в RLS, остался равным Неопределено, пользователь либо не увидит ни одной записи, либо, при неаккуратно написанном шаблоне, получит доступ к лишним данным. Проверять такие параметры нужно под конкретной учётной записью с ограниченной ролью, а не под полными правами.

Типичные ошибки при установке параметров сеанса

Самая частая ошибка — обращение к параметру до его инициализации в обработчике, когда код обработчика сам пытается прочитать другой неустановленный параметр. Возникает рекурсивный вызов УстановкаПараметровСеанса, и сеанс завершается с ошибкой ещё на этапе входа. Чтобы этого избежать, внутри обработчика работайте только с прямыми запросами к базе, а не через чтение других параметров сеанса.

Вторая группа ошибок — тяжёлые запросы в модуле сеанса. Обработчик выполняется при каждом старте сеанса, включая фоновые задания и соединения веб-сервисов. Если в нём выполняются сложные выборки, замедляется вход всех пользователей. Решение — ленивая инициализация: устанавливайте в обработчике только те параметры, имена которых переданы в массиве, и не грузите лишние данные.

Третья типичная проблема — попытка установить параметр из клиентского кода напрямую. Платформа выдаст ошибку о недоступности объекта. Переносите присвоение в серверный вызов, а на клиенте работайте с полученным значением.

Типичные ошибки
01
Чтение другого параметра сеанса внутри УстановкаПараметровСеанса — приводит к рекурсии и падению входа
02
Тяжёлые запросы в модуле сеанса — тормозят старт каждого сеанса, включая фоновые задания
03
Присвоение ПараметрыСеанса из клиентского кода — объект недоступен на клиенте, нужен серверный вызов
04
Забытое обновление конфигурации базы данных после добавления параметра — ошибка «параметр не найден»

Как проверить, что параметры установлены правильно

Базовая проверка — вывести значение параметра после входа. Для этого удобно добавить временную серверную функцию в общий модуль и вызвать её из формы или через «Функциональность для разработчика» / внешнюю обработку. Значение должно соответствовать ожидаемому: ссылка на пользователя — заполнена, признак режима — имеет нужное булево значение.

При отладке RLS проверяйте результат под пользователем с ограниченными правами: список документов должен содержать только разрешённые записи. Если список пуст при наличии данных в базе — с большой вероятностью параметр, используемый в шаблоне, равен Неопределено.

Для диагностики проблем на старте сеанса полезен технологический журнал: включите сбор событий EXCP и CONN и проанализируйте, на каком этапе возникает ошибка инициализации. Это особенно актуально, когда пользователь не может войти в базу из-за ошибки в модуле сеанса.

Контрольные точки

Как проверить результат

Значение параметра после входа
Норма

Параметр заполнен ожидаемым значением (ссылка, признак, дата)

Тревожный признак

Неопределено или пустая ссылка при наличии данных в базе

Список документов под ограниченной ролью
Норма

Видны только разрешённые записи

Тревожный признак

Пустой список или, наоборот, все записи базы

Скорость входа пользователей
Норма

Сеанс стартует без заметной задержки

Тревожный признак

Вход занимает десятки секунд из-за запросов в модуле сеанса

FAQ

Можно ли установить параметр сеанса на клиенте?

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

Почему параметр сеанса равен Неопределено, хотя обработчик заполнен?

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

Сохраняются ли параметры сеанса между сеансами?

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

Вызывается ли УстановкаПараметровСеанса для фоновых заданий?

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

Как параметры сеанса связаны с функциональными опциями?

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

Можно ли изменить параметр сеанса другого пользователя?

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

Итог

Что важно запомнить

Параметры сеанса объявляются в ветке Общие → Параметры сеанса, а их значения устанавливаются в обработчике УстановкаПараметровСеанса модуля сеанса или программно на сервере. Держите код модуля сеанса лёгким, избегайте рекурсивных обращений и проверяйте параметры, участвующие в RLS, на копии базы.