Filtr - preliminarz płatności

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

Moderator: mikey

Lukas
Posty: 126
Rejestracja: 28 wrz 2017, 14:57
Rola: Użytkownik CDN XL
Wersja: 2019

Filtr - preliminarz płatności

Post autor: Lukas »

Cześć,

mam na wszystkich dokumentach w XLu dodawany atrybut o wartości tekst. Chciałbym mieć możliwość wyfiltrowania po tym konkretnym atrybucie dokumentu z poziomu preliminarza. Jak taki filtr powinien wyglądać?

Kod: Zaznacz cały

 (
(prlv_gidNumer in (select Atr_obinumer from cdn.Atrybuty where Atr_atkid = numer atrybutu and Atr_Wartosc like '%'+ ??Atr +'%' and Atr_ObiTyp in (1521))
and prlv_gidTyp=1521)
or
(prlv_gidNumer in (select Atr_obinumer from cdn.Atrybuty where Atr_atkid = numer atrybutu and Atr_Wartosc like '%'+ ??Atr +'%' and Atr_ObiTyp in (1490))
and prlv_gidTyp in (1490) )
or
(prlv_gidNumer in (select Atr_obinumer from cdn.Atrybuty where Atr_atkid = numer atrybutu and Atr_Wartosc like '%'+ ??Atr +'%' and Atr_ObiTyp in (3344))
and prlv_gidTyp in (3344) )
)

@PAR ?@S20|Atr|Wartość Atrybutu: @? PAR@ and atr_wartosc like '%'+ ??Atr +'%')  
Coś takiego wypłodziłem, ale niestety nie działa, gdzie szukać błędu?
blecku
Posty: 56
Rejestracja: 08 sie 2018, 10:29
Rola: Administrator CDN XL

Re: Filtr - preliminarz płatności

Post autor: blecku »

Czy tutaj w parametrze nie masz błędu?

Kod: Zaznacz cały

@PAR ?@S20|Atr|Wartość Atrybutu: @? PAR@ and atr_wartosc like '%'+ ??Atr +'%') 
Ogólnie ja bym to napisał tak:

Kod: Zaznacz cały

@PAR ?@S50|Atr|Wartość Atrybutu:REG= @? PAR@
PRLV_GIDNumer IN (
SELECT 
	Atr_ObiNumer
FROM CDN.Atrybuty
WHERE Atr_AtkId = NrKlasyAtr AND Atr_ObiTyp IN (1521,1490,3344) AND Atr_Wartosc like '%'+ ??Atr +'%'
)
chyba że masz różne klasy atrybutów do typu dokumentów to bym wtedy uwarunkowanie zrobił w sposób:

Kod: Zaznacz cały

...
WHERE (
	(Atr_AtkId = NrKlasyAtr1 AND Atr_ObiTyp = 1521) 
	OR (Atr_AtkId = NrKlasyAtr2 AND Atr_ObiTyp = 1490) 
	OR (Atr_AtkId = NrKlasyAtr3 AND Atr_ObiTyp = 3344)
	)
...
Pozdrawiam,
Kamil
Lukas
Posty: 126
Rejestracja: 28 wrz 2017, 14:57
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Filtr - preliminarz płatności

Post autor: Lukas »

Hej,

a jakbym chciał jeszcze dodać do tego filtra możliwość wyszukania po serii dokumentu? Chodzi tak na prawdę o FZ
blecku
Posty: 56
Rejestracja: 08 sie 2018, 10:29
Rola: Administrator CDN XL

Re: Filtr - preliminarz płatności

Post autor: blecku »

o ile się nie machnąłem w deklaracji parametru to powinno to wyglądać mniej więcej tak:

Kod: Zaznacz cały

@PAR ?@S50|Atr|Wartość Atrybutu:REG= @? PAR@
@PAR ?@S50|Seria|Seria:REG= @? PAR@

PRLV_GIDNumer IN (
SELECT 
	Atr_ObiNumer
FROM CDN.Atrybuty
INNER JOIN CDN.TraNag ON Atr_ObiTyp = TrN_GIDTyp AND Atr_ObiNumer = TrN_GIDNumer
WHERE Atr_AtkId = NrKlasyAtr AND Atr_ObiTyp IN (1521,1490,3344) AND Atr_Wartosc like '%'+ ??Atr +'%' AND TrN_TrNSeria = ??Seria
)
Pozdrawiam,
Kamil
Lukas
Posty: 126
Rejestracja: 28 wrz 2017, 14:57
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Filtr - preliminarz płatności

Post autor: Lukas »

Cześć,

jak zmieniłem w filtrze przy trn_seria na "or" to tak czy inaczej nie wyszukuje mi dokumentów po samej serii. Generalnie jeżeli wpiszę atrybut to mi znajduje, natomiast serii już nie.
blecku
Posty: 56
Rejestracja: 08 sie 2018, 10:29
Rola: Administrator CDN XL

Re: Filtr - preliminarz płatności

Post autor: blecku »

OK z tego co zrozumiałem to masz warunek teraz taki:

Kod: Zaznacz cały

Atr_AtkId = NrKlasyAtr AND Atr_ObiTyp IN (1521,1490,3344) AND Atr_Wartosc like '%'+ ??Atr +'%' OR TrN_TrNSeria = ??Seria
a do pierwotnego kodu chciałeś dodać wszystkie FZ z daną serią to warunek powinien wyglądać:

Kod: Zaznacz cały

(Atr_AtkId = NrKlasyAtr AND Atr_ObiTyp IN (1521,1490,3344) AND Atr_Wartosc like '%'+ ??Atr +'%') OR (TrN_TrNSeria = ??Seria AND TrN_GIDTyp = 1521)
PS. przy czym trzeba uważać jeżeli istnieją FZ które nie posiadają serii. I użyjemy filtra i nie wpiszemy nic w serię to również wyświetli nam ten filtr dokumenty które mogą być nieoczekiwane. Więc można w parametr serii wstawić np. jakąś wartość domyślną która jest zawsze różna od serii które posiadamy lub stworzyć inny warunek. Możliwości jest kilka :)
Pozdrawiam,
Kamil
ODPOWIEDZ