Имя: Пароль:
1C
1С v8
Запрос Выбирает только цены с нулевым значением
0 Драмаченко Григорий
 
23.05.22
13:53
Привет! и с ново я со своими тупыми вопросами )

Написал запрос он в принципе меня усстраивает но не понимаю почему он выводит товары только те, у которых заполнена цена со значением "0" то-есть те у которых есть запись в регистре сведений

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


как показать товары даже те у которы нету вооще записи в регистре?
1 2S
 
23.05.22
13:55
бикоз
            |    И Цены.Цена = &НулеваяЦена";
2 2S
 
23.05.22
13:55
СправочникНоменклатура.ЭтоГруппа = &ЭтоГруппа
напиши как
    НЕ СправочникНоменклатура.ЭтоГруппа
3 Said_We
 
23.05.22
13:56
4 Драмаченко Григорий
 
23.05.22
13:57
(1) мне нужно что бы запрос вернул вс етовары у которых либо цена ноль либо вообще нету записи в регистре ЦеныНоменклатуры
5 Said_We
 
23.05.22
13:58
(0) "&НулеваяЦена" может быть равна немножечко не нулю. Зачем параметр?

И ЕстьNULL(Цены.Цена,0) = 0
6 Драмаченко Григорий
 
23.05.22
14:01
(5)

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


Пробую

(2) не понимаю где это написать я еще зеленый в запросах (
7 Драмаченко Григорий
 
23.05.22
14:02
(5) объясните пожалуйста что значит И ЕстьNULL(Цены.Цена,0) = 0

то есть если типа нету записи в регистре то выведет все равно ноль?

или как?
8 Said_We
 
23.05.22
14:02
(6) А что не поправил условие на ЭтоГруппа как в (2) написано?
9 Драмаченко Григорий
 
23.05.22
14:03
(70 я в (6) написал что не понимаю как написать такое условие :-(
10 Драмаченко Григорий
 
23.05.22
14:04
(50 да так работает но не могли бы объяснить в чем волшебство
11 Said_We
 
23.05.22
14:04
(7) Если нет записи, то будет NULL. А NULL переворачиваем в 0 и делаем сравнение.
Запускай старую консоль в толстом клиенте и смотри на данные живьём.

НЕ СправочникНоменклатура.ЭтоГруппа
Вместо того ч с параметром нарисовано. ЭтоГруппа и так тип булево.
12 Драмаченко Григорий
 
23.05.22
15:39
(11) спасибо теперь буду знать :-)