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

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

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

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

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

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

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

Что такое параметры сеанса и когда они нужны

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

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

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

Создание параметра сеанса в конфигураторе

Откройте конфигуратор и в дереве конфигурации разверните ветку «Общие», найдите узел «Параметры сеанса». Через контекстное меню выберите «Добавить» — откроется палитра свойств нового объекта.

Заполните ключевые свойства. Имя — идентификатор, по которому параметр будет вызываться из кода, например ТекущийПользователь или ВыполняетсяОбменДанными. Тип — состав данных параметра: ссылка на справочник, булево, строка или составной тип. Для RLS-параметров часто используют составной тип или тип «ФиксированныйМассив» со списком значений.

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

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

Установка значений через модуль сеанса

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

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

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

Если ИменаПараметровСеанса <> Неопределено

И ИменаПараметровСеанса.Найти("ТекущийПользователь") = Неопределено Тогда

Возврат;

КонецЕсли;

ПараметрыСеанса.ТекущийПользователь =

Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователя());

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

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

Обращение к параметрам из кода и запросов

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

В запросах параметры сеанса используются через оператор «&» с именем параметра — так работают шаблоны ограничения доступа (RLS). Например, условие ГДЕ Организация = &ТекущаяОрганизация в тексте ограничения роли будет автоматически подставлять значение параметра сеанса при каждом обращении к данным.

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

Проверка результата и отладка

Самый простой способ убедиться, что параметр установлен, — вывести его значение через Сообщить() в конце обработчика установки или проверить через отладчик, поставив точку останова в модуле сеанса. Запустите отладку (F5), войдите в сеанс и посмотрите значение в табло.

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

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

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

Вход в программу
Норма

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

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

Ошибка на этапе входа, сеанс завершается аварийно

Значение параметра
Норма

ПараметрыСеанса.ИмяПараметра возвращает ожидаемое значение

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

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

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

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

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

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

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

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

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

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

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

Альтернативы параметрам сеанса

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

Сравнение вариантов хранения

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

Когда значение нужно только в рамках сеанса и участвует в RLS. Не сохраняется между сеансами

Константа

Единое значение для всей базы, хранится постоянно, но одинаково для всех пользователей

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

Индивидуальные настройки каждого пользователя с сохранением, но требуется запрос при каждом чтении

Хранилище общих настроек

Пользовательские настройки форм и отчётов; не подходит для RLS и серверной логики

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

Итог

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

Параметр сеанса создаётся в ветке «Общие → Параметры сеанса», заполняется в обработчике УстановкаПараметровСеанса модуля сеанса с обязательной проверкой массива имён и доступен через ПараметрыСеанса.ИмяПараметра. Ошибка в обработчике блокирует вход пользователей, поэтому изменения тестируйте на копии базы.

Частые вопросы

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

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

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

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

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

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

Какие типы данных можно назначить параметру сеанса?

Примитивные типы (число, строка фиксированной длины, булево, дата), ссылки на объекты конфигурации, а также составные типы и некоторые универсальные коллекции вроде фиксированного массива. Неограниченная строка не поддерживается. Для списков значений в RLS обычно применяют составной тип или отдельный параметр с массивом.

Почему вход в программу стал медленным после добавления параметров?

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

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

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