Чувствую себя идиотом.
Запускаю систему и при попытке прочитать уже инициализированный в прошлом сеансе ПараметрСеанса типа ФиксированныйМассив выдаёт:
«Ошибка при получении атрибута контекста...»
Параметр видится в отладчике, но очень хитрым способом!
Если вычислить выражение (шифт+F9) «ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)» или «ПараметрыСеанса.ТекущиеГруппы»
то получаем такую же ошибку.
(остальные параметры – не ФиксированныеМассивы – вычисляются нормально)
НО если сначала вычислить выражение (шифт+F9) «ПараметрыСеанса», то параметр заполнен и все данные верные.
Самое смешное, что после этого вычисления уже без проблем вычисляются(шифт+F9) «ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)»
и просто «ПараметрыСеанса.ТекущиеГруппы»
Вторые сутки уже пошли, весь стол в песке из глаз.
Друзья, ПАМАГИТЕ ПОЖАЛУЙСТА!
Я кое-что не понимаю: что обозначает "прочитать уже инициализированный в прошлом сеансе". Кто такой этот прошлый сеанс?
У меня есть использование "ФиксированныйМассив".
При старте программы:
ПараметрыСеанса.КросКурс = Новый ФиксированныйМассив(Новый Массив);
В ходе работы используется:
ТекКросКурс = ПараметрыСеанса.КросКурс[Ном];
«Ошибка при получении атрибута контекста...» говорит о том, что в Параметр ничего не записывали. А уже хотим читать. Обычные переменные в таком случае = Неопределено. А чтение такого ПС генерирует ошибку.
НО если сначала вычислить выражение (шифт+F9) «ПараметрыСеанса», то параметр заполнен и все данные верные
попробуй ПараметрСеанса в переменную, а потом из переменной получить свой параметр.
похожее было у меня. Допустим у нас есть параметр сеанса который нужно заполнять по определенному условию. Пример
Парам = Неопределено;
Если а = 1 Тогда
Парам = "абвг"
ИначеЕсли а = 2 тогда
Парам = "бвгд"
Конец
И если не указать еще ветку "иначе" у меня вылетала ошибка как у тебя
Хоть никогда параметр сеанса не будет инициализироваться по ветке Иначе, мне все равно пришлось дописать
Иначе
Парам = ""
И обрати внимание не только на ту строку которую ты указал вполне возможно ПарамерыСеанса уже касячные приходят в эту строку
{ЗДЕСЬ ТОЧКУ ОСТАНОВА ПОСТАВИЛ}
МассивГрупп=ЗаполнитьМассивГрупп();//Это функция, которая возвращает массив групп в которых состоит пользователь
Тест=1;
Если тест=1 Тогда
ПараметрыСеанса.ТекущиеГруппы=Новый ФиксированныйМассив(МассивГрупп);
Иначе
тест=1
КонецЕсли;
Если Тест=1 то ПараметрыСеанса.ТекущиеГруппы читается даже не дойдя до строчки присвоения ему значения
Если Тест=0 то Ошибка при получении атрибута контекста
УстановитьПривилегированныйРежим() тоже не помогает, если чё.
Не в Модуле на сервере не в МодулеСеанса параметры сеанса типа ФиксированныйМассив получить невозможно
Пожалуйста, если у кого-нибудь хоть раз в жизни получится прочитать ФиксированныйМассив из ПараметровСеанса, напишите сюда
Я кое-что не понимаю: что обозначает "прочитать уже инициализированный в прошлом сеансе". Кто такой этот прошлый сеанс?
У меня есть использование "ФиксированныйМассив".
При старте программы:
ПараметрыСеанса.КросКурс = Новый ФиксированныйМассив(Новый Массив);
В ходе работы используется:
ТекКросКурс = ПараметрыСеанса.КросКурс[Ном];
«Ошибка при получении атрибута контекста...» говорит о том, что в Параметр ничего не записывали. А уже хотим читать. Обычные переменные в таком случае = Неопределено. А чтение такого ПС генерирует ошибку.
- Брехня-я-я! Не верю.
* По ссылке написано "Т.е. параметры сеанса должны быть инициализированы только в тот момент,
когда к ним происходит первое обращение" - может и умно, но не понял как это сделать. Нет возможности проверить ПС вопросом: "А ты инициализированный?. Тогда я буду считывать с тебя значение."
* Да плюньте Вы на эти мелочи! Они касаются не производительности всех запросов. А только "производительность механизма ограничения доступа к данным". Я ПС использую в полный рост, как альтернатива глобальным переменным. Производительность убивают совсем другие вещи.
(7) У меня не так много параметров, перед запуском приложения просто проверяю если ПараметрыСеанса совпадают с соответствующими данными в базе, то ни чего не трогаем, если нет то перезаполняем.
(9) В чём и прикол-то, что после того как отладчик не видит ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс), пока не посмотришь просто ПараметрыСеанса.
Как только посмотрел, становится доступен ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)
Ребят, обнаружил странную странность.
Это нормально, что МодульСеанса 2 раза запускается?
Мне кажется это близко к раскопке проблемы.
Если проходить по шагам (F11), то сразу после попытки прочитать МассивПараметров=ПараметрыСеанса.ТекущиеГруппы;
МОДУЛЬ СЕАНСА ПЕРЕЗАПУСКАЕТСЯ ЗАНОВО
(16)"Параметры сеанса действительно сбрасываются," - я злобно ехидничаю.
"проверяю если ПараметрыСеанса совпадают с соответствующими данными в базе, то ни чего не трогаем, если нет то перезаполняем" - совсем не понятно, зачем Вы придумавыете себе трудности. Так сделать ведь невозможно. ПС не "проверишь" до присвоения.
(18) Да я это понял уже. Если бы параметры действительно сохранялись, то это было бы актуально. Но это была недоработка моего алгоритма - в тайне от меня параметры заполнялись при запуксе в одной из процедур.