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












































