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