Имя: Пароль:
1C
 
Остатки и обороты
,
0 Zixxx
 
17.01.22
18:40
По конкретной номенклатуре получаю остатки и обороты за год. За этот год у нее нет движений, есть только начальный и конечный остаток.

Параметр &ВыбиратьВсе = Истина.

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


Пробую менять условия:
1. "ИНАЧЕ ПартииТоваров.КоличествоПриход <> 0" заменить на "ИНАЧЕ ЛОЖЬ" тогда данные появятся.
2. Если убрать "ИНАЧЕ ПартииТоваров.КоличествоПриход <> 0" данные тоже будут.
3. Если "ТОГДА ИСТИНА" заменить на "ТОГДА ЛОЖЬ" то данные не выводятся.

Почему так происходит?
1 aka MIK
 
17.01.22
18:42
Потому что так написано
2 aka MIK
 
17.01.22
18:43
Если нет оборотов то КоличествоПриход = 0 ) неожиданно, да?
3 Zixxx
 
17.01.22
18:45
(1) Условие в итоге получается ГДЕ ИСТИНА, но почему при добавлении ИНАЧЕ она перестает выводить данные?
4 Zixxx
 
17.01.22
18:45
(2) Я знаю что так КоличествоПриход = 0, но в ИНАЧЕ же мы не попадаем чтобы на него установилось условие
5 Ёпрст
 
17.01.22
18:47
(0) потому, что в выбратьвсе вмегда истина
6 Ёпрст
 
17.01.22
18:47
Че ты в параметр то пихаешь?
7 Zixxx
 
17.01.22
18:50
(6) Параметр &ВыбиратьВсе = Истина, все работает пока не добавлю ИНАЧЕ ПартииТоваров.КоличествоПриход <> 0
8 azernot
 
17.01.22
18:52
Добавь в поля начальный и конечный остаток и всё будет работать так, как ты хочешь
Это особенность работы виртуальной таблицы. Результат зависит от того, какие поля выбираешь.
9 Ёпрст
 
17.01.22
18:52
(7) значит параметр устанавливаешь в ложь.
10 Zixxx
 
17.01.22
18:53
(6) Начальный остаток = 1, если добавлю ИНАЧЕ ПартииТоваров.КоличествоПриход = 0, то данные появятся, т.е. в ИНАЧЕ он не попадает, значит и не должен и смотреть на ПартииТоваров.КоличествоПриход <> 0
11 Zixxx
 
17.01.22
18:54
(9) 1. "ИНАЧЕ ПартииТоваров.КоличествоПриход <> 0" заменить на "ИНАЧЕ ЛОЖЬ" тогда данные появятся.
Тогда в этом случае тоже не должны данные выводится если параметр ложь
12 Zixxx
 
17.01.22
18:55
(8) Да, на этот момент тоже обратил внимание. Но как понять как эта особенность правильно работает?
13 Ёпрст
 
17.01.22
18:55
(11) ты себе противоречишь, см. п.3 из (0)
14 Zixxx
 
17.01.22
18:58
(13) и где там противоречие? Если Параметр = Истина Тогда Ложь - данные не выводятся
15 Zixxx
 
17.01.22
18:58
(13) ... это как раз говорит о том что параметр 100% Истина
16 azernot
 
17.01.22
18:59
(12) Если в запросе не фигурирует никаких полей, значит тебе нужны "все", если в запросе есть какие-то поля - то используются только они.
В твоем случае, система "оптимизирует" запрос, поскольку видит, что используется только "КоличествоПриход", и не выдаёт никаких записей не содержащих эти данные.
17 Zixxx
 
17.01.22
19:00
(13) в (8) правильно говорит, но не понятно как именно это связано. Обязательно нужно выбирать все ресурсы, только для того чтобы наложить условие в ГДЕ?
18 Жан Пердежон
 
17.01.22
19:01
(17) не все, а те, что в условии
19 Dmitrii
 
гуру
17.01.22
19:06
(0) А если попробовать заменить "ИНАЧЕ ПартииТоваров.КоличествоПриход <> 0" на "ИНАЧЕ ЕСТЬNULL(ПартииТоваров.КоличествоПриход, 0) <> 0". Что выдаст?
20 Zixxx
 
17.01.22
19:10
(19) ничего не выдаст, ожидаемо из написанного в (16) и (18)
21 youalex
 
17.01.22
19:14
емнип, таблица оборотов/остатков и оборотов - добавляет условие having sum() <> 0 в совокупности для всех ресурсов, используемых в запросе вирт. таблицы.
22 youalex
 
17.01.22
19:20
т.е. схематично, запрос из (0) выглядит как

ВЫБРАТЬ вирт.Номенклатура, вирт.КоличествоПриход
ИЗ (ВЫБРАТЬ Номенклатура, Сумма(Количество) КАК КоличествоПриход  
      ИЗ ТаблицаИтоговПлюсЧтоТоИзДвижений
      ИМЕЮЩИЕ  Сумма(Количество) <> 0) вирт
ГДЕ ИСТИНА //а результат вирт. таблицы - пустой.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший