Имя: Пароль:
1C
 
1с запрос массив параметров пустой
,
0 illiona
 
naïve
17.09.20
07:00
ВЫБРАТЬ
            РеализацияТоваровУслугСкидкиНаценки.НомерСтроки КАК НомерСтроки,
            РеализацияТоваровУслугСкидкиНаценки.КлючСвязи КАК КлючСвязи,
            РеализацияТоваровУслугСкидкиНаценки.Сумма КАК Сумма,
            РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка КАК СкидкаНаценка
        ПОМЕСТИТЬ ВременнаяТаблица
        ИЗ
            Документ.ЗаказКлиента.СкидкиНаценки КАК РеализацияТоваровУслугСкидкиНаценки
        ГДЕ
            РеализацияТоваровУслугСкидкиНаценки.Ссылка = &Ссылка
            И             
            ВЫБОР КОГДА 0 В (
               ВЫБРАТЬ Количество(*) ИЗ Справочник.СкидкиНаценки ГДЕ СкидкаНаценка В (&СкидкаНаценка))
            ТОГДА
                Истина            ИНАЧЕ
                СкидкаНаценка В (&СкидкаНаценка)
            КОНЕЦ


Добрый день.Если массив параметров пустой выводит все значения, а если не пустой не верно выводит
1 PuhUfa
 
17.09.20
07:10
(0) Не так разве должно быть?

ИНАЧЕ РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка В (&СкидкаНаценка)
2 Simod
 
17.09.20
07:14
КОЛИЧЕСТВО(*) для пустой таблицы возвращает 0, так что при установке в качестве параметра отбора пустой массив ты получаешь пустую таблицу и соответствующий результат.
3 illiona
 
naïve
17.09.20
07:29
если в массиве например стоит выводить СкидкаНаценка = скидка1%, скидка2%, а в документе только скидка3%,
он выводит скидка3%, хотя должно быть пусто, т.к. условия не подходят
4 Галахад
 
гуру
17.09.20
07:30
(3) Как раз и подходят в это условие:
0 В (
               ВЫБРАТЬ Количество(*) ИЗ Справочник.СкидкиНаценки ГДЕ СкидкаНаценка В (&СкидкаНаценка))
5 illiona
 
naïve
17.09.20
07:32
а он выводит все что есть в документе, а должен только скидка1%, скидка2%
6 PuhUfa
 
17.09.20
07:34
Зачем вообще такие танцы? Почему просто не написать:
ВЫБОР
    КОГДА &ЕстьФильтрПоСкидкам
      ТОГДА РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка В (&СкидкаНаценка)
      ИНАЧЕ Истина
КОНЕЦ

Запрос.УстановитьПараметр("СкидкаНаценка",СкидкаНаценка);
Запрос.УстановитьПараметр("ЕстьФильтрПоСкидкам", ?(СкидкаНаценка.Количество()>0,Истина,Ложь));
7 illiona
 
naïve
17.09.20
07:39
(6) спасибо
все равно только, если в массиве скидка1%, скидка2%
а в документе только скидка3%
запрос выдает все позиции со скидкой скидка3%, т.е. по массиву не отбирает
8 PuhUfa
 
17.09.20
07:47
(7) >>запрос выдает все позиции со скидкой скидка3%, т.е. по массиву не отбирает
как определила? Показывай уж тогда весь запрос
9 Simod
 
17.09.20
07:48
(6) Можно и попроще:
|...
|ГДЕ
|      &ЕстьФильтрПоСкидкам ИЛИ РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка В (&СкидкаНаценка)

Запрос.УстановитьПараметр("СкидкаНаценка", СкидкаНаценка);
Запрос.УстановитьПараметр("ЕстьФильтрПоСкидкам", ?(СкидкаНаценка.Количество() > 0, Истина, Ложь));
10 illiona
 
naïve
17.09.20
07:49
ВЫБРАТЬ
            РеализацияТоваровУслугСкидкиНаценки.НомерСтроки КАК НомерСтроки,
            РеализацияТоваровУслугСкидкиНаценки.КлючСвязи КАК КлючСвязи,
            РеализацияТоваровУслугСкидкиНаценки.Сумма КАК Сумма,
            РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка КАК СкидкаНаценка
        ПОМЕСТИТЬ ВременнаяТаблица
        ИЗ
            Документ.ЗаказКлиента.СкидкиНаценки КАК РеализацияТоваровУслугСкидкиНаценки
        ГДЕ
            РеализацияТоваровУслугСкидкиНаценки.Ссылка = &Ссылка
            И             
             ВЫБОР
                        КОГДА &ЕстьФильтрПоСкидкам
                  ТОГДА РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка В (&СкидкаНаценка)
          ИНАЧЕ Истина
        КОНЕЦ
      

        ;
        
        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            РеализацияТоваровУслугТовары.НомерСтроки КАК НомерСтроки,
            РеализацияТоваровУслугТовары.КлючСвязи КАК КлючСвязи,
            РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
            РеализацияТоваровУслугТовары.Склад КАК Склад
        ПОМЕСТИТЬ Таблица2
        ИЗ
            Документ.ЗаказКлиента.Товары КАК РеализацияТоваровУслугТовары
        ГДЕ
            РеализацияТоваровУслугТовары.Ссылка = &Ссылка
        
        ;
        
        ////////////////////////////////////////////////////////////////////////////////
        ВЫБРАТЬ
            Таблица2.КлючСвязи КАК КлючСвязи,
            Таблица2.Номенклатура КАК Номенклатура,
            Таблица2.Склад КАК Склад,
            ВременнаяТаблица.СкидкаНаценка КАК СкидкаНаценка,
            ВременнаяТаблица.Сумма КАК Сумма
        ИЗ
            ВременнаяТаблица КАК ВременнаяТаблица
                ЛЕВОЕ СОЕДИНЕНИЕ Таблица2 КАК Таблица2
                ПО ВременнаяТаблица.КлючСвязи = Таблица2.КлючСвязи
11 PuhUfa
 
17.09.20
08:04
(10) Нужен отладчик -( Может конечно утренний кофе еще не начал действовать, но визуально запрос должен работать нормально. Надо отладчиком посмотреть где что и какие заначения по факту
12 illiona
 
naïve
17.09.20
08:07
Даже так не работает
ВЫБРАТЬ
            РеализацияТоваровУслугСкидкиНаценки.НомерСтроки КАК НомерСтроки,
            РеализацияТоваровУслугСкидкиНаценки.КлючСвязи КАК КлючСвязи,
            РеализацияТоваровУслугСкидкиНаценки.Сумма КАК Сумма,
            РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка КАК СкидкаНаценка
      ИЗ
            Документ.ЗаказКлиента.СкидкиНаценки КАК РеализацияТоваровУслугСкидкиНаценки
        ГДЕ
            РеализацияТоваровУслугСкидкиНаценки.Ссылка = &Ссылка
            И            
             ВЫБОР
                        КОГДА &ЕстьФильтрПоСкидкам
                  ТОГДА РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка В (&СкидкаНаценка)
          ИНАЧЕ Истина
        КОНЕЦ
13 PuhUfa
 
17.09.20
08:10
(12) ну тут пока только одно. В СкидкаНаценка, в момент УстановитьПараметр у тебя все значения скидок
14 illiona
 
naïve
17.09.20
08:15
т.е. он не будет выводить что я чисто в списке значений установлю?
15 illiona
 
naïve
17.09.20
08:18
ВЫБРАТЬ
    РеализацияТоваровУслугСкидкиНаценки.НомерСтроки КАК НомерСтроки,
    РеализацияТоваровУслугСкидкиНаценки.КлючСвязи КАК КлючСвязи,
    РеализацияТоваровУслугСкидкиНаценки.Сумма КАК Сумма,
    РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка КАК СкидкаНаценка
ИЗ
    Документ.ЗаказКлиента.СкидкиНаценки КАК РеализацияТоваровУслугСкидкиНаценки
ГДЕ
    РеализацияТоваровУслугСкидкиНаценки.Ссылка = &Ссылка
    и
    РеализацияТоваровУслугСкидкиНаценки.СкидкаНаценка В (&СкидкаНаценка)

вот так работает, но на пустоту нет проверки
16 PuhUfa
 
17.09.20
08:19
(14) Ну нам отсюда не видно где и как ты устанавливаешь значения для СкидкаНаценка. Поставь точку УстановитьПараметр и посмотри что в нем в отладчиком
17 illiona
 
naïve
17.09.20
08:28
все работает, я делала через консоль)))), сделала через отладчик