Filtr na liście ZS bez rezerwacji

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

lukasz_mz
Posty: 26
Rejestracja: 27 lut 2020, 12:48
Rola: Użytkownik CDN XL
Wersja: 2019

Filtr na liście ZS bez rezerwacji

Post autor: lukasz_mz »

Witam,

próbuję utworzyć filtr na liście ZS w XL, który pokazywałby tylko te zamówienia, na których jeden lub więcej elementów zamówienia nie ma rezerwacji, czyli na towarze w danym zamówieniu, w zakładce Rezerwacje, kolumna Dostawa miała by wartość Nieokreślona (czyli po prostu nie ma ilości towaru który mógłby zarezerwować).
Próbowałem z takim kodem: "
SELECT ISNULL(SUM(Rez_Ilosc), 0)
FROM CDN.Rezerwacje
WHERE Rez_TwrNumer = @ZaE_GIDNumer"
Jednak nie działa (pokazuję mi że mam na wszystkich towarach po 50 szt na rezerwacji).
Bardzo prosiłbym o pomoc z tym filtrem.

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Filtr na liście ZS bez rezerwacji

Post autor: praiser »

wartość nieokreślona na rezerwacji określają chyba zera w kolumnach identyfikatora dostawy więc taki filtr powinien robić dla zamówień gdzie przynajmniej 1 jednostka elementów ma wartość nieokreśloną.

Kod: Zaznacz cały

Zan_GidNumer IN (
SELECT Zan_GidNumer
FROM CDN.ZamNag
join CDN.Rezerwacje ON ZaN_GIDNumer=Rez_ZrdNumer
WHERE Rez_DstTyp=0 and Rez_DstNumer=0 and Rez_DstFirma=0)
--------------------------------
Pozdrawiam
WW

lukasz_mz
Posty: 26
Rejestracja: 27 lut 2020, 12:48
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Filtr na liście ZS bez rezerwacji

Post autor: lukasz_mz »

Dzięki za odpowiedź, filtr zadziałał. Jednak nie wziąłem pod uwagi kart usługowych na ZS, do każdego ZS taka karta usługowa się dodaje (koszty wysyłki) i przez to filtr pokazuje wszystkie zamówienia. Czy jest opcja aby filtr pomijał karty usługowe i brał pod uwagę tylko karty produktowe?
Dodałem do filtra warunek z Twr_Typ, jednak nie działa, czy coś robię nie tak?

Kod: Zaznacz cały

Zan_GidNumer IN (
SELECT Zan_GidNumer
FROM CDN.ZamNag
join CDN.Rezerwacje ON ZaN_GIDNumer=Rez_ZrdNumer
WHERE Rez_DstTyp=0 and Rez_DstNumer=0 and Rez_DstFirma=0 and Twr_Typ IN (2))

Awatar użytkownika
praiser
Posty: 1091
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Filtr na liście ZS bez rezerwacji

Post autor: praiser »

próbujesz odczytać wartość z tabeli której nie ma w zestawie danych pobranych z SQL. Twr_Typ to kolumna tabeli CDN.TwrKarty.
Należy podłączyć pełnym joinem i voila

Kod: Zaznacz cały

Zan_GidNumer IN (
SELECT Zan_GidNumer
FROM CDN.ZamNag
join CDN.Rezerwacje ON ZaN_GIDNumer=Rez_ZrdNumer
join CDN.TwrKarty ON Twr_GIDNumer=Rez_TwrNumer
WHERE Rez_DstTyp=0 and Rez_DstNumer=0 and Rez_DstFirma=0 and Twr_Typ<3)
--------------------------------
Pozdrawiam
WW

lukasz_mz
Posty: 26
Rejestracja: 27 lut 2020, 12:48
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Filtr na liście ZS bez rezerwacji

Post autor: lukasz_mz »

Teraz działa pięknie, zapomniałem dołożyć CDN.TwrKarty :) bardzo dziękuje za pomoc!

lukasz_mz
Posty: 26
Rejestracja: 27 lut 2020, 12:48
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Filtr na liście ZS bez rezerwacji

Post autor: lukasz_mz »

A czy jest możliwość tak zmodyfikować zapytanie aby filtr pokazywał tylko te elementy w zamówieniu na których nie ma rezerwacji?
Aktualnie jeżeli w zamówieniu jest np 1 pozycja na której nie ma rezerwacji a na pozostałych jest, to filtr pokazuje wszystkie elementy w zamówieniu.
Chodzi o filtrowanie w oknie Zamówienia -> Elementy.

Edit:
Coś takiego stworzyłem, wygląda na to że działa ale chyba za bardzo przekombinowane

Kod: Zaznacz cały

Zan_GidNumer IN (
    SELECT zn.ZaN_GIDNumer
    FROM CDN.ZamNag zn
    JOIN CDN.Rezerwacje rz ON zn.ZaN_GIDNumer = rz.Rez_ZrdNumer
    LEFT JOIN CDN.TwrKarty tk ON tk.Twr_GIDNumer = rz.Rez_TwrNumer
    WHERE rz.Rez_DstTyp = 0 
      AND rz.Rez_DstNumer = 0 
      AND rz.Rez_DstFirma = 0 
      AND tk.Twr_Typ = 2
)
AND Twr_GIDNumer NOT IN (
    SELECT rz2.Rez_TwrNumer
    FROM CDN.Rezerwacje rz2
    WHERE rz2.Rez_DstTyp <> 0 
      AND rz2.Rez_DstNumer <> 0 
      AND rz2.Rez_DstFirma <> 0
)

ODPOWIEDZ