Имя: Пароль:
1C
 
Вопрос по отбору:
0 Nemirov
 
03.02.20
08:43
Есть запрос: Выводит Номенклатуру расходной накладной, которые показывают недостающие  позиции в приходной. При Формировании Запроса отбор учитывает и не проведенные приходные накладные, то есть если приходная накладная не проведенная запрос выводит все позиции из расходной накладной. Ставлю отбор ПриходнааяНакладная.Проведен = ИСТИНА, исчезают позиции которые есть в РасходнойНакладной, а ПриходнойНакладной нет. Как сделать отбор или может запрос как-то переделать уже голову поломал...



Номен = Истина;
    Док = Ложь;
    Запрос=Новый Запрос();
    Запрос.Текст="ВЫБРАТЬ
    |    РасходнаяНакладнаяСостав.Номенклатура КАК Номенклатура,
    |    ЕСТЬNULL(ПриходнаяНакладнаяСостав.Количество, 0) - РасходнаяНакладнаяСостав.Количество КАК Разница,
    |    РасходнаяНакладнаяСостав.Ссылка КАК Документ
    |ИЗ
    |    Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная.Состав КАК ПриходнаяНакладнаяСостав
    |        ПО РасходнаяНакладнаяСостав.Номенклатура = ПриходнаяНакладнаяСостав.Номенклатура
    |            И РасходнаяНакладнаяСостав.Ссылка = ПриходнаяНакладнаяСостав.Ссылка.ДокОснование
    |            И ПриходнаяНакладнаяСостав.Ссылка <> НЕОПРЕДЕЛЕНО
    |ГДЕ
    |    РасходнаяНакладнаяСостав.Количество - ЕСТЬNULL(ПриходнаяНакладнаяСостав.Количество, 0) <> 0
    |    И РасходнаяНакладнаяСостав.Ссылка.Контрагент ССЫЛКА Справочник.СтруктурныеЕдиницы
    |    И (&НеПроверятьДата
    |            ИЛИ РасходнаяНакладнаяСостав.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон)
    |    И (&НеПроверятьКонтрагент
    |            ИЛИ РасходнаяНакладнаяСостав.Ссылка.Контрагент = &СтруктурнаяЕдиница)
    |    И РасходнаяНакладнаяСостав.Ссылка.Проведен = ИСТИНА
    //|    И ПриходнаяНакладнаяСостав.Ссылка.Проведен = ИСТИНА
    |";
    Если НЕ ПараметрыСеанса.ТекущаяСтруктурнаяЕдиница = Справочники.СтруктурныеЕдиницы.НайтиПоКоду("1")Тогда
        ЭлементыФормы.Контрагент.Значение = ПараметрыСеанса.ТекущаяСтруктурнаяЕдиница;
        ЭлементыФормы.Контрагент.Доступность = ЛОЖЬ;
    КонецЕсли;
    //Запрос.УстановитьПараметр("МоментВремени",ТекущаяДатаСеанса());
    Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаНач));
    Запрос.УстановитьПараметр("ДатаКон",КонецДня(ДатаКон));
    Запрос.УстановитьПараметр("СтруктурнаяЕдиница",Контрагент);
    
    Если Не ЗначениеЗаполнено(Контрагент) Тогда
        Запрос.УстановитьПараметр("НеПроверятьКонтрагент", Истина);
        
    Иначе
        Запрос.УстановитьПараметр("НеПроверятьКонтрагент", Ложь);
    КонецЕсли;    
    Если Не ЗначениеЗаполнено(ДатаНач) Тогда
        Запрос.УстановитьПараметр("НеПроверятьДата", Истина);
    Иначе
        Запрос.УстановитьПараметр("НеПроверятьДата", Ложь);
    КонецЕсли;    
    Если Не ЗначениеЗаполнено(ДатаКон) Тогда
        Запрос.УстановитьПараметр("НеПроверятьДата", Истина);
    Иначе
        Запрос.УстановитьПараметр("НеПроверятьДата", Ложь);
    КонецЕсли;
        Документы=Запрос.Выполнить().Выгрузить();
        ЭлементыФормы.Документы.СоздатьКолонки();
1 ДенисЧ
 
03.02.20
08:45
Условие перенеси в группу ПО
2 Nemirov
 
03.02.20
09:40
(1) Пробовал - Нет
3 goodprog
 
03.02.20
09:46
(2) плохо пробовал. У тебя левое соединение, нужно все поля правой таблицы оборачивать в ЕстьNull
должна помочь такая конструкция
ЕстьNull(ПриходнааяНакладная.Проведен, Истина) = ИСТИНА

но правильный ответ в (1)
4 Nemirov
 
03.02.20
09:48
(3) Да точно извиняюсь поставил в скобках не подумал поэтому условие не выполнялось нормально
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.