Null в ВыборкаДетальныеЗаписи.Следующий() Цикл
Добрый день. Есть запрос, получаю итог по стоимости в ТЧ "Состав". В консоли запросов данные выводит корректно, но в цикле выборки ВыборкаДетальныеЗаписи.СтоимостьСостава получает NULL. Что я делаю не так, подскажите плз.
p.s. извиняюсь за дублирование темы, проблема с интернетом.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| Сумма(Номенклатура.Состав.Стоимость) КАК СтоимостьСостава
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
НоменклатураОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
Сообщить(ВыборкаДетальныеЗаписи.СтоимостьСостава);
КонецЦикла;
Показатьp.s. извиняюсь за дублирование темы, проблема с интернетом.
По теме из базы знаний
- Алгоритмы с решениями для экзамена Специалист УТ 11.1
- HTTP Сервисы: Путь к своему сервису. Часть 4
- Как сдать экзамен 1С:Специалист по платформе?
- Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)
- HTTP, Ajax, JSON: Один год Pet-проекту на 1С
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Если нужна в том числе пустая, то соединение я бы делал явно, номенклатура и к ней левым соединением состав, и тогда isnull. И с явной группировкой. Использование в (1) суммы без группировки может приводить к своеобразным эффектам за счёт неявности группировки и соединения. А если такой запрос ещё и в скд или в по строитель... То может быть ещё веселее
(1) этот запрос как вам уже и написали не явно использует левое соединение. Когда нет записей он и вернет нул.
Правильно было бы написать запрос через левое соединение, но можно и так оставить, главное как вам уже написали применить есть нул!
Только правильнее писать так как я вам привел!
Аргументы не буду приводить, думаю со временем и сами поймете почему так правильнее!
Правильно было бы написать запрос через левое соединение, но можно и так оставить, главное как вам уже написали применить есть нул!
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| ЕСТЬNULL(Сумма(Номенклатура.Состав.Стоимость), 0) КАК СтоимостьСостава
|ИЗ
| Справочник.Номенклатура КАК Номенклатура";
Только правильнее писать так как я вам привел!
Аргументы не буду приводить, думаю со временем и сами поймете почему так правильнее!
Я бы в таком случае писал
ВЫБРАТЬ НоменклатураСостав.Ссылка,
СУММА(НоменклатураСостав.Стоимость)
ИЗ Справочник.Номенклатура.Состав как НоменклатураСостав
СГРУППИРОВАТЬ ПО НоменклатураСостав.Ссылка
Обращаясь при этом сразу к табличной части и ее группируя по номенклатуре.
ВЫБРАТЬ НоменклатураСостав.Ссылка,
СУММА(НоменклатураСостав.Стоимость)
ИЗ Справочник.Номенклатура.Состав как НоменклатураСостав
СГРУППИРОВАТЬ ПО НоменклатураСостав.Ссылка
Обращаясь при этом сразу к табличной части и ее группируя по номенклатуре.
(2) приведет к тому, что номенклатуры с пустым составом не будут выведены.
Чтобы избавиться от NULL, а это частая ситуация с соединениям (здесь оно происходит неявно), можно использовать функцию ЕСТЬNULL() прямо в запросе.
Если строка состава не была найдена, то стоимость = NULL и функция ЕСТЬNULL это заметит и вернет значение по умолчанию, в данном случае это 0
Чтобы избавиться от NULL, а это частая ситуация с соединениям (здесь оно происходит неявно), можно использовать функцию ЕСТЬNULL() прямо в запросе.
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| Сумма(ЕСТЬNULL(Номенклатура.Состав.Стоимость, 0)) КАК СтоимостьСостава
|ИЗ
| Справочник.Номенклатура КАК Номенклатура....";
Если строка состава не была найдена, то стоимость = NULL и функция ЕСТЬNULL это заметит и вернет значение по умолчанию, в данном случае это 0
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот