Использование параметров сеанса
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1.1. Параметры сеанса предназначены для хранения значений определенных типов для каждого клиентского сеанса на время работы этого сеанса. Инициализацию параметров сеанса следует выполнять в модуле сеанса (см. ниже раздел 2.1), а их значения рекомендуется использовать в запросах и условиях ограничения доступа к данным для текущего сеанса.
Примеры параметров сеанса:
- ТекущийПроект – тип СправочникСсылка.Проекты ;
- ОбменДаннымиВключен – тип Булево ;
- РабочееМестоКлиента – тип СправочникСсылка.РабочиеМеста .
Параметры сеанса доступны из встроенного языка 1С:Предприятия , например:
В этом случае, для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.
Также они могут использоваться в текстах ограничений доступа, например:
ГДЕ Документ.Автор = &ТекущийПользователь
В последнем случае для получения значения параметра сеанса наличия у текущего пользователя соответствующего права не требуется.
1.2. Не рекомендуется использовать параметры сеанса для хранения значений, используемых исключительно в клиентской логике. Поскольку в клиент-серверном варианте 1С:Предприятия параметры сеанса хранятся на сервере, то любое их считывание или изменение в процессе работы на клиенте потребует дополнительного серверного вызова и увеличит объем передаваемых данных с клиента на сервер и обратно.
В таких случаях следует использовать глобальные переменные модуля управляемого приложения (и обычного приложения – для режима обычного приложения, соответственно).
1.3. Также не рекомендуется использовать параметры сеанса для кеширования вычисленных значений, которые многократно используются в серверной бизнес-логике. В таких случаях следует определять функцию в серверном общем модуле с повторным использованием возвращаемых значений. Исключение составляют случаи, когда время вычисления результата функции модуля с повторным использованием возвращаемых значений соизмеримо с периодом сброса платформенного кеша.
Установка параметров сеанса «по требованию»
2.1. Не следует производить инициализацию параметров сеанса при запуске программы, так как:
- не все параметры сеанса запрашиваются из кода конфигурации при запуске программы.
- при работе программы возможно намеренное обнуление значений параметров сеанса из кода на встроенном языке.
Правильным способом установки значений параметров сеанса является установка значений «по требованию» в обработчике УстановкаПараметровСеанса модуля сеанса. Т.е. параметры сеанса должны быть инициализированы только в тот момент, когда к ним происходит первое обращение, как к неустановленным.
Пример установки параметров сеанса «по требованию»:
Если ИменаПараметровСеанса = Неопределено Тогда
// Раздел установки параметров сеанса при начале сеанса (ИменаПараметровСеанса = Неопределено)
// Выполняется установка параметров сеанса, которые можно инициализировать
// при начале работы системы
Иначе
// Установка параметров сеанса «по требованию»
// Параметры сеанса, инициализация которых требует обращения к одним и тем же данным
// следует инициализировать сразу группой. Для того, чтобы избежать их повторной инициализации,
// имена уже установленных параметров сеанса сохраняются в массиве УстановленныеПараметры
УстановленныеПараметры = Новый Массив;
Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры);
КонецЦикла;
// Установить значения параметров сеанса и возвратить имена установленных параметров сеанса
// в параметре УстановленныеПараметры.
//
// Параметры
// ИмяПараметра — Строка — имя параметра сеанса, который требуется установить (проинициализировать).
// УстановленныеПараметры — Массив — массив, в который добавляются имена
// установленных (проинициализированных) параметров.
//
Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)
// Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже
// был установлен — возврат.
Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
Возврат;
КонецЕсли;
Если ИмяПараметра = «ТекущийПользователь» Тогда
ПараметрыСеанса.ТекущийПользователь = ;
ПараметрыСеанса. = ;
УстановленныеПараметры.Добавить(ИмяПараметра);
УстановленныеПараметры.Добавить(«»);
КонецЕсли;
См. также
1с как инициализировать параметр сеанса
Ну ведь моя конфигурация состоит на 99% из БСП. Почему у меня то этого не произошло? Почему у меня отладчиком не инициализируются параметры? Да и как вообще они этим окном могут инициализироваться тоже не очень понятно?
Событие предназначено для инициализации параметров сеанса.
Вызывается системой:
при установке соединения с информационной базой до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;
перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра «Параметры сеанса» является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то генерируется исключение.
Что то я уже ничего не понимаю. Вот код:
Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
// СтандартныеПодсистемы
(*)СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
// Конец СтандартныеПодсистемы
// ТехнологияСервиса
ТехнологияСервиса.ВыполнитьДействияПриУстановкеПараметровСеанса(ИменаПараметровСеанса);
// Конец ТехнологияСервиса
Я ставлю точку на месте, где (*). Набираю в табло: ПараметрыСеанса.ТекущийПользователь. И в значении вижу «Администратор». Откуда БСП это берёт с потолка что ли? Откуда она знает под кем я зашёл, еще же ничего не инициализировалось же?
Или вы имеете в виду, что когда отладчик вычисляет выражение «ПараметрыСеанса.ТекущийПользователь» происходит инициализация? Это же не функция вроде
Использование параметров сеанса
1.1. Параметры сеанса предназначены для хранения значений определенных типов для каждого клиентского сеанса на время работы этого сеанса. Инициализацию параметров сеанса следует выполнять в модуле сеанса (см. ниже раздел 2.1), а их значения рекомендуется использовать в запросах и условиях ограничения доступа к данным для текущего сеанса.
Примеры параметров сеанса:
- ТекущийПользователь – тип СправочникСсылка.Пользователи
- ОбменДаннымиВключен – тип Булево
- РабочееМестоКлиента – тип СправочникСсылка.РабочиеМеста
Параметры сеанса доступны из встроенного языка 1С:Предприятия, например:
ЗначениеТекущегоПользователя = ПараметрыСеанса.ТекущийПользователь;
В этом случае, для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.
Также они могут использоваться в текстах ограничений доступа, например:
ГДЕ Документ.Пользователь = &ТекущийПользователь
В последнем случае для получения значения параметра сеанса наличия у текущего пользователя соответствующего права не требуется.
1.2.Не рекомендуется использовать параметры сеанса для хранения значений, используемых исключительно в клиентской логике. Поскольку в клиент-серверном варианте 1С:Предприятия параметры сеанса хранятся на сервере, то любое их считывание или изменение в процессе работы на клиенте потребует дополнительного серверного вызова и увеличит объем передаваемых данных с клиента на сервер и обратно.
В таких случаях следует использовать глобальные переменные модуля управляемого приложения (и обычного приложения – для режима обычного приложения, соответственно).
1.3. Также не рекомендуется использовать параметры сеанса для кеширования вычисленных значений, которые многократно используются в серверной бизнес-логике. В таких случаях следует определять функцию в серверном общем модуле с повторным использованием возвращаемых значений. Исключение составляют случаи, когда время вычисления результата функции модуля с повторным использованием возвращаемых значений соизмеримо с периодом сброса платформенного кеша.
Установка параметров сеанса «по требованию»
2.1. Не следует производить инициализацию параметров сеанса при запуске программы , так как:
- не все параметры сеанса запрашиваются из кода конфигурации при запуске программы.
- при работе программы возможно намеренное обнуление значений параметров сеанса из кода на встроенном языке.
Правильным способом установки значений параметров сеанса является установка значений «по требованию» в обработчике УстановкаПараметровСеанса модуля сеанса. Т.е. параметры сеанса должны быть инициализированы только в тот момент, когда к ним происходит первое обращение, как к неустановленным.
Пример установки параметров сеанса «по требованию»:
Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Если ИменаПараметровСеанса = Неопределено Тогда // Раздел установки параметров сеанса при начале сеанса (ИменаПараметровСеанса = Неопределено) // Выполняется установка параметров сеанса, которые можно инициализировать // при начале работы системы Иначе // Установка параметров сеанса "по требованию" // Параметры сеанса, инициализация которых требует обращения к одним и тем же данным // следует инициализировать сразу группой. Для того, чтобы избежать их повторной инициализации, // имена уже установленных параметров сеанса сохраняются в массиве УстановленныеПараметры УстановленныеПараметры = Новый Массив; Для Каждого ИмяПараметра ИЗ ИменаПараметровСеанса Цикл УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры); КонецЦикла; КонецЕсли; КонецПроцедуры
// Установить значения параметров сеанса и возвратить имена установленных параметров сеанса // в параметре УстановленныеПараметры. // // Параметры // ИмяПараметра - Строка - имя параметра сеанса, который требуется установить (проинициализировать). // УстановленныеПараметры - Массив - массив, в который добавляются имена // установленных (проинициализированных) параметров. // Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры) // Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже // был установлен - возврат. Если УстановленныеПараметры.Найти(ИмяПараметра) > Неопределено Тогда Возврат; КонецЕсли; Если ИмяПараметра > "ТекущийПользователь" Тогда ПараметрыСеанса.ТекущийПользователь = значение>; УстановленныеПараметры.Добавить(ИмяПараметра); КонецЕсли; КонецПроцедуры
См. также
- Влияние изменения значений параметров сеанса и функциональных опций на производительность механизма ограничения доступа к данным
1с как инициализировать параметр сеанса
Не могу разобраться, в каком месте в типовых конфигурациях УНФ 1.4 и УТ 11 происходит инициализация параметра сеанса РабочееМестоКлиента.
Ставлю точку останова до входа в процедуру СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса) в процедуре УстановкаПараметровСеанса(ИменаПараметровСеанса) модуля сеанса, отладчик говорит что параметр инициализирован. При этом при первом запуске типовой конфы параметр — пустая ссылка. Если создать рабочее место и перезапустить программу, в параметре будет созданное рабочее место.
На сколько я знаю до модуля сеанса никакого кода не выполняется. Где же тогда инициализируется этот параметр и где присваивается
Поиск по форуму порекомендовал следующее v8: 8.2 — что-то не понимаю по параметрам сеанса — из УТ 11 в свою
У поисковиков мнений не больше.
Прошу помощи тех, кто разбирался.
все параметры инициализируются в модуле сеанса, во все процедуры поставь точки останова и запусти
(0) тебе надо именно «происходит инициализация параметра сеанса РабочееМестоКлиента» или тупо запустить при старте РабочееМестоКлиента?
(1) Так и делал. В модуле сеанса единственная процедура УстановкаПараметровСеанса(ИменаПараметровСеанса), в которой вызывается единственная процедура СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса)
Перед входом в процедуру СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса) параметр уже инициализирован.
Вопрос, когда он успел.
(2) Во-первых, хочу понять, где именно и как «происходит инициализация параметра сеанса РабочееМестоКлиента». Во-вторых, реализовать работу с оборудованием подобно тому, как сделано в УНФ, т.е. с привязкой к рабочему месту. Единственная нерешенная на данный момент проблема — инициализация параметра сеанса РабочееМестоКлиента
>>Вопрос, когда он успел.
ты не поверишь, но даже когда в конфигураторе в отладчике ты обращаешся к параметру сенаса первый раз — он проходит инициализацию.
Смотри по коду этой процедуры СтандартныеПодсистемыСервер.УстановкаПараметровСеанса, не смотри в сам параемтр сеанса, отлавливай имя параметра из параметров процедуры
(4) Изучил я эту процедуру вдоль и поперек, упоминаний моего параметра нет.
То что, «когда в конфигураторе в отладчике ты обращаешся к параметру сенаса первый раз — он проходит инициализацию» допускаю.
Но откуда тогда значение в этом параметре появляется до вызова процедуры СтандартныеПодсистемыСервер.УстановкаПараметровСеанса
Сейчас попробовал выгрузить типовую конфу и загрузил ее в чистую базу, при первом запуске параметр не инициализирован. Смотрю дальше.
(2) До истины пока так и не докопался. Поэтому прошу пояснить, каким образом запустить при старте РабочееМестоКлиента?
(6) события смотри
(6) а вообще-то берешь в руки клавиатуру и набираешь в поиске по конфигурации слово «РабочееМестоКлиента».
чёт ты паришься слишком
я за 15 минут это определил, когда подсистему натаскивал
копни ещё и найдёшь
там хитрая лукавая схема, не пацанская
(9) Опиши эту хитрую схему, что бы знать, где копать. Перерыл вроде все.
(10) // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации.
//
Функция ОбработчикиИнициализацииПараметровСеанса() Экспорт
// Для задания обработчиков параметров сеанса следует использовать шаблон:
// Обработчики.Вставить(«|», «Обработчик»);
//
// Примечание. Символ ‘*’используется в конце имени параметра сеанса и обозначает,
// что один обработчик будет вызван для инициализации всех параметров сеанса
// с именем, начинающимся на слово НачалоИмениПараметраСеанса
//
Обработчики = Новый Соответствие;
//ПодключаемоеОборудование
Обработчики.Вставить(«РабочееМестоКлиента», «МенеджерОборудованияСервер.УстановитьПараметрыСеансаПодключаемогоОборудования»);
//Конец ПодключаемоеОборудование
Обработчики.Вставить(«ОткрытРежимМенеджераИзРМК», «ОбщегоНазначенияРТСервер.УстановитьПараметрыСеанса»);
Обработчики.Вставить(«РежимРегистрацииПродаж» , «ОбщегоНазначенияРТСервер.УстановитьПараметрыСеанса»);
Обработчики.Вставить(«ОбщиеЗначения» , «ОбщегоНазначенияРТСервер.УстановитьПараметрыСеанса»);
Обработчики.Вставить(«ТекущийМагазин» , «ОбщегоНазначенияРТСервер.УстановитьПараметрыСеанса»);
Это из Розницы. Тебе, наверное, тоже подойдет
Функция ОбработчикиИнициализацииПараметровСеанса() Экспорт
// Для задания обработчиков параметров сеанса следует использовать шаблон:
// Обработчики.Вставить(«|», «Обработчик»);
//
// Примечание. Символ ‘*’используется в конце имени параметра сеанса и обозначает,
// что один обработчик будет вызван для инициализации всех параметров сеанса
// с именем, начинающимся на слово НачалоИмениПараметраСеанса
//
Обработчики = Новый Соответствие;
//ПодключаемоеОборудование
Обработчики.Вставить(«РабочееМестоКлиента», «МенеджерОборудованияСервер.УстановитьПараметрыСеансаПодключаемогоОборудования»);