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