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

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

Где заполняются параметры сеанса в 1С и как это сделать правильно

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

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

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

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

Что такое параметры сеанса и где они создаются

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

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

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

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

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

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

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

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

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

Как устроено заполнение в типовых конфигурациях

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

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

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

Ленивая инициализация и её последствия

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

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

Пошаговый порядок добавления собственного параметра

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

Порядок действий
  1. 1
    Создайте параметр: Общие → Параметры сеанса → Добавить, задайте имя и тип значения.
  2. 2
    Откройте модуль сеанса через контекстное меню корня конфигурации.
  3. 3
    В обработчике УстановкаПараметровСеанса добавьте проверку имени параметра в массиве ИменаПараметровСеанса и присвойте значение.
  4. 4
    Предусмотрите ветку для случая ИменаПараметровСеанса = Неопределено (установка всех параметров).
  5. 5
    Обработайте ситуацию, когда значение не найдено: задайте безопасное значение по умолчанию вместо исключения.
  6. 6
    Проверьте чтение параметра из прикладного кода на тестовой базе.
  7. 7
    Убедитесь, что вход в базу под разными пользователями проходит без ошибок.

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

Типичные ошибки и как их избежать

Большинство проблем с параметрами сеанса связано с непониманием ленивой инициализации и с попытками использовать параметры не по назначению. Разберём самые частые сценарии.

Типичные ошибки
01
Присвоение параметра только при старте системы в обработчике ПриНачалеРаботыСистемы — при ленивом обращении раньше этого момента получите ошибку «параметр не установлен».
02
Отсутствие ветки для ИменаПараметровСеанса = Неопределено — отдельные виды сеансов (фоновые задания, внешние соединения) падают при старте.
03
Исключение без обработки, когда пользователь не найден в справочнике, — вход в базу блокируется полностью.
04
Тяжёлые запросы внутри обработчика — каждый первый доступ к параметру вызывает паузу, а при массовом запуске фоновых заданий нагрузка умножается.
05
Хранение изменяемых бизнес-данных в параметрах сеанса вместо регистров сведений — значения теряются при завершении сеанса и невидимы другим пользователям.

Отдельно стоит упомянуть попытку читать параметр сеанса на клиенте в управляемом приложении. Прямое обращение ПараметрыСеанса.Имя доступно только на сервере; в клиентском коде нужно передать значение через вызов серверной процедуры или использовать кэшированные стандартные механизмы типовых конфигураций.

Как проверить, что параметр заполняется правильно

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

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

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

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

Сеанс запускается, ошибок нет

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

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

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

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

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

Неопределено, пустая ссылка или значение другого пользователя

Запуск фонового задания, читающего параметр
Норма

Фоновое задание выполняется успешно

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

Задание падает с ошибкой инициализации параметра

Вход пользователя без заполненных данных (например, нового)
Норма

Параметр получает безопасное значение по умолчанию

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

Исключение и невозможность войти в базу

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

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

Если параметр нужен только для отбора данных в динамических списках и отчётах, проверьте, нельзя ли обойтись стандартными механизмами: функциональными опциями, отборами СКД или настройками пользователя. Лишний параметр сеанса — это лишний код в критичной точке запуска системы.
ПЗ
Практическое замечание

FAQ

Можно ли заполнить параметр сеанса не в модуле сеанса, а в своём общем модуле?

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

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

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

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

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

Сохраняется ли значение параметра после перезапуска сеанса?

Нет, при завершении сеанса значение уничтожается, а при новом входе инициализируется заново через УстановкаПараметровСеанса. Для долговременного хранения настроек пользователя применяйте ХранилищеОбщихНастроек или регистры сведений.

Вызывается ли установка параметров в фоновых заданиях и внешних соединениях?

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

Как ускорить установку параметров, если их много?

Объединяйте запросы: вместо отдельного запроса на каждый параметр выполните один пакетный запрос и разложите результаты по параметрам. Кэшируйте неизменные в рамках сеанса данные. Избегайте обращений к внешним системам внутри обработчика — это самый частый источник задержек при входе.

Итог

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

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