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

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

Как установить параметр сеанса в 1С: пошаговое руководство

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

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

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

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

Что такое параметр сеанса и когда он нужен

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

Основные сценарии применения: хранение текущего пользователя и его настроек, параметры для ограничения доступа к данным на уровне записей (RLS), отборы в динамических списках и отчётах, признаки режима работы (например, «ОбменДаннымиЗагрузка»). Если значение нужно только на время сеанса и не должно храниться в базе — параметр сеанса подходит лучше, чем константа или регистр сведений.

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

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

Обязательно укажите тип параметра. Это может быть примитивный тип (Строка, Число, Булево, Дата), ссылка на справочник (СправочникСсылка.Пользователи) или составной тип из нескольких значений. Тип определяет, что можно присвоить параметру: попытка записать значение несоответствующего типа приведёт к ошибке приведения.

После добавления параметра обновите конфигурацию базы данных (F7). Без этого шага параметр не будет доступен в работающем сеансе, и любое обращение к нему завершится ошибкой «Параметр сеанса не найден».

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

Установка значения при старте сеанса

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

Пример кода модуля сеанса:

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт

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

// Запрошены все параметры

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

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

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

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

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

КонецЕсли;

КонецПроцедуры

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

Установка и изменение параметра программно

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

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

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

Использование параметра: чтение, отборы и RLS

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

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

bsl
// Установка значения (сервер)
ПараметрыСеанса.ОсновнаяОрганизация = НоваяОрганизация;

// Чтение значения
ТекОрганизация = ПараметрыСеанса.ОсновнаяОрганизация;

// В тексте запроса
// ГДЕ Документ.Организация = &ОсновнаяОрганизация

Проверка результата и типичные ошибки

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

Типичные ошибки
01
Обращение к параметру до установки значения — исключение о неинициализированном параметре; лечится полной инициализацией в модуле сеанса
02
Параметр создан, но конфигурация базы данных не обновлена — ошибка «Параметр сеанса не найден»
03
Присвоение значения несоответствующего типа — ошибка приведения типов при обращении
04
Попытка установить параметр из клиентского кода — объект недоступен в клиентском контексте
05
Тяжёлые запросы в УстановкаПараметровСеанса без проверки имени — замедление входа всех пользователей

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

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

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

Обращение к параметру в отладчике
Норма

Возвращается ожидаемое значение нужного типа

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

Исключение о неинициализированном параметре

Отбор в динамическом списке
Норма

Список показывает только записи по параметру сеанса

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

Отбор не применяется или список пуст

Вход под другим пользователем
Норма

Параметр содержит значение этого пользователя

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

Значение то же, что у предыдущего пользователя

Альтернативы параметрам сеанса

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

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

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

Значение на время сеанса, не хранится в базе; подходит для текущего пользователя, отборов, RLS

Константа

Хранится в базе, одно значение на всю систему; подходит для глобальных настроек

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

Сохраняется между сеансами для каждого пользователя; подходит для пользовательских предпочтений

Регистр сведений

Хранится в базе с произвольными измерениями; подходит для настроек по организациям и пользователям

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

Можно ли установить параметр сеанса из тонкого клиента?

Напрямую — нет, объект ПараметрыСеанса доступен только на сервере. В клиентском коде вызовите серверную процедуру общего модуля с установленным флагом «Сервер» и выполните присвоение внутри неё.

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

Параметр объявлен в конфигураторе, но обработчик УстановкаПараметровСеанса не присвоил ему значение. Добавьте в модуль сеанса ветку, которая устанавливает значение для этого имени, либо присвойте значение программно до первого чтения.

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

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

Как передать значение параметра сеанса в фоновое задание?

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

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

Да, если имя параметра запроса совпадает с именем параметра сеанса (например, &ТекущийПользователь), платформа подставит значение автоматически. Если имена различаются, значение нужно установить явно через Запрос.УстановитьПараметр.

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

При обращении к параметру платформа выдаст ошибку «Параметр сеанса не найден», поскольку в структуре базы данных он ещё не существует. Выполните обновление конфигурации базы данных (F7) и перезапустите сеанс.

Итог

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

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