Разработка и Конфигурация · 10 мин
Параметры сеанса 1С: назначение и практическое использование
Параметры сеанса 1С: что это, для чего нужны, как установить и прочитать, типичные ошибки при работе с RLS и начальным заполнением.
Параметры сеанса в 1С — это глобальные переменные, которые существуют на время работы конкретного сеанса пользователя и доступны из любого места кода без передачи через аргументы процедур. Они описываются в ветке «Общие» дерева конфигурации и позволяют платформе «знать», кто сейчас работает, какая организация выбрана, какие ограничения действуют. Типичные примеры из стандартных конфигураций — «ТекущийПользователь», «ТекущаяОрганизация», «ТекущаяДатаСеанса».
Главная особенность параметров сеанса в том, что они не хранятся в базе данных. Значение живёт в памяти сервера 1С (или клиентского приложения в файловом режиме) с момента установки и до завершения сеанса. При новом входе пользователя параметры нужно инициализировать заново — обычно это делается в обработчике «УстановкаПараметровСеанса» модуля сеанса.
Именно через параметры сеанса в большинстве конфигураций реализовано ограничение доступа на уровне записей (RLS): запросы к таблицам автоматически дополняются отбором по значению параметра, например «РазрешенныеОрганизации». Поэтому ошибка в установке параметра напрямую влияет и на безопасность, и на корректность данных, которые видит пользователь.
Что такое параметр сеанса и чем он отличается от других хранилищ
Формально параметр сеанса — это объект метаданных, у которого задаётся имя и тип (в том числе составной). Обращение в коде выглядит как ПараметрыСеанса.ТекущийПользователь. Тип может быть примитивным (строка, булево, дата) или ссылочным (ссылка на справочник, документ, перечисление), а также списком значений и массивом — последние два часто используются для хранения наборов разрешённых значений при RLS.
Важно отличать параметры сеанса от смежных механизмов. Константы хранятся в базе данных и общие для всех пользователей. Хранилище общих настроек сохраняется между сеансами, но читается по запросу и не участвует в RLS. Временное хранилище привязано к форме или адресу и предназначено для передачи данных между вызовами, а не для глобального контекста. Параметр сеанса — единственный механизм, который платформа может неявно подставлять в запросы при ограничении доступа.
Для чего параметры сеанса используются на практике
Первый и самый массовый сценарий — ограничение доступа на уровне записей. В шаблоне RLS роли указывается условие вида Организация В (&РазрешенныеОрганизации), а в параметр сеанса при входе пользователя помещается список доступных ему организаций. Платформа подставляет значение в каждый запрос автоматически, поэтому разработчику не нужно писать отборы вручную в каждом запросе.
Второй сценарий — контекст по умолчанию: текущий пользователь, его подразделение, склад, касса. Эти значения используются для автозаполнения новых документов, отборов в отчётах и проверок в обработчиках записи. Третий сценарий — технологические флаги: признак отключения бизнес-логики при загрузке данных (параметры вида «ЗагрузкаДанных»), режим обмена, признак обновления конфигурации. Такой флаг позволяет обработчикам «ПриЗаписи» понять, что код выполняется в специальном режиме, и пропустить проверки.
Четвёртый сценарий — передача состояния между серверными вызовами в рамках сеанса, когда нельзя использовать параметры формы: например, признак того, что пользователь уже предупреждён о каком-то событии, или кэш вычисленных при входе данных, которые дорого пересчитывать.
Как создать и инициализировать параметр сеанса
Создание выполняется в конфигураторе: в ветке «Общие → Параметры сеанса» добавляется новый объект, задаётся имя и тип. Если параметр будет использоваться в RLS, тип должен точно соответствовать типу поля, с которым идёт сравнение в шаблоне, иначе платформа выдаст ошибку или ограничение просто не сработает.
Инициализация выполняется в модуле сеанса, обработчик УстановкаПараметровСеанса(ИменаПараметровСеанса). Важная тонкость: обработчик вызывается лениво — платформа передаёт в параметре ИменаПараметровСеанса список тех параметров, которые реально потребовались, и устанавливать нужно только их. Если параметр установить невозможно (например, пользователю не сопоставлен сотрудник), для этого параметра следует вызвать УстановленныеПараметрыСеанса.Добавить() или установить пустое, но корректное по типу значение — иначе сеанс завершится с ошибкой «Параметр сеанса не установлен».
- 1Создайте параметр в ветке Общие → Параметры сеанса, задайте имя и точный тип
- 2В модуле сеанса в обработчике УстановкаПараметровСеанса проверьте, требуется ли этот параметр в ИменаПараметровСеанса
- 3Вычислите значение (например, найдите пользователя в справочнике) и присвойте его параметру
- 4Если значение найти не удалось, установите корректное пустое значение и зафиксируйте параметр как установленный
- 5Проверьте вход под тестовым пользователем и чтение параметра через ПараметрыСеанса.ИмяПараметра
Как читать и изменять параметры в коде
Чтение простое: ТекПользователь = ПараметрыСеанса.ТекущийПользователь;. Чтение доступно на сервере и на клиенте, если для параметра не ограничена доступность. Изменение тоже допустимо в любой момент сеанса — например, пользователь сменил текущую организацию в настройках, и код перезаписывает соответствующий параметр, после чего все последующие запросы с RLS работают уже с новым значением.
Есть ограничение: изменение параметра, участвующего в RLS, не влияет на уже открытые динамические списки и выполненные запросы — данные, полученные ранее, остаются как есть. Кроме того, привилегированный режим не отключает RLS, поэтому «пустой» параметр в привилегированном коде всё равно приведёт к пустой выборке из таблиц с ограничением.
Параметры сеанса и RLS: как это работает
Механика такова: в роли, в ограничении доступа к таблице, указывается шаблон с обращением к параметру через символ &. При выполнении любого запроса к этой таблице платформа неявно добавляет условие отбора. Пользователь физически не может получить записи вне разрешённого набора — ни через список, ни через отчёт, ни программно.
Практическое следствие: при отладке «пропавших» документов первым делом проверяют значения параметров сеанса. Если в параметре «РазрешенныеСклады» нет нужного склада, документы по нему просто не видны, хотя в базе они есть. Второй признак проблемы — разное поведение под полными правами и под ограниченной ролью: под полными правами RLS обычно не назначен, и данные видны все.
Как проверить результат
ПараметрыСеанса.Имя возвращает ожидаемое значение нужного типа
Ошибка «Параметр сеанса не установлен» или значение не того типа
Пользователь видит записи только по разрешённым организациям/складам
Списки пустые или, наоборот, видны лишние записи
Сеанс стартует, запросы с RLS возвращают пустой результат
Сеанс падает с ошибкой при входе пользователя
Типичные ошибки и ограничения
Ошибка номер один — установка всех параметров подряд в обработчике без проверки ИменаПараметровСеанса. Это замедляет вход каждого пользователя, потому что вычисляются тяжёлые значения, которые в данном сеансе не понадобятся. Вторая ошибка — хранение в параметрах больших структур данных: параметр живёт в памяти сервера весь сеанс, и десятки тысяч сеансов с «тяжёлыми» параметрами ощутимо расходуют память.
Третья ошибка — использование параметра сеанса там, где нужно постоянное хранение. Если настройка должна переживать перезаход, её место — в хранилище общих настроек или в регистре сведений, а параметр сеанса может лишь кэшировать её на время работы. Четвёртая ошибка — несовпадение типа параметра и типа поля в шаблоне RLS, из-за чего ограничение молча не применяется или падает с ошибкой запроса.
Когда параметр сеанса не нужен: альтернативы
Не всякий «глобальный» контекст должен быть параметром сеанса. Если значение едино для всей базы и меняется редко — подходит константа. Если настройка индивидуальна для пользователя и должна сохраняться между сеансами — хранилище общих настроек или регистр сведений. Если данные нужны только внутри одной формы или одного обмена — временное хранилище или параметры формы.
Сравнение вариантов
Контекст текущего сеанса, участие в RLS, быстрый доступ из любого кода. Не переживает завершение сеанса.
Единое значение для всей базы, хранится постоянно. Не подходит для индивидуальных настроек пользователей.
Индивидуальные настройки, сохраняемые между сеансами. Не участвует в RLS, требует явного чтения.
Передача данных между вызовами формы или между клиентом и сервером. Не является глобальным контекстом.
Ответы на частые вопросы
Где посмотреть текущие значения параметров сеанса без изменения кода?
В типовых конфигурациях часть параметров выводится в служебных обработках и журналах диагностики. Универсальный способ — выполнить чтение через консоль кода на сервере: ПараметрыСеанса.ИмяПараметра. В отладчике значение видно в табло при остановке на серверной процедуре.
Можно ли изменить параметр сеанса в середине работы пользователя?
Да, присваивание доступно в любой момент. Новое значение будет действовать для всех последующих запросов, включая RLS-отборы. Уже открытые формы списков при этом нужно обновить, чтобы увидеть эффект.
Почему при входе пользователя возникает ошибка «Параметр сеанса не установлен»?
Обработчик УстановкаПараметровСеанса не смог вычислить значение и не зафиксировал параметр как установленный. Типичная причина — пользователь не сопоставлен со справочником (например, «Пользователи» или «Сотрудники»). Нужно установить пустое значение корректного типа и зафиксировать установку параметра.
Работают ли параметры сеанса в фоновых заданиях?
Фоновое задание получает копию параметров сеанса того сеанса, который его запустил, если параметры явно переданы при запуске. Само по себе фоновое задание — отдельный сеанс, и рассчитывать на «текущие» значения без явной передачи нельзя.
Влияют ли параметры сеанса на производительность?
Само чтение параметра очень быстрое. Влияние возникает в двух местах: тяжёлая инициализация при входе (если игнорировать ИменаПараметровСеанса) и сложные RLS-шаблоны с параметрами-списками большого размера, которые утяжеляют каждый запрос к ограниченной таблице.
Что важно запомнить
Параметры сеанса хранят контекст работы пользователя на время сеанса, не сохраняются в базе и инициализируются в обработчике УстановкаПараметровСеанса. Их ключевые применения — RLS-ограничения, значения по умолчанию и технологические флаги. Устанавливайте только запрошенные параметры, всегда фиксируйте установку при невозможности вычислить значение и не используйте параметры вместо постоянных хранилищ настроек.