Имя: Пароль:
1C
1С v8
Недопустимое обращение к необновленным параметрам работы программы
0 fantomrik
 
08.11.15
02:57
Собственно ошибка при /C ЗапуститьОбновлениеИнформационнойБазы

Возникла ошибка получения значения доп реквизита. {ОбщийМодуль.СтандартныеПодсистемыСервер.Модуль(928)}: Недопустимое обращение к необновленным параметрам работы программы
(например, к некоторым параметрам сеанса):
- если это обращение выполняется из формы на начальной странице
  (рабочем столе), то необходимо убедиться, что в ней имеется вызов
  процедуры ОбщегоНазначения.ПриСозданииНаСервере;
- в остальных случаях необходимо перенести вызов прикладного кода
  после обновления параметров работы программы.

а "Возникла ошибка получения значения доп реквизита." от сюда, из моего нового общего серверного модуля

// Возвращает значение дополнительного ревизита объекта
//
// Параметры:
//  ТипОбъктаМетаданных       - Строка, тип объекта метаданных, для которого нужно получить значение доп реквизита, например Справочник.Пользователи
//                
//  СсылкаНаОбъект             - Ссылка, ссылка на объект, для которого нужно получить значение доп реквизита
//                
//  НаименованиеДопРеквизита  - Строка, наименование доп реквизита, для которого нужно получить значение
//                
//
// Возвращаемое значение:
//   ЛюбойТипДанных  - значение доп реквизита, тип данных в зависимости от типа доп реквизита
//
Функция ПолучитьЗначениеДопРеквизита(ТипОбъектаМетаданных, СсылкаНаОбъект, НаименованиеДопРеквизита)
    
    Попытка    
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    ПользователиДополнительныеРеквизиты.Ссылка,
        |    ПользователиДополнительныеРеквизиты.Свойство,
        |    ПользователиДополнительныеРеквизиты.Значение
        |ИЗ
        |    " + ТипОбъектаМетаданных + ".ДополнительныеРеквизиты КАК ПользователиДополнительныеРеквизиты
        |ГДЕ
        |    ПользователиДополнительныеРеквизиты.Ссылка = &Ссылка
        |    И ПользователиДополнительныеРеквизиты.Свойство = &Свойство";
        
        Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(НаименованиеДопРеквизита));
        Запрос.УстановитьПараметр("Ссылка"    , СсылкаНаОбъект);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            Возврат ВыборкаДетальныеЗаписи.Значение;
        КонецЦикла;
        
    Исключение
        Сообщить("Возникла ошибка получения значения доп реквизита. " + ОписаниеОшибки());
    КонецПопытки;
    
КонецФункции // ПолучитьЗначениеДопРеквизита()
1 fantomrik
 
08.11.15
02:58
Все работает, но собственно хотелось бы понять на что ругается.. И да, я плохой, ищу по наименованию :(
2 fantomrik
 
08.11.15
03:13
Что то он пишет о парметрах сеанса.. вешеописанная процедура вызывается отсюда..

Функция ПолучатьНулевыеЦеныЗакупки() Экспорт
    
    Если ПолучитьЗначениеДопРеквизита("Справочник.Пользователи", ПараметрыСеанса.ТекущийПользователь, "Оповещать о нулевых ценах закупки") = Истина Тогда
        Возврат Истина;
    КонецЕсли;
    
    Возврат Ложь;
    
КонецФункции

А если еще выше, то запускаю из модуля упр приложения, в конце процедуры ПриНачалеРаботыСистемы()
3 fantomrik
 
08.11.15
03:20
Собственно наверно понял. Скорее всего при обновлении системы инициализация парматров сеанса происходит позже чем обычно, соответственно наверно спотыкается на строчке Если ПолучитьЗначениеДопРеквизита("Справочник.Пользователи", ПараметрыСеанса.ТекущийПользователь, "Оповещать о нулевых ценах закупки") = Истина Тогда
4 fantomrik
 
08.11.15
17:09
Решил проблему, проверяя есть ли параметры запуска. По умолчанию у пользователей тонкий клиент без параметров. В случае параметра с обновлением, мой код пропускается.

Процедура ПриНачалеРаботыСистемы()
    
    // СтандартныеПодсистемы
    СтандартныеПодсистемыКлиент.ПриНачалеРаботыСистемы();
    // Конец СтандартныеПодсистемы
    
    //+2015-11-07    
    Если ПараметрЗапуска = "" Тогда
        МФ_ОбщегоНазначенияКлиент.ОповеститьОНеУстановленныхЦенахНоменклатуры();
    КонецЕсли;
    //-2015-11-07
    
КонецПроцедуры