Null в ВыборкаДетальныеЗаписи.Следующий() Цикл

1. P1rate 24.12.16 16:06 Сейчас в теме
Добрый день. Есть запрос, получаю итог по стоимости в ТЧ "Состав". В консоли запросов данные выводит корректно, но в цикле выборки ВыборкаДетальныеЗаписи.СтоимостьСостава получает NULL. Что я делаю не так, подскажите плз.

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Ссылка,
		|	Сумма(Номенклатура.Состав.Стоимость) КАК СтоимостьСостава
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

		НоменклатураОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
		Сообщить(ВыборкаДетальныеЗаписи.СтоимостьСостава);
			
		
	КонецЦикла;
Показать


p.s. извиняюсь за дублирование темы, проблема с интернетом.
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. alxarz 31 25.12.16 11:15 Сейчас в теме
(1) выборку нужно делать по тем полям которые суммируете, как указали в (2)
+
5. Anikrion 8 25.12.16 22:52 Сейчас в теме
Если нужна в том числе пустая, то соединение я бы делал явно, номенклатура и к ней левым соединением состав, и тогда isnull. И с явной группировкой. Использование в (1) суммы без группировки может приводить к своеобразным эффектам за счёт неявности группировки и соединения. А если такой запрос ещё и в скд или в по строитель... То может быть ещё веселее
+
6. Xershi 1484 25.12.16 23:34 Сейчас в теме
(1) этот запрос как вам уже и написали не явно использует левое соединение. Когда нет записей он и вернет нул.
Правильно было бы написать запрос через левое соединение, но можно и так оставить, главное как вам уже написали применить есть нул!
"ВЫБРАТЬ 
|	Номенклатура.Ссылка, 
|	ЕСТЬNULL(Сумма(Номенклатура.Состав.Стоимость), 0) КАК СтоимостьСостава 
|ИЗ 
|	Справочник.Номенклатура КАК Номенклатура"; 


Только правильнее писать так как я вам привел!
Аргументы не буду приводить, думаю со временем и сами поймете почему так правильнее!
+
2. Anikrion 8 25.12.16 01:52 Сейчас в теме
Я бы в таком случае писал

ВЫБРАТЬ НоменклатураСостав.Ссылка,
СУММА(НоменклатураСостав.Стоимость)
ИЗ Справочник.Номенклатура.Состав как НоменклатураСостав
СГРУППИРОВАТЬ ПО НоменклатураСостав.Ссылка

Обращаясь при этом сразу к табличной части и ее группируя по номенклатуре.
+
4. jobtorn 25.12.16 20:13 Сейчас в теме
(2) приведет к тому, что номенклатуры с пустым составом не будут выведены.
Чтобы избавиться от NULL, а это частая ситуация с соединениям (здесь оно происходит неявно), можно использовать функцию ЕСТЬNULL() прямо в запросе.
Запрос.Текст = 
"ВЫБРАТЬ 
|	Номенклатура.Ссылка, 
|	Сумма(ЕСТЬNULL(Номенклатура.Состав.Стоимость, 0)) КАК СтоимостьСостава 
|ИЗ 
|	Справочник.Номенклатура КАК Номенклатура...."; 


Если строка состава не была найдена, то стоимость = NULL и функция ЕСТЬNULL это заметит и вернет значение по умолчанию, в данном случае это 0
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот