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

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

Параметры сеанса 1С: назначение и практическое использование

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

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

Главная особенность параметров сеанса в том, что они не хранятся в базе данных. Значение живёт в памяти сервера 1С (или клиентского приложения в файловом режиме) с момента установки и до завершения сеанса. При новом входе пользователя параметры нужно инициализировать заново — обычно это делается в обработчике «УстановкаПараметровСеанса» модуля сеанса.

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

Что такое параметр сеанса и чем он отличается от других хранилищ

Формально параметр сеанса — это объект метаданных, у которого задаётся имя и тип (в том числе составной). Обращение в коде выглядит как ПараметрыСеанса.ТекущийПользователь. Тип может быть примитивным (строка, булево, дата) или ссылочным (ссылка на справочник, документ, перечисление), а также списком значений и массивом — последние два часто используются для хранения наборов разрешённых значений при RLS.

Важно отличать параметры сеанса от смежных механизмов. Константы хранятся в базе данных и общие для всех пользователей. Хранилище общих настроек сохраняется между сеансами, но читается по запросу и не участвует в RLS. Временное хранилище привязано к форме или адресу и предназначено для передачи данных между вызовами, а не для глобального контекста. Параметр сеанса — единственный механизм, который платформа может неявно подставлять в запросы при ограничении доступа.

Для чего параметры сеанса используются на практике

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

Второй сценарий — контекст по умолчанию: текущий пользователь, его подразделение, склад, касса. Эти значения используются для автозаполнения новых документов, отборов в отчётах и проверок в обработчиках записи. Третий сценарий — технологические флаги: признак отключения бизнес-логики при загрузке данных (параметры вида «ЗагрузкаДанных»), режим обмена, признак обновления конфигурации. Такой флаг позволяет обработчикам «ПриЗаписи» понять, что код выполняется в специальном режиме, и пропустить проверки.

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

Как создать и инициализировать параметр сеанса

Создание выполняется в конфигураторе: в ветке «Общие → Параметры сеанса» добавляется новый объект, задаётся имя и тип. Если параметр будет использоваться в RLS, тип должен точно соответствовать типу поля, с которым идёт сравнение в шаблоне, иначе платформа выдаст ошибку или ограничение просто не сработает.

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

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

Как читать и изменять параметры в коде

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

Есть ограничение: изменение параметра, участвующего в RLS, не влияет на уже открытые динамические списки и выполненные запросы — данные, полученные ранее, остаются как есть. Кроме того, привилегированный режим не отключает RLS, поэтому «пустой» параметр в привилегированном коде всё равно приведёт к пустой выборке из таблиц с ограничением.

Параметры сеанса и RLS: как это работает

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

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

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

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

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

ПараметрыСеанса.Имя возвращает ожидаемое значение нужного типа

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

Ошибка «Параметр сеанса не установлен» или значение не того типа

Видимость данных под пользователем с RLS
Норма

Пользователь видит записи только по разрешённым организациям/складам

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

Списки пустые или, наоборот, видны лишние записи

Поведение при пустом значении параметра
Норма

Сеанс стартует, запросы с RLS возвращают пустой результат

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

Сеанс падает с ошибкой при входе пользователя

Типичные ошибки и ограничения

Ошибка номер один — установка всех параметров подряд в обработчике без проверки ИменаПараметровСеанса. Это замедляет вход каждого пользователя, потому что вычисляются тяжёлые значения, которые в данном сеансе не понадобятся. Вторая ошибка — хранение в параметрах больших структур данных: параметр живёт в памяти сервера весь сеанс, и десятки тысяч сеансов с «тяжёлыми» параметрами ощутимо расходуют память.

Третья ошибка — использование параметра сеанса там, где нужно постоянное хранение. Если настройка должна переживать перезаход, её место — в хранилище общих настроек или в регистре сведений, а параметр сеанса может лишь кэшировать её на время работы. Четвёртая ошибка — несовпадение типа параметра и типа поля в шаблоне RLS, из-за чего ограничение молча не применяется или падает с ошибкой запроса.

Типичные ошибки
01
Установка всех параметров без проверки ИменаПараметровСеанса — замедляет вход пользователей
02
Неустановленный параметр при невозможности вычислить значение — сеанс завершается с ошибкой
03
Хранение больших массивов и таблиц в параметре — лишний расход памяти сервера на каждый сеанс
04
Использование параметра вместо постоянного хранилища — настройка теряется при перезаходе
05
Несовпадение типа параметра с типом поля в шаблоне RLS — ограничение не работает

Когда параметр сеанса не нужен: альтернативы

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

Сравнение вариантов

Параметр сеанса

Контекст текущего сеанса, участие в RLS, быстрый доступ из любого кода. Не переживает завершение сеанса.

Константа

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

Хранилище общих настроек

Индивидуальные настройки, сохраняемые между сеансами. Не участвует в RLS, требует явного чтения.

Временное хранилище

Передача данных между вызовами формы или между клиентом и сервером. Не является глобальным контекстом.

Ответы на частые вопросы

Где посмотреть текущие значения параметров сеанса без изменения кода?

В типовых конфигурациях часть параметров выводится в служебных обработках и журналах диагностики. Универсальный способ — выполнить чтение через консоль кода на сервере: ПараметрыСеанса.ИмяПараметра. В отладчике значение видно в табло при остановке на серверной процедуре.

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

Да, присваивание доступно в любой момент. Новое значение будет действовать для всех последующих запросов, включая RLS-отборы. Уже открытые формы списков при этом нужно обновить, чтобы увидеть эффект.

Почему при входе пользователя возникает ошибка «Параметр сеанса не установлен»?

Обработчик УстановкаПараметровСеанса не смог вычислить значение и не зафиксировал параметр как установленный. Типичная причина — пользователь не сопоставлен со справочником (например, «Пользователи» или «Сотрудники»). Нужно установить пустое значение корректного типа и зафиксировать установку параметра.

Работают ли параметры сеанса в фоновых заданиях?

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

Влияют ли параметры сеанса на производительность?

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

Итог

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

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