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

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

Параметры сеанса в 1С: назначение, создание и применение

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

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

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

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

Как устроен механизм параметров сеанса

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

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

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

Где создать параметр сеанса в конфигураторе

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

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

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

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

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

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

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

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

Или ИменаПараметровСеанса.Найти("ТекущийПользователь") <> Неопределено Тогда

ПараметрыСеанса.ТекущийПользователь =

Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя());

КонецЕсли;

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

bsl
ПараметрыСеанса.ТекущаяОрганизация = Справочники.Организации.НайтиПоКоду("000000001");

Где параметры сеанса применяются на практике

Ограничение доступа на уровне записей (RLS)

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

Персонализация интерфейса и подстановка значений

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

Передача контекста в запросы

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

Отличия от констант, настроек и глобальных переменных

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

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

МеханизмГде хранитсяВремя жизниДля кого значение
Параметр сеансаПамять сеансаДо конца сеансаОтдельно для каждого сеанса
КонстантаБаза данныхПостоянноЕдиное для всех
Хранилище настроекБаза данныхПостоянноПривязано к пользователю

Что выбрать для хранения значения

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

Персональный контекст, нужный только внутри сеанса: текущий пользователь, организация, признаки прав

Константа

Общая настройка системы, одинаковая для всех и сохраняющаяся между сеансами

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

Персональные настройки пользователя, которые должны переживать перезаход: выбранные отборы, варианты отчётов

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

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

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

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

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

Как проверить корректность работы

После внедрения параметра проверьте его поведение под разными пользователями. Войдите в базу под учётной записью с ограниченными правами и убедитесь, что значение параметра соответствует именно этому пользователю, а не администратору. Для отладки удобно временно выводить значение через Сообщить() в модуле сеанса или смотреть его в отладчике при первом обращении.

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

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

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

Значение параметра под разными пользователями
Норма

Каждый сеанс получает собственное корректное значение

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

Значение одинаковое для всех или не соответствует пользователю

Вход в систему
Норма

Вход выполняется быстро, без ошибок

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

Задержка при входе или исключение о неустановленном параметре

Фоновые задания и обмены
Норма

Выполняются без ошибок инициализации

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

В журнале регистрации ошибки обращения к параметрам сеанса

Частые вопросы

Сохраняется ли значение параметра сеанса после перезахода пользователя?

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

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

Технически да: присвоение ПараметрыСеанса.ИмяПараметра = НовоеЗначение выполняется в любой момент на сервере. Но делать это стоит осознанно: если параметр участвует в шаблонах RLS, смена значения сразу меняет видимость данных. Обычно параметры устанавливают один раз при входе и дальше только читают.

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

Да. Для фонового задания, веб-сервиса или COM-соединения платформа создаёт отдельный сеанс, и обработчик установки параметров вызывается в нём. Убедитесь, что логика обработчика не зависит от интерактивного пользователя, иначе служебные сеансы будут завершаться с ошибкой.

Что произойдёт, если обратиться к параметру, который не установлен?

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

Сколько параметров сеанса можно создать и влияет ли это на производительность?

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

Чем параметр сеанса лучше глобальной переменной в общем модуле?

Глобальные переменные в управляемом приложении не гарантируют сохранность между серверными вызовами и ведут себя по-разному на клиенте и сервере. Параметр сеанса хранится платформой централизованно, доступен на сервере в течение всего сеанса и изолирован от других пользователей, что делает его надёжным контейнером контекста.

Итог

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

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