|   |   | 
| 
 | Значение не является значением объектного типа | ☑ | ||
|---|---|---|---|---|
| 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).
 Хотя Ваш вариант буду иметь ввиду на следующий раз! Спасибо отдельное! | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |