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