1. P1rate 24.12.16 16:06 Сейчас в теме

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

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

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

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


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


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

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

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


Если строка состава не была найдена, то стоимость = NULL и функция ЕСТЬNULL это заметит и вернет значение по умолчанию, в данном случае это 0
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Разработчик 1С
Москва
зарплата от 100 000 руб. до 160 000 руб.
Полный день

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

Консультант-аналитик 1С
Санкт-Петербург
Полный день

Консультант-аналитик 1С
Москва
зарплата от 120 000 руб. до 120 000 руб.
Полный день

Удаленный ИТ-журналист
Санкт-Петербург
По совместительству