Ошибка получения неинициализированного значения параметра сеанса

Содержание:

1.      Пример появления ошибки «Попытка получения неинициализированного значения параметра сеанса» в 1С

2.      Устранение неполадки «Попытка получения неинициализированного значения параметра сеанса» в 1С  

1.      Пример появления ошибки «Попытка получения неинициализированного значения параметра сеанса» в 1С

В статье будут описаны способы того, как разрешать ошибку в системе программы 1С, связанную с попыткой получения неинициализированного значения параметра сеанса, а именно: будет приведён пример столкновения с данной неполадкой и даны два метода, которые могут помочь устранить эту неполадку.

У некоторых разработчиков 1С: Предприятия может возникать проблема во время работы с отчётами управляемых форм – появляется неполадка с текстом «Попытка получения неинициализированного значения параметра сеанса».

Далее представлен пример, в котором при работе с отчётом по отображению движений с субконто в регистре бухгалтерского учета в 1С, во время формировки самого отчёта появляется ошибка, как демонстрируется на скриншоте программного кода 1С ниже:


Ошибка выполнения отчета

При этом, отчёт формировался без полных прав.

После этого, эта ошибка появляется и для иных отчётов и документации.

Стоит оговорить, что у юзера было в это время присвоено две роли, а именно – как пользователь (благодаря этой роли юзер имеет права доступа к ссылкам по всей документации), а также бухгалтер (благодаря этой роли юзер имеет права доступа к различным отчётностям).  

2.      Устранение неполадки «Попытка получения неинициализированного значения параметра сеанса» в 1C

Рассмотрим два метода, один из которых точно поможет устранить неполадку. Следует оговорить, что первый способ подходит именно для случая из примера выше, с теми же ролями юзера, а второй способ – более общий, для такого же текста ошибки, но не обязательно тех же ролей.

1.      В общем, неполадка заключается в том, что главным режимом запуска 1С для данной конфигурации был «Обычное положение». При этом, инициализация параметров проводилась для внутри модуля «Обычного приложения», внутри процедуры «ПриНачалеРаботыСистемы», а необходимо было инициализировать параметры внутри модуля сеанса в процедуре «УстановкаПараметровСеанса». Перемена условий инициализации полностью устранит неполадку «Попытка получения неинициализированного значения параметра сеанса».

Но, если есть сомнения, то можно написать следующую небольшую обработку, которая перепроверит все остальные параметры, как показано ниже:

Параметр из Метаданных

После этого, можно точно убедиться, что проблема была только в тех параметрах.

2.      Для более общего случая – необходимо найти строку при помощи запроса, как можно увидеть ниже:

SELECT

Далее удаляем лишнее:

Delete

После этой процедуры, как только зайдём в конфигуратор – нужно провести не динамическое обновление 1С. Этот процесс первого входа в базу займёт примерно минут пятнадцать. После этого, ошибка не возникнет больше.

В статье была рассмотрена ошибка «Попытка получения неинициализированного значения параметра сеанса», приведён конкретный пример сеанса с возникшей неполадкой. И приведены два варианта её устранения – для приведённого примера и общее решение.

Специалист компании «Кодерлайн»

Роман Девочкин

(6) Добавлю подробностей. Я не из России. Московская небольшая организация через знакомых моих попросила сделать для них обработку: загрузка расходных накладных в БУХ. Думаю им показалось что услуги компании 1С дорогие для них. Обработка сделана и работает без проблем. Периодически они мне пишут и просят обновить релиз. Про БИТ узнала когда его загрузили осенью. Понимаю что служит для связи с органами контроля типа налоговой и для сдачи отчетов.

На сайте https://www.bitfinance.ru/support/releases/ в разделе релизы указан вот этот последний: «Вышел новый релиз 3.1.27.3 (для «1С:Бухгалтерия предприятия» релиз 3.0.43.251)». Когда выстрелила ошибка, пошла в модуль сеанса чтобы посмотреть где и как параметр инициализироваться должен. Вот как выглядит процедура в модуле сеанса:

Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)

    
    // добавление кода. Начало: 19.09.2016 # 

    // Инициализация параметров сеанса системы лицензирования

    бит_сл_сервер.ИнициализацияПараметровСеанса(ИменаПараметровСеанса);
    // добавление кода конец #

    
    // СтандартныеПодсистемы

    СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
    // Конец СтандартныеПодсистемы

    
    // ТехнологияСервиса

    ТехнологияСервиса.ВыполнитьДействияПриУстановкеПараметровСеанса(ИменаПараметровСеанса);
    // Конец ТехнологияСервиса

    
КонецПроцедуры

"как это вы так всё сделали? руководство по БИТ-у читали? "
Нет, руководство к БИТ-у не читала. (

Запустила стандартный метод обновления, проверила чтобы модули БИТ не попадали под объединение (с этим был порядок) и просто обновила конфигурацию. Вызов инициализации параметров БИТ-а остался.

Я не исключаю того что могли потеряться БИТ-овские обработчики, но не пойму как они могли слететь, если они в отдельном модуле…

Я нашла обработку для декомпиляции модуля, попробую хотя бы понять что там происходит. Менять что-либо в тех модулях плохая идея, но может добавлю инициализацию где-то дополнительно, но для этого нужно знать как их инициализируют в родном модуле…

Ошибка при получении значения атрибута контекста (ТекущийПользователь)

bless18
06.04.2010 09:32 Прочитано: 49754

Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х

 Процедура ПриНачалеРаботыСистемы()
Пользователь = ПараметрыСеанса.ТекущийПользователь;
Если обЗначениеНеЗаполнено(Пользователь.Сотрудник) Тогда
ИмяПользователя = СокрЛП(Пользователь.Наименование);
Иначе
ИмяПользователя = СокрЛП(Пользователь.Сотрудник.Наименование);
КонецЕсли;
Предупреждение("Здравствуйте уважаемый пользователь """+ИмяПользователя+"""
|Система готова к работе.", 3);
КонецПроцедуры

Где происходит их инициализация?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
06.04.2010 09:48 Ответ № 1

Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо:
Код 1C v 8.х

 ИмяПользователя = ИмяПользователя();
Если Не ПустаяСтрока(ИмяПользователя) Тогда
ТекущийПользователь = Справочники.Пользователи.НайтиПоКоду(ИмяПользователя);
КонецЕсли;
ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код

bless18
06.04.2010 09:56 Ответ № 2

А если не совпадают, можно как-нибудб привязать пользователя к сотруднику?

E_Migachev
06.04.2010 09:57 Ответ № 3

А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)

В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают:

Код 1C v 8.х

 Процедура УстановкаПараметровСеанса()
Спр = Справочники.Сотрудники;
ПараметрыСеанса.ТекущийПользователь=Спр.НайтиПоРеквизиту("Пользователь1С", ИмяПользователя());
КонецПроцедуры
//где Пользователь1С, это реквизит справочника сотрудники, и именем как вбито в конфигураторе

Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы.

Ну а дальше подставлять сопоставленное значение при создании соответствующего документа:

Код 1C v 8.х

  Док.Пользователь=ПараметрыСеанса.Пользователь;   

События модуля сеанса:
Глобальный контекст
УстановкаПараметровСеанса (SessionParametersSetting)
Синтаксис:
УстановкаПараметровСеанса(<Требуемые параметры>)
Параметры:
<Требуемые параметры>
Тип: Массив; Неопределено. Массив устанавливаемых идентификаторов параметров сеанса, которые нужно инициализировать, если обработчик вызывается перед использованием неинициализированных параметров сеанса.
Неопределено, если обработчик события вызывается системой при начале сеанса или при захвате соединения из пула.
Описание:
Событие предназначено для инициализации параметров сеанса.
Вызывается системой:
при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;
перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра «Параметры сеанса» является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то возникает исключение.

bless18
06.04.2010 12:13 Ответ № 4

Спасибо вам огромное! Вы мне очень помогли!

bless18
06.04.2010 12:15 Ответ № 5

Спасибо вам огромное! Вы мне очень помогли!

E_Migachev
06.04.2010 15:44 Ответ № 6

Пожалуйста )

Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку

Показывать по
10
20
40
сообщений

Новая тема

Ответить

Olga3891

Дата регистрации: 10.10.2006
Сообщений: 497

Вопрос к программистам 1С. Есть ограничение на чтение на регистр накопления на уровне записей, где в запросе используется только один параметр сеанса. 1С работает в управляемом режиме. есть отчет, внешний, написан с использованием СКД — где запрос берет данные из этого регистра накопления. запускаем этот отчет на выполнение — возникает ошибка «Попытка получения неинициализированного значения параметра сеанса». если для проверки запрос из СКД выполняю отдельно(у другой тестовой обработке)-то он благополучно выполняется. а вот с СКД не хочет. Помогите пож-та? может кто сталкивался с этим?

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

А если отчет в конфигурацию встроить, то «видит» он этот параметр сеанса?

Olga3891

Дата регистрации: 10.10.2006
Сообщений: 497

нет, не видит. причем база серверная. я восстановила копию базы в файловый вариант. и все заработало. видимо это косяк платформы?

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

А какая платформа? А досупны ли эти параметры сеанса если их просто через табло получить?

Olga3891

Дата регистрации: 10.10.2006
Сообщений: 497

8.2.15.301. да, доступны. в делаю внешний отчет в серверном варианте, в котором выполняю запрос из СКД, и использую в условии этот параметр сеанса, все работает.

Денис (САМАРА)

Дата регистрации: 09.04.2008
Сообщений: 8351

15.318 последняя платформа.

Показывать по
10
20
40
сообщений

Неинициализированные параметры сеанса ☑ 0

Maxus43

26.01.12

10:43

Приветствую!

Может кто в курсе почему параметры сеанса могут не инициализироваться под одним и тем же пользователем? Перезаходим — всё нормально. По коду вобще не понятно как он может быть неинициализированным, ещё до УстановкаПараметровСеанса(ТребуемыеПараметры) — он уже есть и готов к использованию, незаполненный только. Конкретно речь про параметр «ГраницыЗапретаИзмененияДанных», но это думаю неважно. Платформа 8.2.14.533, инет перерыл — не нашёл…

1

Maxus43

26.01.12

10:57

апоньки

2

Cube

26.01.12

10:58

Кеш?

3

Maxus43

26.01.12

11:01

сомневаюсь… под разными пользователми так себя ведёт, и то работает то не работает. Если бы кэш — всегда бы не работало поидее

4

Cube

26.01.12

11:04

(3) Тогда демоническое обновление…

5

Maxus43

26.01.12

11:04

(4) <> (2) чтоли? от демонического Кэш едет

6

Cube

26.01.12

11:08

(5) Ответ в (2) относился к (0), там про одного пользователя. Ответ (4) относится к (3). К тому же в (4) ещё и причина протелепатирована, что не устраивает? :)

7

Maxus43

26.01.12

11:10

за последний месяц демонических обновлений не было, вот что не устраивает)

8

Cube

26.01.12

11:19

(7) Ну тогда хоть монитор протри))

9

Maxus43

26.01.12

11:33

дак реально такая байда, скриншоты с ошибками аж прислали. я вобще понять не могу как параметр сеанса с типом ХранилищеЗначения может быть не инициализирован… он не заполнен может быть.

10

Maxus43

26.01.12

11:46

идей нет больше? хз чо делать, даже воспроизвести не могу ошибку

11

DmitryPavlik

26.01.12

11:51

(10) такая же ситуация

12

Maxus43

26.01.12

11:56

(11) как бороться то? ошибка платформы чтоль незарегистрированая?

13

organizm

26.01.12

12:04

Та же херня. Боремся удалением временных файлов 1С в ApplicationData и в LocalSettings там папки с гуидами в названии.

14

organizm

26.01.12

12:05

эта ошибка платформы тянется, на сколько я себя помню, с 8.1…

15

Maxus43

26.01.12

12:07

(14) описание бы найти ошибки, щас на сайте 1с смотрел — в официальных ошибках нет

16

organizm

26.01.12

12:14

мне кажется и не будет, это фантомашка, специально не придумаешь. случается редко, и мне кажется из-за того что при закрытии программа не успевает что то поудалять.

17

Maxus43

26.01.12

12:23

кстати щас поймал такую ошибку при обмене с филиалом…

18

Jaffar

26.01.12

12:36

(15) можно не ждать чуда и самому написать на хотлайн, ну или попытаться обновить платформу до 8.2.15.

19

Maxus43

26.01.12

12:39

(18) читал про исправленные ошибки в 8.2.15 — там такого нет…

20

Defender aka LINN

26.01.12

12:43

(0) «ещё до УстановкаПараметровСеанса(ТребуемыеПараметры) — он уже есть и готов к использованию, незаполненный только» — и как же ты это выяснил?

21

Maxus43

26.01.12

13:13

(20) отладчиком. При первом заходе в эту процедуру в параметрах сеанса уже есть все параметры заданные в конфигураторе, и т.к. он имеет тип значения — Хранилище значения, то при получении его мы достаём Неопределено. Ни о каких ошибках типа попытка получить неинициализированный параметр сеанса речи не идёт… или не так смотрю?

22

Defender aka LINN

26.01.12

13:17

(21) Бугога. Первое обращение к неиницилизированному параметру вызывает его установку.

23

Maxus43

26.01.12

13:20

(22) читал я справку уже. а ошибка то почему? причем если перезайти — уже не повторяется?

весь код перерыл, нет ничо подобного там

24

Defender aka LINN

26.01.12

13:23

(23) Возможно, сочетание каких-нибудь не часто встречающихся факторов.

25

Maxus43

26.01.12

13:26

(24) т.е. в итоге типа что-то (14) получается всё равно?

не получается никак отловить, ошибка то не воспроизводится

26

Defender aka LINN

26.01.12

14:08

(25) Лично я такой ошибки не припомню. Я скорее поверю, что как-то криво написан код установки параметра сеанса. Лично я бы обвешал все по периметру флажками (записью в ЖР, например) и анализировал бы потом.

Ну и 90% «ошибок платформы» сидит за клавиатурой.

27

Jaffar

26.01.12

14:43

(26) прокладка между клавиатурой и платформой? :-)

28

Maxus43

26.01.12

15:11

по всему выходит что параметры сеанса ещё и кэшируются.

Сейчас «ещё до УстановкаПараметровСеанса(ТребуемыеПараметры)» он уже не просто инициализирован но и заполнен значениями

29

Maxus43

26.01.12

15:14

+ т.е. в момент описаный в СП как:

при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;

30

Defender aka LINN

26.01.12

15:47

(28) Еще раз — они установлены потому, что ты решил на них посмотреть. Если бы ты на них не смотрел — они бы не были установлены. Такой вот фокус.

31

Jaffar

26.01.12

16:11

(30) а как же тогда выводить их в ЖР? или в этом случае правило «Первое обращение к неиницилизированному параметру вызывает его установку» не выполняется?

32

Gop999

27.01.12

10:34

Та же беда. Постоянно у пользователей выскакивает сообщение о том, что не инициализирован параметр сеанса «ГраницаЗапретаИзмененияДанных».

Но еще и мало того ругается на то, что параметров не существует в «ПараметрахСеанса». А как такое может быть? Скажем параметр «НаличиеОбменаУПП» установлен в конфигурации, и обязательно присутствует в ПараметрахСеанса, куда он оттуда девается? Я понимаю не инициализирован, но не существует…???

Причем может исчезнуть, после перезапуска работает, потом опять и т.д.

Все это больше смахивает на нестабильность самой 1с.

Кто нибудь решил эти проблемы?

33

dmpl

27.01.12

10:36

(0) Режим совместимости включен?

34

Maxus43

27.01.12

10:38

(33) да, с 8.1. скоро на режим совместимости 8.2.13 перейдём

(32) да странно как то ведёт себя на самом деле. Вроде у меня получается что из-за блокировок может не проинициализироваться…

35

dmpl

27.01.12

10:40

(34) Даю рецепт:

В модуле сеанса, в процедуре УстановкаПараметровСеанса() в ветке

Если ТребуемыеПараметры = Неопределено Тогда

принудительно устанавливаем все параметры сеанса. После этого как бабка отшептала.

36

Gop999

27.01.12

10:50

(34) Собственно я и думал о таком решении. Но смущает один момент. Ведь параметры, то инициализируются, а потом «разваливаются»(или как это назвать). Но раз Вы уже пробовали, значит пойдем по этому пути.

37

Gop999

27.01.12

10:51

(33) А у нас отключен полностью режим совместимости. Но так же было когда режим был с поддержкой 8.1

38

dmpl

27.01.12

10:52

(36) Происходит переброска сеанса с одного сервера на другой — и в этот момент параметры становятся неинициализированными (контекст не перебрасывается, хотя сервер, видимо, считает, что должен перебрасываться). Причем это происходит даже если сервер всего 1.

39

Maxus43

27.01.12

10:56

(35) :) вчера ещё так сделал, но именно для проблемного параметра. пока не тестил ещё, собсно и тестить не получится, не воспроизводится ошибка.

40

Gop999

27.01.12

10:57

(38)А это как лечить?

41

Gop999

27.01.12

10:58

(38)Или принудительная установка и в этом поможет?

42

dmpl

27.01.12

11:02

(40) А это уже 1С должна исправить. На текущий момент описание в СП не соответствует реальному поведению платформы. По какой-то причине обработчик для некоторых параметров сеанса не вызывается когда надо, 100% шанс вызова только для параметра Неопределено.

(41) Установка всех параметров при передаче Неопределено лечит проблему на 99,99%.

43

Gop999

27.01.12

11:03

(42)Понял, огромное спасибо!Пробуем.

44

Maxus43

27.01.12

11:05

(42) официального описания такого бага нет у 1с?

45

Gop999

27.01.12

11:08

(44)Я искал, все перерыл — не нашел. И к 1С обращался, ничего не знают. Написали что-то про связку Сервер1С — Сервер W — SQL. Так отписка.

46

dmpl

27.01.12

11:09

(44) Я хотел им написать, да они ведь отфутболят в связи с режимом совместимости + «не удалось воспроизвести».

47

Jaffar

27.01.12

12:14

(46) напиши сразу «проявляется не всегда».

я тоже им писал, что 8.2.14 не хотела создавать начальный образ периферийки — мне отписались «не удалось воспроизвести», но потом исправили.

48

Gop999

27.01.12

12:25

Господа коллеги. РЕШЕНИЕ ПО ДАННОЙ ПРОБЛЕМЕ.

На идею навел «dmpl» пост № 38, за что ему отдельное ОГРОМНОЕ спасибо.

Суть вот в чем, для ускорения, изолирования и т.д. 1С предлагает запускать сервер 1С с множеством рабочих процессов. Что нами использовалось на 8.1 без проблем. Как написал «dmlp» сервер начинает гонять сеансы между процессами (почему и зачем это уже к 1С), но гоняет косячно. По крайней мере в части параметров сеанса.

Мы запустили сервер 1С с одним рабочим процессом. И как бабка отшептала все эти ошибки.

Количество пользователей 150, производительность по первым прикидкам не упала нисколько. А в части переброски сеансов, даже увеличилась. Т.к. ничего не перебрасывает.

Как говорится решение с пылу, с жару.

49

RusDum

27.01.12

12:47

(38)(48) Ай помогло, реально!!! 10 дней мучений. Убили все процессы, оставили 1, все заработало. Спасибо!

50

pbelsib

27.01.12

12:56

при начале работы системы — смотрим в табло на ПараметрыСеанса,

и видим, что часть из них: «ошибка чтения записи», причем при каждом запуске по разному. у нас это появилось на третий день после перехода с 13 релиза на 15.

я сделал так: при старте, в процедуре модуля ПолныеПрава

   Для Каждого Стр ИЗ Метаданные.ПараметрыСеанса Цикл

         Попытка

              А=ПараметрыСеанса[Стр.Имя];   //читаем, и если ошибка — инициализируем сами.

              Продолжить;

         Исключение

         КонецПопытки;

         
         Если Стр.Тип=Новый ОписаниеТипов(«ФиксированныйМассив») Тогда

              ПараметрыСеанса[Стр.Имя]=Новый ФиксированныйМассив(Новый Массив());

         ИначеЕсли Стр.Тип=Новый ОписаниеТипов(«ХранилищеЗначения») Тогда

              ПараметрыСеанса[Стр.Имя]=Новый ХранилищеЗначения(Неопределено);

         ИначеЕсли Стр.Тип=Новый ОписаниеТипов(«Булево») Тогда

              ПараметрыСеанса[Стр.Имя]=Ложь;

         ИначеЕсли СокрЛП(Стр.Тип)=»Строка» Тогда ///Стр.Тип=Новый ОписаниеТипов(«Строка») Тогда

              ПараметрыСеанса[Стр.Имя]=»»;

         ИначеЕсли Стр.Тип=Новый ОписаниеТипов(«СправочникСсылка.Пользователи») Тогда

              ПараметрыСеанса[Стр.Имя]=Справочники.Пользователи.ПустаяСсылка();

         Иначе

              //здесь вылетит нафик

              //ПараметрыСеанса[Стр.Имя]=Неопределено;

              //Сообщить(СокрЛП(Стр.Тип));

         КонецЕсли;

    КонецЦикла;

51

Kraft

27.01.12

13:21

(0) Это трабла следствие работы встроенного механизма отложенной инициализации параметров санса. Проявляется если процессов на сервере больше одного. Лечится так:

В модуле сеанса в разделе безусловной инициализации нужно проинициализировать некоторые параметры сразу (текст между каментов + и -):

Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)

Если ТребуемыеПараметры = Неопределено Тогда            // раздел «безусловной» инициализации параметров сеанса

ПолныеПрава.УстановитьПараметрыМеханизмаОграниченияПравДоступа();  

//+++++++++++++++++

ПолныеПрава.ОпределитьФактИспользованияРИБ();

ПолныеПрава.УстановитьПараметрГраницыЗапретаИзмененияДанных();

//——————

Иначе          

52

Maxus43

27.01.12

13:29

Только рабочий процесс один у нас, ибо на 8.2 1с не рекомендует сама юзать много процессов (пруфа нет, читали где-то, не суть). Безусловная инициализация наверно поможет, что и было предложено

53

lxs

27.01.12

14:29

столкнулся при обмене между базами. лечил принудительной инициализацией. больше проблема не возникала.

54

Maxus43

27.01.12

14:33

(53) > (17) ага, лично я только так и словил.

Короче видимо трабла решена в мойм случае, эти ребята из филиала запустили несколько рабочих процессов. у всех остальных он один, и проблем нет

55

lxs

27.01.12

14:34

(54) обмен по COM?

56

Maxus43

27.01.12

14:39

(55) нет обычный, но опять же наверно было таки связано с несколькими раб процессами, во время обмена просто я сам эту ошибку увидел

57

Jaffar

27.01.12

23:52

Известные ошибки версии 8.2.15, планируемые к исправлению в версии 8.2.15

10096672  Попытка получения неинициализированного значения параметра сеанса

Проблема:

В клиент-серверном варианте информационной базы при работе в толстом клиенте, если кластер содержит несколько рабочих процессов, или выполнялись динамические обновления конфигурации базы данных, то при попытке получить из кода толстого клиента значения некоторых параметров сеанса может происходить ошибка

Попытка получения неинициализированного значения параметра сеанса

Дата публикации:

2012-01-19

Ошибка при получении значения атрибута контекста (ТекущийПользователь)

bless18
06.04.2010 09:32 Прочитано: 52555

Ошибка при получении значения атрибута контекста (ТекущийПользователь): Попытка получения неинициализированного значения параметра сеанса
Пользователь = ПараметрыСеанса.ТекущийПользователь;
по причине:
Попытка получения неинициализированного значения параметра сеансаКод 1C v 8.х

 Процедура ПриНачалеРаботыСистемы()
Пользователь = ПараметрыСеанса.ТекущийПользователь;
Если обЗначениеНеЗаполнено(Пользователь.Сотрудник) Тогда
ИмяПользователя = СокрЛП(Пользователь.Наименование);
Иначе
ИмяПользователя = СокрЛП(Пользователь.Сотрудник.Наименование);
КонецЕсли;
Предупреждение("Здравствуйте уважаемый пользователь """+ИмяПользователя+"""
|Система готова к работе.", 3);
КонецПроцедуры

Где происходит их инициализация?

Yandex
Возможно, вас также заинтересует

Реклама на портале

E_Migachev
06.04.2010 09:48 Ответ № 1

Когда в Общие — Параметры сеанса добавил ТекущийПользователь, то его нужно определять при загрузке:
так же в процедуре ПриНачалеРаботыСистемы пишешь что то типо:
Код 1C v 8.х

 ИмяПользователя = ИмяПользователя();
Если Не ПустаяСтрока(ИмяПользователя) Тогда
ТекущийПользователь = Справочники.Пользователи.НайтиПоКоду(ИмяПользователя);
КонецЕсли;
ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь;

Это работает при условии, что ИмяПользователя заданное в конфигураторе, равно Имени введенному в справочнике Пользователей в реквизит Код

bless18
06.04.2010 09:56 Ответ № 2

А если не совпадают, можно как-нибудб привязать пользователя к сотруднику?

E_Migachev
06.04.2010 09:57 Ответ № 3

А лучше добавить процедуру в Модуль сеанса(Правой клавишей щелкаещь на названии конфигурации и выбираешь Открыть модуль сеанса)

В ней создаешь Процедура УстановкаПараметровСеанса () и в ней пишешь код который я предложил выше или так, Если не совпадают:

Код 1C v 8.х

 Процедура УстановкаПараметровСеанса()
Спр = Справочники.Сотрудники;
ПараметрыСеанса.ТекущийПользователь=Спр.НайтиПоРеквизиту("Пользователь1С", ИмяПользователя());
КонецПроцедуры
//где Пользователь1С, это реквизит справочника сотрудники, и именем как вбито в конфигураторе

Эта процедура вызывается раньше чем ПриНачалеРаботыСистемы.

Ну а дальше подставлять сопоставленное значение при создании соответствующего документа:

Код 1C v 8.х

  Док.Пользователь=ПараметрыСеанса.Пользователь;   

События модуля сеанса:
Глобальный контекст
УстановкаПараметровСеанса (SessionParametersSetting)
Синтаксис:
УстановкаПараметровСеанса(<Требуемые параметры>)
Параметры:
<Требуемые параметры>
Тип: Массив; Неопределено. Массив устанавливаемых идентификаторов параметров сеанса, которые нужно инициализировать, если обработчик вызывается перед использованием неинициализированных параметров сеанса.
Неопределено, если обработчик события вызывается системой при начале сеанса или при захвате соединения из пула.
Описание:
Событие предназначено для инициализации параметров сеанса.
Вызывается системой:
при установке соединения с информационной базой или при захвате соединения с информационной базой из пула до вызова всех остальных обработчиков. Значение параметра «Параметры сеанса» — Неопределено;
перед фактическим использованием значений параметров сеанса, которые не были инициализированы ранее. В этом случае значением параметра «Параметры сеанса» является массив идентификаторов неинициализированных параметров сеанса, значения которых используются. Если после выполнения обработчика хотя бы один из перечисленных параметров сеанса остается неинициализированным, то возникает исключение.

bless18
06.04.2010 12:13 Ответ № 4

Спасибо вам огромное! Вы мне очень помогли!

bless18
06.04.2010 12:15 Ответ № 5

Спасибо вам огромное! Вы мне очень помогли!

E_Migachev
06.04.2010 15:44 Ответ № 6

Пожалуйста )

Подсказка: Вы можете приложить к ответу файл или изображение щелкнув по значку или в редакторе.

Каким алгоритмом можно понять, на каком шаге инициализирует данный параметр типовая конфигурация БСП?
Ставлю точку останову на в модуле сеанса, так в БСП к этому шагу уже все определено…

Добавлено через 33 минуты
В общем проблема решена.

Если полностью перейти на версию БСП 2.3.1.76 то этой проблемы нет, где то там, в глубине, оно самостоятельно инициализирует параметры сеанса.

Значения типо Булево можно конечно и самому проинициализировать, но тип значения «Фиксированная Структура» нельзя. Вернее можно но, надо правильно ее создавать, для использования в дальнейшем.

Попытка скрестить версии БСП 2.2.5.36 и БСП 2.3.1.76 путем отдельных добавлений — не удачное решение.

Добавлено через 43 минуты
Либо же самостоятельно реализовать запрет редактирования от определенной константы, ДатыЗапрета.
Через открытие формы документа, проверку на дату и установка значения «ТолькоПросмотр».

Попытка получения неинициализированного значения параметра сеанса

Автор Sheriff, 11 апр 2018, 09:08

0 Пользователей и 1 гость просматривают эту тему.

Платформа 8.3
Конфа БК 2.0

Такая ошибка возникает ТОЛЬКО У ОДНОГО пользователя, У ВСЕХ ОСТАЛЬНЫХ РАБОТАЕТ.
Итак, при нажатии кнопки обновить ЭСФ, выходит данное сообщение
{ОбщийМодуль.ДлительныеОперации.Модуль(180)}: Попытка получения неинициализированного значения параметра сеанса
      ВызватьИсключение(ТекстОшибки);

{ОбщийМодуль.ЭСФСерверПовтИсп.Модуль(180)}: Ошибка при вызове метода контекста (Выполнить)
по причине:

по причине:
Ошибка выполнения запроса
по причине:
Ошибка в ограничении доступа к данным.
объект: ‘Справочник.Организации’, поле: ‘ИдентификационныйНомер’; право: ‘Чтение’
Попытка получения неинициализированного значения параметра сеанса
по причине:
Попытка получения неинициализированного значения параметра сеанса
Никаких ограничений нет, у пользователя такие же права как и у Администратора, но, под Администратором этот статус обновляется, а вот под другим пользователем нет, вопрос, почему?
Уже удалял этого пользователя, не помогло.

P.s База клиент-серверная
Если эту базу выгрузить и открыть в файловом варианте, то шибок нет, всё норм.


Ставьте точку сюда:

ОбщийМодуль.ЭСФСерверПовтИсп.Модуль(180)
и смотрите в отладке, каких прав не хватает пользователю.
Не знаю, что такое БК, но предполагаю, что где то там внутри модуля стоит проверка на полныеправа с директивой компиляции #Если Клиент.
Только не забудьте, что обычно те модули что маркируются как «ПовтИсп» обычно срабатывают на вызов функций/процедур только 1 раз за сеанс.


Цитата: KOI8-R от 11 апр 2018, 12:39
Ставьте точку сюда:
ОбщийМодуль.ЭСФСерверПовтИсп.Модуль(180)
и смотрите в отладке, каких прав не хватает пользователю.
Не знаю, что такое БК, но предполагаю, что где то там внутри модуля стоит проверка на полныеправа с директивой компиляции #Если Клиент.
Только не забудьте, что обычно те модули что маркируются как «ПовтИсп» обычно срабатывают на вызов функций/процедур только 1 раз за сеанс.

Всех прав ему хватает, никаких отличий нет. Вчера всё было норм, а сегодня уже нет возможности это сделать (права никто не менял). Проверка стоит, но на запуск самого приложения, если нет прав, то не запустится.
Но тут другое дело.


Цитата: Sheriff от 11 апр 2018, 13:01
Вчера всё было норм, а сегодня уже нет возможности это сделать (права никто не менял).

Если вчера все было норм, и никаких действий с конфигурацией и правами не производилось — очищайте кеш.


Цитата: KOI8-R от 11 апр 2018, 13:55

Цитата: Sheriff от 11 апр 2018, 13:01
Вчера всё было норм, а сегодня уже нет возможности это сделать (права никто не менял).

Если вчера все было норм, и никаких действий с конфигурацией и правами не производилось — очищайте кеш.

http://programmist1s.ru/kak-pochistit-kesh-v-1s/
такие варианты подойдут для серверной базы?

Добавлено: 11 апр 2018, 18:28


Цитата: KOI8-R от 11 апр 2018, 13:55

Цитата: Sheriff от 11 апр 2018, 13:01
Вчера всё было норм, а сегодня уже нет возможности это сделать (права никто не менял).

Если вчера все было норм, и никаких действий с конфигурацией и правами не производилось — очищайте кеш.

Нет, дело не в кэше.
Я даже базу себе на свой комп перенес и там развернул сервер и всё равно так же. Проблема осталась


А что пишет журнал регистрации?
Если права, то там обычно написано к какому объекту нет прав.

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google


Цитата: oleg-x от 11 апр 2018, 20:56
А что пишет журнал регистрации?
Если права, то там обычно написано к какому объекту нет прав.

начало темы.
но права полные стоят, никаких ограничений нет.
от Администратора статус обновляется, а от Бухгалтера- нет.

Добавлено: 12 апр 2018, 05:48


Цитата: oleg-x от 11 апр 2018, 20:56
А что пишет журнал регистрации?
Если права, то там обычно написано к какому объекту нет прав.

{ОбщийМодуль.ЭСФСерверПовтИсп.Модуль(180)}: Ошибка при вызове метода контекста (Выполнить)
   Выборка = Запрос.Выполнить().Выбрать();
по причине:
Ошибка выполнения запроса
по причине:
Ошибка в ограничении доступа к данным.
объект: ‘Справочник.Организации’, поле: ‘ИдентификационныйНомер’; право: ‘Чтение’
Попытка получения неинициализированного значения параметра сеанса
по причине:
Попытка получения неинициализированного значения параметра сеанса


Еще раз, что в журнале?
В журнале будет последний объект, который пытался прочитать пользователь, но ему был дан отказ и по какой причине.
С такой ошибкой не встречался, но я так понимаю у пользователя либо нет прав на чтение одного из параметров сеанса, либо он тупо не установлен.

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google


Цитата: oleg-x от 11 апр 2018, 20:56
А что пишет журнал регистрации?
Если права, то там обычно написано к какому объекту нет прав.

нашел ограничения, но, появилось другое
{Обработка.ОбменЭСФ.МодульОбъекта(6691)}: {Обработка.ОбменЭСФ.МодульОбъекта(7040)}: Ошибка при вызове метода контекста (Записать)
                              ОбъектЭСФ.Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПриЗаписи’
по причине:
{ОбщийМодуль.ЭСФСерверПереопределяемый.Модуль(170)}: Ошибка при вызове метода контекста (Записать)
                              ОбъектЭСФ.Записать();
по причине:
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.ОбщегоНазначения.Модуль(4498)}: Ошибка при получении значения атрибута контекста (УчетнаяПолитикаПоНалоговомуУчету)
                              ОбъектЭСФ.Записать();
по причине:
Попытка получения неинициализированного значения параметра сеанса

Добавлено: 12 апр 2018, 08:45


Цитата: KOI8-R от 11 апр 2018, 13:55

Цитата: Sheriff от 11 апр 2018, 13:01
Вчера всё было норм, а сегодня уже нет возможности это сделать (права никто не менял).

Если вчера все было норм, и никаких действий с конфигурацией и правами не производилось — очищайте кеш.

{Обработка.ОбменЭСФ.МодульОбъекта(6691)}: {Обработка.ОбменЭСФ.МодульОбъекта(7040)}: Ошибка при вызове метода контекста (Записать)
                              ОбъектЭСФ.Записать();
по причине:
Ошибка при выполнении обработчика — ‘ПриЗаписи’
по причине:
{ОбщийМодуль.ЭСФСерверПереопределяемый.Модуль(170)}: Ошибка при вызове метода контекста (Записать)
                              ОбъектЭСФ.Записать();
по причине:
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.ОбщегоНазначения.Модуль(4498)}: Ошибка при получении значения атрибута контекста (УчетнаяПолитикаПоНалоговомуУчету)
                              ОбъектЭСФ.Записать();
по причине:
Попытка получения неинициализированного значения параметра сеанса


Ищи дальше, что с правами.
А по поводу прав, может все галочки одинаковые стоят, но есть еще такое RLS, которое настраивается для каждого пользователя отдельно.

Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google


Понравилась статья? Поделить с друзьями:
  • Ошибка плагина честный знак
  • Ошибка получения метаданных aloha как исправить
  • Ошибка при восстановлении айфона через айтюнс 2003
  • Ошибка при воспроизведении нажмите чтобы повторить
  • Ошибка плагина криптопро яндекс браузер