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

1. 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 961 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
Оставьте свое сообщение
Вакансии
Программист, аналитик, эксперт 1С
Санкт-Петербург
По совместительству

Ведущий разработчик 1С (техлид внутреннего учета)
Новосибирск
зарплата от 230 000 руб.
Полный день

Программист 1С
Рязань
зарплата от 150 000 руб. до 250 000 руб.
Полный день

Архитектор 1С
Обнинск
зарплата от 150 000 руб. до 350 000 руб.
Полный день

Программист 1С
Обнинск
зарплата от 200 000 руб.
Полный день