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