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