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