Что делать?! ПараметрыСеанса – ФиксированныйМассив видит только отладчик.

1. dimasts 22 29.05.17 19:23 Сейчас в теме
Чувствую себя идиотом.
Запускаю систему и при попытке прочитать уже инициализированный в прошлом сеансе ПараметрСеанса типа ФиксированныйМассив
выдаёт:
«Ошибка при получении атрибута контекста...»

Строка такая:
МассивГрупп[Индекс] = ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)

Параметр видится в отладчике, но очень хитрым способом!
Если вычислить выражение (шифт+F9) «ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)» или «ПараметрыСеанса.ТекущиеГруппы»
то получаем такую же ошибку.
(остальные параметры – не ФиксированныеМассивы – вычисляются нормально)

НО если сначала вычислить выражение (шифт+F9) «ПараметрыСеанса», то параметр заполнен и все данные верные.

Самое смешное, что после этого вычисления уже без проблем вычисляются(шифт+F9) «ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)»
и просто «ПараметрыСеанса.ТекущиеГруппы»

Вторые сутки уже пошли, весь стол в песке из глаз.
Друзья, ПАМАГИТЕ ПОЖАЛУЙСТА!
+
Найденные решения
3. Dnki 4 29.05.17 21:01 Сейчас в теме
Я кое-что не понимаю: что обозначает "прочитать уже инициализированный в прошлом сеансе". Кто такой этот прошлый сеанс?

У меня есть использование "ФиксированныйМассив".
При старте программы:
	ПараметрыСеанса.КросКурс			= Новый ФиксированныйМассив(Новый Массив);
В ходе работы используется:
		ТекКросКурс = ПараметрыСеанса.КросКурс[Ном];


«Ошибка при получении атрибута контекста...» говорит о том, что в Параметр ничего не записывали. А уже хотим читать. Обычные переменные в таком случае = Неопределено. А чтение такого ПС генерирует ошибку.
+
21. dimasts 22 02.06.17 11:43 Сейчас в теме
(19) Пришлось завести параметр Булево и сохранять в нём ПараметрСеанса заполнен Истина, не заполнен Ложь
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. Dondarrion 30.05.17 09:45 Сейчас в теме
(1)
НО если сначала вычислить выражение (шифт+F9) «ПараметрыСеанса», то параметр заполнен и все данные верные

попробуй ПараметрСеанса в переменную, а потом из переменной получить свой параметр.

похожее было у меня. Допустим у нас есть параметр сеанса который нужно заполнять по определенному условию. Пример
Парам = Неопределено;
Если а = 1 Тогда
   Парам = "абвг"
ИначеЕсли а = 2 тогда
  Парам = "бвгд"
Конец 

И если не указать еще ветку "иначе" у меня вылетала ошибка как у тебя
Хоть никогда параметр сеанса не будет инициализироваться по ветке Иначе, мне все равно пришлось дописать
Иначе
   Парам = ""


И обрати внимание не только на ту строку которую ты указал вполне возможно ПарамерыСеанса уже касячные приходят в эту строку
+
13. dimasts 22 30.05.17 09:46 Сейчас в теме
(12) Спасибо, разумно, сейчас проверю.
Очень не понятно, почему так происходит.
+
14. dimasts 22 30.05.17 10:31 Сейчас в теме
(13) Попробовал потестировать:

{ЗДЕСЬ ТОЧКУ ОСТАНОВА ПОСТАВИЛ}
МассивГрупп=ЗаполнитьМассивГрупп();//Это функция, которая возвращает массив групп в которых состоит пользователь
Тест=1;
Если тест=1 Тогда
ПараметрыСеанса.ТекущиеГруппы=Новый ФиксированныйМассив(МассивГрупп);
Иначе
тест=1
КонецЕсли;


Если Тест=1 то ПараметрыСеанса.ТекущиеГруппы читается даже не дойдя до строчки присвоения ему значения
Если Тест=0 то Ошибка при получении атрибута контекста

КАКАЯ ТО ХРЕНЬ ТВОРИТСЯ!
+
2. dimasts 22 29.05.17 19:25 Сейчас в теме
Вариант работы Клиент-Сервер.
На сервере включена отладка.

В принципе можно при каждом запуске инициировать этот параметр и тогда он нормально читается, но «библия» подобные выходки осуждает:
https://its.1c.ru/db/metod8dev#content:3435:hdoc

ПолныеПрава тоже не дают эффекта.

УстановитьПривилегированныйРежим() тоже не помогает, если чё.

Не в Модуле на сервере не в МодулеСеанса параметры сеанса типа ФиксированныйМассив получить невозможно
Пожалуйста, если у кого-нибудь хоть раз в жизни получится прочитать ФиксированныйМассив из ПараметровСеанса, напишите сюда
+
3. Dnki 4 29.05.17 21:01 Сейчас в теме
Я кое-что не понимаю: что обозначает "прочитать уже инициализированный в прошлом сеансе". Кто такой этот прошлый сеанс?

У меня есть использование "ФиксированныйМассив".
При старте программы:
	ПараметрыСеанса.КросКурс			= Новый ФиксированныйМассив(Новый Массив);
В ходе работы используется:
		ТекКросКурс = ПараметрыСеанса.КросКурс[Ном];


«Ошибка при получении атрибута контекста...» говорит о том, что в Параметр ничего не записывали. А уже хотим читать. Обычные переменные в таком случае = Неопределено. А чтение такого ПС генерирует ошибку.
+
6. dimasts 22 30.05.17 06:23 Сейчас в теме
(3) Имеется в виду предидущий запуск клиента. Параметры сеанса сохраняются от запуска к запуску – я сам не знал :) Почитай ссылочку в середине поста
+
7. Dnki 4 30.05.17 08:52 Сейчас в теме
* (6)
Параметры сеанса сохраняются от запуска к запуску
- Брехня-я-я! Не верю.
* По ссылке написано "Т.е. параметры сеанса должны быть инициализированы только в тот момент,
когда к ним происходит первое обращение" - может и умно, но не понял как это сделать. Нет возможности проверить ПС вопросом: "А ты инициализированный?. Тогда я буду считывать с тебя значение."
* Да плюньте Вы на эти мелочи! Они касаются не производительности всех запросов. А только "производительность механизма ограничения доступа к данным". Я ПС использую в полный рост, как альтернатива глобальным переменным. Производительность убивают совсем другие вещи.
alex-l19041; +1
10. dimasts 22 30.05.17 09:41 Сейчас в теме
(7) У меня не так много параметров, перед запуском приложения просто проверяю если ПараметрыСеанса совпадают с соответствующими данными в базе, то ни чего не трогаем, если нет то перезаполняем.
+
4. VmvLer 29.05.17 21:08 Сейчас в теме
Полагаю, согласно инфо
НО если сначала вычислить выражение (шифт+F9) «ПараметрыСеанса», то параметр заполнен и все данные верные


в момент вычисления родительского объекта параметров как раз и срабатывает некий код инициализации фикс массива одного из потомков, не?
+
5. dimasts 22 30.05.17 06:18 Сейчас в теме
(4) Всё верно. Я пытался имитировать эту последовательность в коде - результат отрицательный.
+
8. igel9780 171 30.05.17 09:14 Сейчас в теме
Первичное заполнение параметров сеанса из процедуры УстановкаПараметровСеанса(ИменаПараметровСеанса) произведена?
+
9. dimasts 22 30.05.17 09:40 Сейчас в теме
(8) Естественно, их даже видит отладчик, все данные которые он выдаёт корректные.
+
11. dimasts 22 30.05.17 09:43 Сейчас в теме
(9) В чём и прикол-то, что после того как отладчик не видит ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс), пока не посмотришь просто ПараметрыСеанса.
Как только посмотрел, становится доступен ПараметрыСеанса.ТекущиеГруппы.Получить(Индекс)
+
15. dimasts 22 30.05.17 18:19 Сейчас в теме
Ребят, обнаружил странную странность.
Это нормально, что МодульСеанса 2 раза запускается?
Мне кажется это близко к раскопке проблемы.
Если проходить по шагам (F11), то сразу после попытки прочитать МассивПараметров=ПараметрыСеанса.ТекущиеГруппы;
МОДУЛЬ СЕАНСА ПЕРЕЗАПУСКАЕТСЯ ЗАНОВО
+
16. dimasts 22 30.05.17 18:37 Сейчас в теме
Короче долго объяснять. Параметры сеанса действительно сбрасываются при каждом перезапуске.
+
18. Dnki 4 01.06.17 06:09 Сейчас в теме
(16)"Параметры сеанса действительно сбрасываются," - я злобно ехидничаю.

"проверяю если ПараметрыСеанса совпадают с соответствующими данными в базе, то ни чего не трогаем, если нет то перезаполняем" - совсем не понятно, зачем Вы придумавыете себе трудности. Так сделать ведь невозможно. ПС не "проверишь" до присвоения.
+
20. dimasts 22 02.06.17 11:42 Сейчас в теме
(18) Да я это понял уже. Если бы параметры действительно сохранялись, то это было бы актуально. Но это была недоработка моего алгоритма - в тайне от меня параметры заполнялись при запуксе в одной из процедур.
+
17. dimasts 22 30.05.17 18:40 Сейчас в теме
В связи с этим возникает такой вопрос.
Как проверить инициализирован параметр или нет без получения ошибки при его чтении?
+
19. Dnki 4 01.06.17 06:10 Сейчас в теме
21. dimasts 22 02.06.17 11:43 Сейчас в теме
(19) Пришлось завести параметр Булево и сохранять в нём ПараметрСеанса заполнен Истина, не заполнен Ложь
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот