Имя: Пароль:
1C
 
Не работает условие в запросе.
,
0 lanc2233
 
31.07.19
10:00
Запрос для динамического списка

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

Нужно выбрать строки где искомая цена больше значения параметра.
Искомая цена это акционная, если она есть, или обычная если нет акционной.

С таким запросом, как я написал, выдает все строки, в том числе те где нет ни одной цены.
Что с ним не так?
1 VS-1976
 
31.07.19
10:03
Возможно не передаются параметры, проверь
2 Мимохожий Однако
 
31.07.19
10:09
Справочник Номенклатура слева. Не факт, что у него цена установлена. Сделай внутреннее соединение в порядке эксперимента
3 НЕА123
 
31.07.19
10:15
(1)+1
(2)+1

немного упростить

ГДЕ
    ЕСТЬNULL(ЦеныАкционные.Цена, ЦеныОбычные.Цена) > &ЦенаОт
4 lanc2233
 
31.07.19
10:17
даже если в запрос просто >100 написать то не срабатывает.

Есть позиции, где ни одна ни вторая цена не установлена, это я и пытаюсь двумя ЕстьNull обработать
5 ДядяМитяй
 
31.07.19
10:20
я бы попробовал на два условия с ЕстьNull разбить через ИЛИ. никаких обоснований, просто метод тыка)
6 Мимохожий Однако
 
31.07.19
10:22
(4) А теперь еще раз...
Напиши, что ты хочешь в результате, а не что пытался. Каков план запроса?
7 sqr4
 
31.07.19
10:22
потому что (1)
8 ДядяМитяй
 
31.07.19
10:26
+(5) и комментируя в консоли разные условия посмотреть что получится
9 hhhh
 
31.07.19
10:27
(4) может там прошлогодние цены есть. или 5-летней давности
10 Мимохожий Однако
 
31.07.19
10:28
Еще можно выбросить таблицу справочника номенклатура и оставить только две таблицы из регистра цен
11 ДядяМитяй
 
31.07.19
10:28
(9) если это срез последних это актуальные цены. если кому не нравится - пусть заводит цены вовремя ))
12 hhhh
 
31.07.19
10:36
(11) ну может у тс другое поминание, может он думает, если цены установлены 10 лет назад, то они уже не актуальны.
13 lEvGl
 
гуру
31.07.19
11:01
по-моему ошибка при сравнениях с Null, в Где
попробуйте сначала преобразовать
Выбрать ЕстьNull(Цена, 0) Как Цена
Выбрать ЕстьNull(Цен2, 0) Как Цена2
Поместить ВТ;
Выбрать вт.Номенклатура где ВТ.Цена > 100