8.х Ошибка установки параметра сеанса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем sergey4475, 11 мар 2014.

  1. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Создал параметр сеанса "Текущий период" тип дата. Использую БСП. Мне необходимо сделать установку текущего параметра. При попытки сделать это "Попытка получения неинициализированного параметра". Иду дальше посмотрел как сделано в типовой конфигурации.
    Код:
    Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
       
        // СтандартныеПодсистемы
        СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
        // Конец СтандартныеПодсистемы
        УчетБилетовОбщий.УстановкаПараметровСеанса(ИменаПараметровСеанса);
    КонецПроцедуры
    ////
    
    Функция УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт
        УстановленныеПараметры = Новый Массив;
        Если ИменаПараметровСеанса = Неопределено Тогда
            Возврат УстановленныеПараметры;
        КонецЕсли;
       
        Если ИменаПараметровСеанса.Найти("ТекущийПериод") <> Неопределено Тогда
            ПараметрыСеанса.ТекущийПериод  = ТекущаяДата();
            УстановленныеПараметры.Добавить("ТекущийПериод");
        КонецЕсли;
       
        Возврат УстановленныеПараметры;
           
    КонецФункции
    //
    
    при попытки выполнить это ругается, на несоответствие типов. В обработчике в табло, на данный параметр пишет "ошибка чтения значения". Вобщем что я делаю не так??
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Что мешает отладчиком пройтись полностью от начала до конца и понять на какой строке кода вылезает ошибка?
  3. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Код:
        Если ИменаПараметровСеанса.Найти("ТекущийПериод") <> Неопределено Тогда
            ПараметрыСеанса.ТекущийПериод  = ТекущаяДата();
            УстановленныеПараметры.Добавить("ТекущийПериод");
        КонецЕсли;
    
    ПараметрыСеанса.ТекущийПериод = ТекущаяДата(); - в отладчике если смотреть параметр ПараметрыСеанса.ТекущийПериод и он раваен "ошибка чтения значения" и ему ничего не может присвоиться пишет "несоответствие типов".

    Вот собственно и вопрос, где происходит инициализация ПараметровСеанса при использовании БСП?
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    При чем здесь БСП?! БСП - библиотека стандартных подсистем. Она просто содержит в себе какой либо функционал, который можно перенести в любую конфу. Хотя что вы там себе имеете в виду, это уже вопрос. Параметры сеанса инициализируются в модуле сеанса.
  5. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Параметры сеанса инициализируются в модуле сеанса. - вот именно вот этого почему-то и не происходит... Получается такая ошибка которую я описал выше!!!
  6. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    А параметр сеанса то создан?
  7. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Естественно создан!!!!!
  8. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Киньте конфу сюда.
  9. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Ну конфу я кинуть не могу ибо проект как бы коммерческий и не для всеобщего рассмотрения... Но проблему я описал...
  10. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Ну, у меня в моей конфе все параметры прекрасно заполняются. МОжет тогда еще более подробно опишите, что конкретно делаете? В каких процедурах все происходит? Код их покажите.
  11. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    В модуле сеанса.
    Код:
    Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
       
        // СтандартныеПодсистемы
        СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
        // Конец СтандартныеПодсистемы
    
        // Моя функция которая должна отрабатывать
        УчетБилетовОбщий.УстановкаПараметровСеанса(ИменаПараметровСеанса);
    КонецПроцедуры
    
    Теперь привожу код самой функции УстановкаПараметровСеанса(ИменаПараметровСеанса)
    Код:
    Функция УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт
        УстановленныеПараметры = Новый Массив;
        Если ИменаПараметровСеанса = Неопределено Тогда
            УстановленныеПараметры.Добавить("ТекущийПериод");
            Возврат УстановленныеПараметры;
        КонецЕсли;
       
        Если ИменаПараметровСеанса.Найти("ТекущийПериод") <> Неопределено Тогда
            ПараметрыСеанса.ТекущийПериод  = ТекущаяДата(); /// Ошибка появляетсявот в этой строчке
            УстановленныеПараметры.Добавить("ТекущийПериод");
        КонецЕсли;
       
        Возврат УстановленныеПараметры;
           
    КонецФункции
    
    В самом начале запуска, когда точку останова ставим в модуле сеанса. В табло показывает следующее. Рисунок ниже 2014-03-12 16-27-54.png
    сам параметр сеанса определен в конфигураторе тип дата.
    2014-03-12 16-33-53.png

    Вобщем все делаю как всегда делал, но почему происходит такое я понять не могу
  12. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Попробуйте присвоить другой тип значения...Потом отладчиком посмотрите на тип значения.
  13. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Да это я тоже пробовал, в любом случае выдает одно и тоже... Причем даже если сам параметр делаешь другого типа и присваиваешь другой тип не Важно... Он его просто не принимает..
  14. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Добавьте новый вообще. И скажите что с ним?
  15. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    Ну это и так новый и как-раз с ним сразу проблема такая
  16. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Ну я тогда больше не знаю, что еще подумать. Мне бы в идеале посмотреть на все это дело.
  17. TopicStarter Overlay
    sergey4475
    Offline

    sergey4475

    Регистрация:
    5 мар 2014
    Сообщения:
    19
    Симпатии:
    0
    Баллы:
    1
    выкладываю вот такую конфигурацию... Тут только внедрена БСП и создан один параметр сеанса и оно тоже не работает http://yadi.sk/d/sYnBe7RSKQr7L
  18. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Не могу проверить досконально, т.к. процедур много очень. Но однозначно проблема в модуле управляемого приложения. Процедуры ПередНАчаломРаботыСистемы и ПриНачалеРаботыСистемы. Если тупо их закомменить то все нормально. Там параметры устанавливаются в некоторых процедурах. Надо в них разбираться.
  19. Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.023
    Симпатии:
    51
    Баллы:
    54
    Наверное не совсем верно поступил, но работает:
    В модуле сеанса оставил только

    Код:
    Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса)
      
        // СтандартныеПодсистемы
        СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса);
        // Конец СтандартныеПодсистемы
    КонецПроцедуры
    
    А в модуле, где устанавливаются параметры "ТекущийПользователь" и "ТекущийВнешнийПользователь"
    добавил еще одну строку "ПараметрыСеанса.Параметр = "1234567890";"

    это общий модуль "ПользователиСлужебный" процедура "УстановкаПараметровСеанса"

    Код:
    // Заполняет параметр сеанса ТекущийПользователь или ТекущийВнешнийПользователь
    // значением пользователя, найденному по пользователю информационной базы
    // под которым запущен сеанс.
    //  Если пользователь не найден, то при наличии административных прав
    // создается новый пользователь в справочнике, иначе вызывается исключение.
    //
    Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт
       
        Если ИмяПараметра <> "ТекущийПользователь"
           И ИмяПараметра <> "ТекущийВнешнийПользователь"
           И ИмяПараметра <> "Параметр" Тогда
            Возврат;
        КонецЕсли;
       
        УстановитьПривилегированныйРежим(Истина);
       
        Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
            ВызватьИсключение
                НСтр("ru = 'Недопустимое получение параметра сеанса ТекущийПользователь
                           |в сеансе без указания всех разделителей.'");
        КонецЕсли;
       
        НачатьТранзакцию();
        Попытка
            ПользовательНеНайден = Ложь;
            СоздатьПользователя  = Ложь;
            СсылкаНового         = Неопределено;
            Служебный            = Ложь;
           
            ТекущийПользователь        = Неопределено;
            ТекущийВнешнийПользователь = Неопределено;
           
            ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();
           
            ЭтоНеразделенныйПользователь = ОбщегоНазначенияПовтИсп.РазделениеВключено()
                                         И ТекущийПользовательИБ.РазделениеДанных.Количество() = 0;
           
            Если ПустаяСтрока(ТекущийПользовательИБ.Имя) Тогда
               
                ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка();
               
                СвойстваНеуказанногоПользователя = СвойстваНеуказанногоПользователя();
               
                ИмяПользователя       = СвойстваНеуказанногоПользователя.ПолноеИмя;
                ПолноеИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя;
                СсылкаНового          = СвойстваНеуказанногоПользователя.СтандартнаяСсылка;
               
                Если СвойстваНеуказанногоПользователя.Ссылка = Неопределено Тогда
                    ПользовательНеНайден = Истина;
                    СоздатьПользователя  = Истина;
                    Служебный = Истина;
                    ИдентификаторПользователяИБ = "";
                Иначе
                    ТекущийПользователь = СвойстваНеуказанногоПользователя.Ссылка;
                КонецЕсли;
            Иначе
                ИмяПользователя             = ТекущийПользовательИБ.Имя;
                ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор;
               
                Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторПользователяИБ);
               
                Запрос = Новый Запрос;
                Запрос.Параметры.Вставить("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ);
               
                Запрос.Текст =
                "ВЫБРАТЬ ПЕРВЫЕ 1
                |    Пользователи.Ссылка КАК Ссылка
                |ИЗ
                |    Справочник.Пользователи КАК Пользователи
                |ГДЕ
                |    Пользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ";
                РезультатПользователи = Запрос.Выполнить();
               
                Запрос.Текст =
                "ВЫБРАТЬ ПЕРВЫЕ 1
                |    ВнешниеПользователи.Ссылка КАК Ссылка
                |ИЗ
                |    Справочник.ВнешниеПользователи КАК ВнешниеПользователи
                |ГДЕ
                |    ВнешниеПользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ";
                РезультатВнешниеПользователи = Запрос.Выполнить();
               
                Если НЕ РезультатВнешниеПользователи.Пустой() Тогда
                   
                    Выборка = РезультатВнешниеПользователи.Выбрать();
                    Выборка.Следующий();
                    ТекущийПользователь        = Справочники.Пользователи.ПустаяСсылка();
                    ТекущийВнешнийПользователь = Выборка.Ссылка;
                   
                    Если НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда
                   
                        ТекстСообщенияОбОшибке = НСтр("ru = 'Внешние пользователи отключены.'");
                        ВызватьИсключение ТекстСообщенияОбОшибке;
                    КонецЕсли;
                Иначе
                    ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка();
                   
                    Если РезультатПользователи.Пустой() Тогда
                        Если ЭтоНеразделенныйПользователь
                         ИЛИ Пользователи.ЭтоПолноправныйПользователь( , , Ложь) Тогда
                           
                            ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор;
                           
                            Если ЭтоНеразделенныйПользователь Тогда
                                Служебный = Истина;
                                // ПолноеИмяПользователя заполняется ниже в транзакции.
                                ПользовательПоНаименованию  = Неопределено;
                            Иначе
                                ПолноеИмяПользователя       = ТекущийПользовательИБ.ПолноеИмя;
                                ПользовательПоНаименованию  = СсылкаПользователяПоПолномуНаименованию(ПолноеИмяПользователя);
                            КонецЕсли;
                           
                            Если ПользовательПоНаименованию = Неопределено Тогда
                                ПользовательНеНайден = Истина;
                                СоздатьПользователя  = Истина;
                            Иначе
                                ТекущийПользователь = ПользовательПоНаименованию;
                            КонецЕсли;
                        Иначе
                            ПользовательНеНайден = Истина;
                        КонецЕсли;
                    Иначе
                        Выборка = РезультатПользователи.Выбрать();
                        Выборка.Следующий();
                        ТекущийПользователь = Выборка.Ссылка;
                    КонецЕсли;
                КонецЕсли;
            КонецЕсли;
           
            Если СоздатьПользователя Тогда
               
                ЗарегистрироватьНеразделенногоПользователя();
               
                НачатьТранзакцию();
                Попытка
                    Если ЭтоНеразделенныйПользователь И НЕ ПустаяСтрока(ТекущийПользовательИБ.Имя) Тогда
                        ПолноеИмяПользователя = Пользователи.ПолноеИмяСлужебногоПользователя(
                            ИдентификаторПользователяИБ);
                    КонецЕсли;
                   
                    Если СсылкаНового = Неопределено Тогда
                        СсылкаНового = Справочники.Пользователи.ПолучитьСсылку();
                    КонецЕсли;
                   
                    ТекущийПользователь = СсылкаНового;
                   
                    НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент();
                    НовыйПользователь.Служебный = Служебный;
                    НовыйПользователь.Наименование = ПолноеИмяПользователя;
                    НовыйПользователь.УстановитьСсылкуНового(СсылкаНового);
                   
                    Если ЗначениеЗаполнено(ИдентификаторПользователяИБ) Тогда
                       
                        ОписаниеПользователяИБ = Новый Структура;
                        ОписаниеПользователяИБ.Вставить("Действие", "Записать");
                        ОписаниеПользователяИБ.Вставить(
                            "УникальныйИдентификатор", ИдентификаторПользователяИБ);
                       
                        НовыйПользователь.ДополнительныеСвойства.Вставить(
                            "ОписаниеПользователяИБ", ОписаниеПользователяИБ);
                    КонецЕсли;
                   
                    НовыйПользователь.Записать();
                   
                    ЗафиксироватьТранзакцию();
                Исключение
                    ОтменитьТранзакцию();
                   
                    ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                        НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена.
                                   |Пользователь: %1 не найден в справочнике ""Пользователи"".
                                   |
                                   |При попытке добавления пользователя в справочник возникла ошибка:
                                   |""%2"".
                                   |
                                   |Обратитесь к администратору.'"),
                        ИмяПользователя,
                        КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) );
                   
                    ВызватьИсключение ТекстСообщенияОбОшибке;
                КонецПопытки;
               
            ИначеЕсли ПользовательНеНайден Тогда
                ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя);
            КонецЕсли;
           
            ЗафиксироватьТранзакцию();
        Исключение
            ОтменитьТранзакцию();
            ВызватьИсключение;
        КонецПопытки;
       
        Если ТекущийПользователь = Неопределено
         ИЛИ ТекущийВнешнийПользователь = Неопределено Тогда
           
            ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) +
                НСтр("ru = '
                           |Возникла внутренняя ошибка при поиске пользователя.'");
            ВызватьИсключение ТекстСообщенияОбОшибке;
        КонецЕсли;
       
        ПараметрыСеанса.ТекущийПользователь        = ТекущийПользователь;
        ПараметрыСеанса.ТекущийВнешнийПользователь = ТекущийВнешнийПользователь;
        ПараметрыСеанса.Параметр = "1234567890";
       
        УстановленныеПараметры.Добавить("ТекущийПользователь");
        УстановленныеПараметры.Добавить("ТекущийВнешнийПользователь");
        УстановленныеПараметры.Добавить("Параметр");
       
    КонецПроцедуры
  20. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.978
    Симпатии:
    397
    Баллы:
    104
    Всем привет. Короче теперь я столкнулся с этой проблемой. Конфа своя. На первом скрине видно, что параметр сеанса Загружать данные установился. Все нормально. Он выделен.
    1.JPG
    А на этом скрине видно, что он уже не читается. Что за х...?
    2.JPG
    Платформа 1С:Предприятие 8.3 (8.3.3.687)

Поделиться этой страницей