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

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

Модуль сеанса в 1С: что это и как с ним работать

Модуль сеанса в 1С — что это, где находится, какие процедуры в нём пишут. Разбираем назначение, типичные ошибки и порядок работы с модулем сеанса.

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

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

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

Где находится модуль сеанса и как его открыть

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

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

Какие события и процедуры содержит модуль сеанса

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

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

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

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

Для чего модуль сеанса используют на практике

Основной сценарий — инициализация параметров сеанса. Без них механизм RLS (ограничение доступа на уровне записей), персональные настройки интерфейса и многие подсистемы типовых конфигураций просто не работают. Например, параметр «ТекущийПользователь» используется десятками подсистем: при записи документов, в отчётах, при фильтрации задач.

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

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

Порядок выполнения: что запускается раньше

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

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

Порядок действий при изменении модуля сеанса
  1. 1
    Сделайте резервную копию базы или выгрузку конфигурации перед правками
  2. 2
    Откройте модуль сеанса через контекстное меню корня конфигурации
  3. 3
    Внесите изменения, избегая клиентских вызовов и тяжёлых запросов
  4. 4
    Сохраните и обновите конфигурацию базы данных в тестовой копии
  5. 5
    Войдите под обычным пользователем без полных прав и проверьте запуск
  6. 6
    Проверьте журнал регистрации на наличие ошибок при старте сеанса
  7. 7
    Только после успешной проверки переносите изменения в рабочую базу

Типичные ошибки при работе с модулем сеанса

Самая опасная ошибка — исключение в обработчике УстановкаПараметровСеанса без обработки. Если параметр не удалось установить (например, не найден пользователь по имени), а код падает, вход в базу становится невозможным для всех, кто обращается к этому параметру. Лечение — предусмотреть значения по умолчанию и осмысленные сообщения об ошибках.

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

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

Типичные ошибки
01
Вызов Предупреждение() или ОткрытьФорму() из модуля сеанса — ошибка выполнения, так как модуль работает на сервере
02
Игнорирование параметра ИменаПараметровСеанса — весь код инициализации выполняется при каждом вызове, сеанс тормозит
03
Направленное исключение без диагностики — пользователи не могут войти, а причина не видна в журнале регистрации
04
Хранение больших данных в параметрах сеанса — перерасход памяти сервера приложений
05
Правка типового модуля сеанса вместо расширения — конфликты при каждом обновлении конфигурации

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

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

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

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

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

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

Сеанс открывается за обычное время, ошибок нет

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

Ошибка при входе или сообщение о невозможности установить параметр

Журнал регистрации после запуска
Норма

Нет новых ошибок, связанных с установкой параметров сеанса

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

Ошибки с текстом из обработчика УстановкаПараметровСеанса

Скорость запуска сеанса
Норма

Время входа сопоставимо с прежним

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

Вход стал заметно дольше — вероятно, тяжёлый код в инициализации

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

Параметры заполнены ожидаемыми значениями

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

Параметры пустые или содержат Неопределено там, где ожидалась ссылка

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

Итог

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

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

Частые вопросы о модуле сеанса

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

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

Почему обработчик УстановкаПараметровСеанса вызывается несколько раз?

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

Что делать, если после правки модуля сеанса никто не может войти в базу?

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

Можно ли изменить модуль сеанса через расширение конфигурации?

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

Чем модуль сеанса отличается от модуля управляемого приложения?

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

Нужно ли заполнять все параметры сеанса сразу при входе?

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