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

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

Как добавить параметры сеанса в 1С: практическое руководство

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

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

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

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

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

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

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

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

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

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

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

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

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

Шаг 2. Установка значения в модуле сеанса

Значение параметра присваивается в модуле сеанса в обработчике УстановкаПараметровСеанса. Этот обработчик платформа вызывает при старте сеанса и при первом обращении к ещё не инициализированному параметру. В параметр обработчика ИменаПараметровСеанса передаётся массив имён параметров, которые требуется установить.

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

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

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

Возврат;

КонецЕсли;

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

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

УстановленныеПараметры.Добавить("ТекущийПользователь");

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

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

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

Шаг 3. Чтение и изменение параметра из кода

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

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

Для проверки, установлен ли параметр, используется метод ПараметрыСеанса.ПараметрУстановлен("ИмяПараметра") (в новых версиях платформы) либо контроль через массив установленных параметров, как в типовых решениях.

Использование параметра в ограничении доступа (RLS)

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

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

Здесь &ТекущийПользователь — это параметр сеанса, подставляемый в запрос при каждом обращении к данным. Имя в шаблоне должно точно совпадать с именем параметра в метаданных. Если параметр не инициализирован, запросы к объекту с RLS будут завершаться ошибкой, поэтому перед включением ограничения убедитесь, что установка параметра в модуле сеанса работает стабильно.

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

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

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

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

ПараметрыСеанса.ИмяПараметра возвращает ожидаемое значение

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

Ошибка «Параметр сеанса не установлен» или пустое значение

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

Сеанс стартует без ошибок и задержек

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

Ошибка в УстановкаПараметровСеанса при входе

Работа RLS
Норма

Пользователь видит только свои записи

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

Пустые списки у всех или ошибки запросов

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

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

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

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

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

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

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

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

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

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

Для данных текущего сеанса и RLS. Не сохраняется между запусками

Константа

Одно значение на всю базу, хранится постоянно. Не подходит для персональных настроек

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

Персональные значения по пользователям с хранением в базе. Требует запроса при чтении

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

Пользовательские настройки интерфейса и отчётов. Не используется в RLS

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

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

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

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

Причина в том, что к параметру обратились раньше, чем ему присвоили значение, а обработчик УстановкаПараметровСеанса его не установил. Проверьте, что имя параметра в обработчике совпадает с именем в метаданных и что ветка кода установки реально выполняется.

Вызывается ли обработчик установки параметров при каждом обращении?

Нет. Обработчик вызывается при старте сеанса и при первом обращении к параметру, который ещё не был установлен. После успешной установки значение хранится в памяти сеанса, и обращения к нему не вызывают повторного выполнения обработчика.

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

Да. В тексте запроса параметр сеанса указывается через амперсанд: &ИмяПараметра. Платформа подставит текущее значение автоматически, без передачи через УстановитьПараметр. Тип параметра должен быть простым и однозначным, иначе запрос завершится ошибкой.

Виден ли параметр сеанса другим пользователям?

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

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

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

Итог

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

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