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