Сложное условие в запросе

1. four-dimensional-cube 26.07.23 17:51 Сейчас в теме
Добрый день. Платформа 8.3 (8.3.21.1624). Есть отчет на СКД.
Берутся все записи из справочника Номенклатура и соединяются с виртуальной таблицей ЗапасыОстатки через левое соединение.
Отчет выводит весь список номенклатуры и ее количество, даже если количество =0.
Выглядит это все примерно так:
Запрос

Мне нужно условие в запрос: не показывать товары, на которых стоит пометка на удаление и по которым нет остатков. То есть если пометка на удаление стоит, но остатки еще есть, то выводить эти товары нужно. В конструкторе запросов в параметрах виртуальных таблиц нет возможности указать условие ресурсам регистра, только измерениям. Как еще это можно сделать?
По теме из базы знаний
Найденные решения
3. Xershi 1487 26.07.23 19:12 Сейчас в теме
(1)
ВЫБРАТЬ
    Номенклатура.Ссылка КАК втНоменклатура
ПОМЕСТИТЬ втСправочникНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Запас)
;

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

Так будет правильнее, если остаток 0 и стоит пометка, то это исключаем.
four-dimensional-cube; user1619761; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 26.07.23 18:54 Сейчас в теме
(1)как-то так:
....
ГДЕ
       ВЫБОР
             КОГДА втСправочникНоменклатура.втНоменклатура.ПометкаУдаления
               ТОГДА ЗапасыОстатки.КоличествоОстаток > 0
            ИНАЧЕ ИСТИНА
       КОНЕЦ
3. Xershi 1487 26.07.23 19:12 Сейчас в теме
(1)
ВЫБРАТЬ
    Номенклатура.Ссылка КАК втНоменклатура
ПОМЕСТИТЬ втСправочникНоменклатура
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.ЭтоГруппа = ЛОЖЬ
    И Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Запас)
;

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

Так будет правильнее, если остаток 0 и стоит пометка, то это исключаем.
four-dimensional-cube; user1619761; +2 Ответить
4. Swetlana 25 27.07.23 08:35 Сейчас в теме
(3) Соединение нужно поменять все же, так проще будет и условий не нужно

ИЗ
РегистрНакопления.Запасы.Остатки(, )
ЛЕВОЕ втСправочникНоменклатура) КАК ЗапасыОстатки
ПО втСправочникНоменклатура.втНоменклатура = ЗапасыОстатки.Номенклатура
5. DBV 27.07.23 08:39 Сейчас в теме
(4) Вы это серьёзно?
Все записи из регистра с остатками и к ним левое соединение?
9. Swetlana 25 27.07.23 08:41 Сейчас в теме
(5) я поняла автора так, что ему нужна вся номенклатура по которой имеются остатки
10. DBV 27.07.23 08:42 Сейчас в теме
(9) пишет он одно, а в запросе другое
6. nomad_irk 76 27.07.23 08:39 Сейчас в теме
(4)Не нужно, потому что, если остатков вообще не будет, то результат будет пустой, а нужна вся номенклатура, независимо от наличия остатка
8. DBV 27.07.23 08:41 Сейчас в теме
(6) не вся, там же отбор по типу номенклатуры
11. nomad_irk 76 27.07.23 08:45 Сейчас в теме
(8)хорошо. вся определенного типа. так норм?
13. DBV 27.07.23 08:49 Сейчас в теме
19. four-dimensional-cube 27.07.23 10:21 Сейчас в теме
(3) Спасибо, это то что было нужно. Но у меня вопрос: разве можно накладывать условия на виртуальные таблицы через ГДЕ? Я много читал, что это плохая практика. Хотя после внесения вашего решения в свой отчет я не увидел никакой разницы в скорости выполнения.
24. Xershi 1487 27.07.23 13:24 Сейчас в теме
(19) все зависит от поставленной задачи. Ваша решается так.
7. DBV 27.07.23 08:40 Сейчас в теме
(1) Левое Соединение изменить на Внутреннее?
12. DBV 27.07.23 08:48 Сейчас в теме
(7) а не, неправильно понял задачу
14. DesertPunk 27.07.23 09:41 Сейчас в теме
(1) А зачем тебе спр.Номенклатура в запросе? Тебе же нужны остатки. Вот и возьми только остатки. Пометка удаления у элемента справочника на запись в РН не влияет. Оттуда же вытащи и тип номенклатуры.
15. nomad_irk 76 27.07.23 09:52 Сейчас в теме
(14)что будет в результате такого запроса(без спр.Номенклатура), если остатков совсем не будет?
16. DesertPunk 27.07.23 09:56 Сейчас в теме
(15) Ничего не будет. ТС же вроде и хочет получить только остатки
17. nomad_irk 76 27.07.23 10:00 Сейчас в теме
(16)ТС хочет получить список всей номенклатуры определенного вида + остатки по ней с условием, что если номенклатура помечена на удаление, но по ней есть остаток, то ее так же выводить в список, помеченную на удаление номенклатуру без остатка выводить не надо.
18. four-dimensional-cube 27.07.23 10:18 Сейчас в теме
(14) Мне нужна абсолютно вся номенклатура, с остатками и без, поэтому я и беру спр.Номенклатура.
20. DesertPunk 27.07.23 11:40 Сейчас в теме
21. four-dimensional-cube 27.07.23 11:42 Сейчас в теме
(20) Нет, клиенту так нужно
22. DesertPunk 27.07.23 11:48 Сейчас в теме
(21) Гы))) У меня в базе 52003 элемента спр.Номенклатура. Так что при виде левого соединения к это справочнику начинает глаз дёргаться)
23. nomad_irk 76 27.07.23 12:21 Сейчас в теме
(22) Пока не дергается
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот