РС ЦеныНоменклатурыСрезПоследних, как получить 0, если нет записи

1. XelOla 17 04.10.18 13:41 Сейчас в теме
Здравствуйте. Вот есть запрос следующего вида.
пусть он вас не смущает, это условная заготовка, в другой, более сложный запрос.
типа есть справочник, и надо для всех товаров вывести Цену с выбранным типом цен, и если в РС нет записи для товара с этим типом цен, то просто в цену подставить 0.... как сделать, не знаю
(ВЫБРАТЬ
	ВЫБОР
		КОГДА ЦеныНоменклатурыСрезПоследних.Цена = NULL
			ТОГДА 0
		ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена
	КОНЕЦ КАК Цена,
	товар.Ссылка
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Конец, ) КАК ЦеныНоменклатурыСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК товар
		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = товар.Ссылка
ГДЕ
	ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. EVKash 14 04.10.18 13:52 Сейчас в теме
(1)
ВЫБРАТЬ
	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
	товар.Ссылка
ИЗ
	Справочник.Номенклатура КАК товар
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Конец, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
		ПО товар.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
Kovekh; XelOla; +2 Ответить
4. XelOla 17 04.10.18 14:28 Сейчас в теме
(3)
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,

... я начинала с естьнулл...
ВЫБРАТЬ
	ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
	Выборка.КонОст1,
	Выборка.Номенклатура,
	Выборка.ПериодМесяц,
	Выборка.КоличествоОборот,
	Выборка.СтоимостьОборот,
	Выборка.КонОст1 * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК СтоимостьОстатка
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			{(&КонПериода)},
			Номенклатура В
				(ВЫБРАТЬ
					ТаблПромеж.Номенклатура
				ИЗ
					ТаблПромеж КАК ТаблПромеж)) КАК ЦеныНоменклатурыСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ Выборка КАК Выборка
		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура
ГДЕ
	ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
Показать

тогда - именно это не дает мне нужный результат?!
5. YannikAlx 43 04.10.18 14:40 Сейчас в теме
(4)У вас следующая проблема - откуда выбирать данные.
Если вы берете из РС ЦеныНоменклатуры то там естественно не будет той номенклатуры у которой нет цены.
А если приглядитесь к предложенному (3) варианту- выбирается из Справочника Номенклатура

Настойчиво рекомендую почитать теорию!
6. XelOla 17 04.10.18 15:04 Сейчас в теме
(5)
и все же. причина именно в ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
потому что, я тоже не дурочка и крутила по разному и так и сяк.

Еще вопрос есть. А если цена динамическая, как ее через СКД?
8. Kovekh 04.10.18 15:39 Сейчас в теме
(6),
(5) правильно говорит. Левое соединение само по себе подразумевает все записи из левой таблицы. То есть в данном изначальном варианте у вас и не будет пустых записей с этим видом цен. У вас просто не попадёт номенклатура, по которой нет цены в РС.
Левое соединение надо написать к справочнику номенклатуры, тогда цена может равняться NULL.
Плюс к тому же связываться по одному только ТипЦен неправильно, потому как строки могут размножиться. Связка по номенклатуре, как сказал (7) как минимум имеет место быть
2. YannikAlx 43 04.10.18 13:51 Сейчас в теме
Принципиально неверное сравнение "= NULL"
NULL не сравнивается никогда знаком равенства!
рекомендую почитать теорию...

А в 2 словах
1 ЕстьNULL(А,А,0)
Или
2 Когда А Есть NULL
7. Spirit007 04.10.18 15:05 Сейчас в теме
И вместо:

ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура
ГДЕ
ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен

Нужно:

ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = Выборка.Номенклатура И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен
9. YannikAlx 43 04.10.18 16:33 Сейчас в теме
Если вы до сих пор не поняли то Вот вам счастье-

ВЫБРАТЬ ПЕРВЫЕ 1000
ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, "-") КАК Цена,
товар.Ссылка
ИЗ
Справочник.Номенклатура КАК товар
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&НаДату, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
ПО товар.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура

ПЕРВЫЕ 1000 для ускорения на этапе отладки
10. omnitech69 43 04.10.18 17:02 Сейчас в теме
Вариант 9 правильный. Можете пользоваться
Оставьте свое сообщение

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