Имя: Пароль:
1C
1С v8
Значение не является значением объектного типа
0 VSpicy
 
naïve
14.04.22
12:34
Всем доброго дня!
Подскажите пожалуйста как можно избавиться от вывода ошибки: Значение не является значением объектного типа (ГСМ)?
В моем случае "ГСМ" - является видом топлива (АИ-95, ДТ)

Ошибка происходит после выполнения запроса за определенный период по автомобилям.
Если в заданном периоде нет автомобилей (Пустой запрос) - то собственно и выводится вышеуказанная ошибка...

Запрос выполняется через: РезультатЗапроса = Запрос.Выполнить().Выгрузить();
т.к. использую в дальнейшем Цикл.
1 lEvGl
 
гуру
14.04.22
12:36
что то не сходится - дибо в результате что то есть, либо в цикл не попадет
2 lEvGl
 
гуру
14.04.22
12:37
странное у вас представление о программисте, судя по картинке в профиле
3 Kassern
 
14.04.22
12:41
(0) Это значит вы пытаетесь обратиться к ГСМ у объекта, который его не имеет.
Например: Номенклатура.ГСМ = АИ96, а у вас Номенклатура = неопределено)
4 hhhh
 
14.04.22
12:58
(0) строку программы покажите, где ошибка.
5 hhhh
 
14.04.22
12:58
(3) ставлю на РезультатЗапроса.ГСМ
6 dreizehn
 
14.04.22
13:09
(5) Ставлю на NULL в поле автомобиля
7 vicof
 
14.04.22
13:16
Ставки сделаны, ставок больше нет.
8 Йохохо
 
14.04.22
13:17
(7) ставлю ТС 2
9 hhhh
 
14.04.22
13:19
(7) похоже автор свалил и больше не появится.
10 VSpicy
 
naïve
14.04.22
14:06
(2) Это просто картинка) Был бы профи, тему не создавал...
11 VSpicy
 
naïve
14.04.22
14:07
(4) ОбластьПодвал.Параметры.ВидГСМ  =  ТекСтрока.ГСМ;
12 Kassern
 
14.04.22
14:08
(11) отладкой умеете пользоваться? Если да, то берете и каждый кусочек проверяете. Первым делом, "ТекСтрока" - что у вас показывает?)
13 Kassern
 
14.04.22
14:09
Вангую у вас
ТЗ=Запрос.Выполнить().Выгрузить();
Для Каждого ТекСтрока Из ТЗ Цикл
....
КонецЦикла:
ОбластьПодвал.Параметры.ВидГСМ  =  ТекСтрока.ГСМ;

Так да?)
14 lEvGl
 
гуру
14.04.22
14:10
да что там строка... давайте весь код от создания запроса до обход его результата
15 dreizehn
 
14.04.22
14:10
(11) ОбластьПодвал намекает на то, что ты выводишь это после цикла. А когда строк нет ТекСтрока неопределена.
16 Kassern
 
14.04.22
14:10
а потом, ой, а строчек то у меня нет и ТекСтрока = неопределено)
17 lEvGl
 
гуру
14.04.22
14:10
(13) ну и что, синтаксически работать будет
18 dreizehn
 
14.04.22
14:11
(17) "синтаксически работать" это как?
19 Kassern
 
14.04.22
14:11
(17) синтаксис не будет ругаться, это да) А вот на клиенте пошлет в пешее эротическое путешествие при пустом ТЗ))
20 lEvGl
 
гуру
14.04.22
14:11
а, ну да да, не будет
21 VSpicy
 
naïve
14.04.22
14:12
(13) Примерно так)...
22 Kassern
 
14.04.22
14:15
(21) объявите переменную ГСМ перед циклом и присвойте ей что-нить
В цикле переприсвойте данными из запроса, а в подвал уже ее и выводите вместо ТекСтрока.ГСМ
23 lEvGl
 
гуру
14.04.22
14:15
(18) это значит не споткнется при выполнении. а логически, даже при наличии строк, будет ошибка, т к подвал один, а строк много, писать в подвал значение последней строки перебора - ошибка, логическая
24 dreizehn
 
14.04.22
14:17
(23) > не споткнется при выполнении
Ну вот, спотыкается же ведь.
25 lEvGl
 
гуру
14.04.22
15:05
(24) я я, натюрлих
26 VSpicy
 
naïve
14.04.22
15:35
(14)     Сейчас пока так...На самом деле данные выдает нормально, вот только если в определенный период - в запросе пусто, то выползает ошибка: Значение не является значением объектного типа (ГСМ).

        Запрос = Новый Запрос;
    Запрос.Текст =  "ВЫБРАТЬ
                    |    уатТС.Ссылка КАК ТС,
                    |    уатТС.ИспользуемаяСистемаGPS КАК ИспользуемаяСистемаGPS,
                    |    уатТС.can_log КАК can_log
                    |ПОМЕСТИТЬ вт_ДанныеGPS
                    |ИЗ
                    |    Справочник.уатТС КАК уатТС
                    |;
                    |
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    |    уатПутевойЛист.Дата КАК ДатаДокумента,
                    |    уатПутевойЛист.Водитель1 КАК Водитель,
                    |    уатПутевойЛист.бит_вн_НомерПЛ КАК ПЛ,
                    |    уатПутевойЛист.СпидометрВозвращения - уатПутевойЛист.СпидометрВыезда КАК Пробег,
                    |    уатПутевойЛистРасходГСМ.РасходПоНорме КАК РасходНорма,
                    |    уатПутевойЛистРасходГСМ.РасходПоФакту КАК РасходФакт,
                    |    уатПутевойЛистРасходГСМ.РасходПоНорме - уатПутевойЛистРасходГСМ.РасходПоФакту КАК ПерерасходЭкономия,
                    |    уатПутевойЛист.бит_вн_Заказчик КАК Заказчик,
                    |    уатПутевойЛист.бит_вн_Пассажир КАК Пассажир,
                    |    вт_ДанныеGPS.ИспользуемаяСистемаGPS КАК ИспользуемаяСистемаGPS,
                    |    вт_ДанныеGPS.can_log КАК can_log,
                    |    уатПутевойЛистРасходГСМ.ГСМ КАК ГСМ,
                    |    вт_ДанныеGPS.ТС КАК ТС
                    |ИЗ
                    |    Документ.уатПутевойЛист КАК уатПутевойЛист
                    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.уатПутевойЛист.РасходГСМ КАК уатПутевойЛистРасходГСМ
                    |        ПО уатПутевойЛист.Ссылка = уатПутевойЛистРасходГСМ.Ссылка
                    |        ЛЕВОЕ СОЕДИНЕНИЕ вт_ДанныеGPS КАК вт_ДанныеGPS
                    |        ПО уатПутевойЛист.ТранспортноеСредство.Ссылка = вт_ДанныеGPS.ТС
                    |ГДЕ
                    |    уатПутевойЛист.Рассчитан
                    |    И НЕ уатПутевойЛист.бит_вн_Аннулирован
                    |    И уатПутевойЛист.Дата >= &ДатаНачала
                    |    И уатПутевойЛист.Дата <= &ДатаОкончания
                    |    И уатПутевойЛист.ТранспортноеСредство = &ТС
                    |    И уатПутевойЛист.Проведен
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    уатПутевойЛист.Дата,
                    |    Водитель
                    |АВТОУПОРЯДОЧИВАНИЕ" ;
    
    Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ОтчетОбъект.ДатаС));
    Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ОтчетОбъект.ДатаПо));
    Запрос.УстановитьПараметр("ТС",ОтчетОбъект.ТС);    
    
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    ТабличныйДокумент = Новый ТабличныйДокумент;
    
    ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.ДатаС =  Формат(ОтчетОбъект.ДатаС, "ДЛФ=Д");
    ОбластьШапка.Параметры.ДатаПо =  Формат(ОтчетОбъект.ДатаПо, "ДЛФ=Д");
    ОбластьШапка.Параметры.ТС =  ОтчетОбъект.ТС;
        ТабличныйДокумент.Вывести(ОбластьШапка);
    
    ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    ТабличныйДокумент.Вывести(ОбластьШапкаТаблицы);
    Для каждого ТекСтрока из РезультатЗапроса Цикл
        ОбластьСтроки = Макет.ПолучитьОбласть("Строка");
        ОбластьСтроки.Параметры.Заполнить(ТекСтрока);        
        СтруктураФИО = бит_вн_ОбщиеПроцедурыИФункции.бит_вн_ФИОФизЛицаСокращенно(ТекСтрока.Водитель, , , Истина);

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

    ТабличныйДокумент.Вывести(ОбластьИтого);
    ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.ВидГСМ  = ТекСтрока.ГСМ;
    ТабличныйДокумент.Вывести(ОбластьПодвал);

        ДокументРезультат.Вывести(ТабличныйДокумент);
27 Kassern
 
14.04.22
15:36
(26) вам же я уже все расписал, почему такая ошибка и как ее устранить...
28 VSpicy
 
naïve
14.04.22
15:39
(27) у меня не получилось...(
Пример:
СтрокаГСМ = РезультатЗапроса;
ОбластьПодвал.Параметры.ВидГСМ  = СтрокаГСМ.ГСМ;
29 Kassern
 
14.04.22
15:44
(28) читаем еще раз внимательно:
1) объявите переменную ГСМ перед циклом. Где это у вас? Например ГСМ="", или ГСМ="Не указано".
2) В цикле переприсвойте данными из запроса. Где это у вас? Например ГСМ=ТекСтрока.ГСМ
3)а в подвал уже ее и выводите вместо ТекСтрока.ГСМ. Вы зачем то пихаете "СтрокаГСМ.ГСМ", когда можно просто ОбластьПодвал.Параметры.ВидГСМ=ГСМ
30 lEvGl
 
гуру
14.04.22
15:50
(29) у меня вопрос - зачем выводить печатную форму, если данных нет? просто пустую что ли. это о логике как раз.
могу предложить немного изменить эту логику таким образом

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

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

    ТабличныйДокумент.Вывести(ОбластьИтого);
     ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    ОбластьПодвал.Параметры.ВидГСМ  = ТекСтрока.ГСМ;
    ТабличныйДокумент.Вывести(ОбластьПодвал);

        ДокументРезультат.Вывести(ТабличныйДокумент);
Иначе <-------------
Предупреждение("Данных нет");<-------------
КонецЕсли;<-------------

и ошибки не будет и типа как "правильно"
31 unbred
 
14.04.22
15:53
(0) "Подскажите пожалуйста как можно избавиться от вывода ошибки"
ОбластьПодвал.Параметры.ВидГСМ  = "";
32 Kassern
 
14.04.22
15:55
(30) "зачем выводить печатную форму" - это уже пускай ТС решает. Может это только небольшая часть большой формы
33 VSpicy
 
naïve
14.04.22
15:58
(30) Вот это - вообще гениально!
Спасибо большое всем!!!
34 Kassern
 
14.04.22
16:02
(30) зачем вы ТС все расписали? Я на 99% уверен, что он не понял нифига, а просто копирнул текст ваш к себе...
35 VSpicy
 
naïve
14.04.22
16:29
(34)В итоге я понял по поводу: объявить переменную и т.п., но более оптимальный вариант (30).
Хотя Ваш вариант буду иметь ввиду на следующий раз! Спасибо отдельное!
2 + 2 = 3.9999999999999999999999999999999...