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

Администрирование · 13 мин

Параметры сеанса в 1С: что это, зачем нужны и как их использовать

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

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

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

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

Что такое параметр сеанса и чем он отличается от других хранилищ

Параметр сеанса объявляется в конфигураторе в ветке «Общие → Параметры сеанса». Для каждого параметра задаётся имя и тип значения — это может быть примитивный тип (строка, число, булево, дата), ссылка на справочник или документ, а также составной тип. После публикации конфигурации значение параметра можно читать и устанавливать из встроенного языка через объект ПараметрыСеанса.

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

Чем заменить параметр сеанса

Константа

Единое значение на всю базу, хранится в БД. Подходит для общих настроек, но не различает пользователей.

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

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

Переменная модуля

Живёт только внутри одного вызова или формы. Не доступна глобально и теряется между серверными вызовами.

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

Уникален для сеанса, читается из памяти быстро, доступен везде, включая RLS. Теряется при завершении сеанса.

Основные задачи, которые решают параметры сеанса

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

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

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

Текущий пользовательСсылка на справочник

Подстановка ответственного, отборы в списках, персональные настройки

RLSШаблоны ограничений

Фильтрация записей по подразделению, организации, складу

Обмен даннымиПризнак загрузки

Отключение проверок и бизнес-логики при обмене

Период работыДата или период

Текущий отчётный период, рабочая дата сеанса

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

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

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

bsl
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры) Экспорт
	Если ТребуемыеПараметры.Найти("ТекущийПользователь") <> Неопределено Тогда
		ПараметрыСеанса.ТекущийПользователь = НайтиПользователяПоИмени(ИмяПользователя());
	КонецЕсли;
КонецПроцедуры

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

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

Особенности работы обработчика установки параметров

Обработчик УстановкаПараметровСеанса выполняется на сервере в момент первого обращения к параметру, а не при входе пользователя. Если в коде обработчика обратиться к другому параметру сеанса, возникнет рекурсивный вызов обработчика — платформа это допускает, но глубина и логика должны быть под контролем. Бесконечная рекурсия приведёт к ошибке и невозможности войти в базу.

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

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

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

Вторая ошибка — хранение в параметре изменяемых объектов с расчётом на их актуальность. Если пользователь в течение дня сменил подразделение, параметр сеанса продолжит хранить старое значение до переустановки. Код, который полагается на параметр, должен либо обновлять его при смене контекста, либо читать актуальные данные из базы в критичных местах.

Третья группа проблем связана с фоновыми заданиями и внешними соединениями. Фоновое задание наследует параметры сеанса родительского сеанса в момент запуска, но дальше живёт со своей копией. При COM-соединении и веб-сервисах обработчик установки параметров также вызывается, и если он завязан на интерактивные возможности (например, на клиентский контекст), соединение завершится ошибкой.

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

Как проверить и отладить параметры сеанса

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

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

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

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

Чтение параметра в отладчике
Норма

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

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

Ошибка «Параметр сеанса не установлен» или пустое значение там, где ожидалась ссылка

Время входа в базу
Норма

Вход занимает столько же, сколько до изменений

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

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

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

Пользователь видит только разрешённые записи

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

Пустые списки или, наоборот, видны лишние данные

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

Задания выполняются без ошибок установки параметров

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

Ошибки в журнале регистрации при обмене или в фоновых заданиях

Если ошибка «параметр сеанса не установлен» возникает только у части пользователей, проверьте, что обработчик корректно обрабатывает случаи, когда пользователь не найден в справочнике или у него не заполнены ключевые реквизиты. Безопасный приём — устанавливать пустую ссылку или значение по умолчанию, а прикладной код должен уметь работать с таким значением.

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

Когда параметры сеанса использовать не стоит

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

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

Итог

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

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

Часто задаваемые вопросы

Чем параметр сеанса отличается от константы?

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

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

Ошибка означает, что код обратился к параметру, обработчик УстановкаПараметровСеанса отработал, но значение этому параметру не присвоил. Проверьте, что имя параметра в ветке конфигурации и в коде совпадает, что в обработчике есть ветка для этого имени и что поиск значения (например, пользователя в справочнике) не возвращает пустой результат без обработки.

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

Да, значение можно переустановить в любой момент обычным присваиванием: ПараметрыСеанса.ТекущийПериод = НовоеЗначение. Но изменение затронет только текущий сеанс, и весь код, который читал параметр раньше, уже работал со старым значением. После смены параметра имеет смысл обновить открытые формы или перечитать зависимые данные.

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

Фоновое задание при запуске получает копию параметров сеанса того сеанса, который его запустил. Дальше это независимые значения: изменения в фоновом задании не вернутся в родительский сеанс. Если фоновому заданию нужны актуальные данные, передавайте их явно через параметры метода при запуске.

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

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

Опасно ли менять модуль сеанса на рабочей базе?

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