Strona 1 z 1

Filtr w dziale Kontrahenci (ukrywanie dłużników i 2-ga opcja pokazywanie dłużników)

: 29 lis 2024, 13:21
autor: ls29
Cześć.
Mam prośbę do Was .
Czy mogę uzyskać u Was pomoc w stworzeniu filtra :
Pierwszy by ukrywał wszystkich klientów zalegających z płatnościami np: ustawienie kwota powyżej 2tys zł to znikają
Drugi zostawia na liście wszystkich dłużników.

Re: Filtr w dziale Kontrahenci (ukrywanie dłużników i 2-ga opcja pokazywanie dłużników)

: 29 lis 2024, 17:41
autor: praiser
Listę dłużników otrzymasz np. takim filtrem ale on chyba nie jest zbyt optymalny. Zakłada wartość faktur i korekt powyżej "Kwota"

Kod: Zaznacz cały

@PAR ?@n9_.2|Kwota|&Kwota:REG=0 @? PAR@

Knt_GidNumer IN (
    SELECT t.Trp_KntNumer
    FROM CDN.TraPlat t
    WHERE t.TrP_Typ = 2 
    AND t.TrP_Rozliczona = 0 
    AND t.TRP_Waluta = 'PLN' 
    AND t.TRP_GIDTyp IN (2033,2041,2034,2042)
    AND t.Trp_Termin < cdn.DateToClarion(getdate())
    GROUP BY t.TrP_KntNumer
    HAVING SUM(t.Trp_Pozostaje) > 0 
    AND SUM(t.Trp_Pozostaje) >= ??_QKwota
)
Zalecałbym jednak stworzenie funkcji w MSSM zwracającą wartość float

Kod: Zaznacz cały

CREATE FUNCTION [CDN].[Zadluzenie] 
(
   @knt_gid int, @knt_gidtyp int
)
RETURNS float
AS
BEGIN
   DECLARE @wynik float = NULL
   SELECT @wynik = sum(Trp_Pozostaje) 
   FROM CDN.TraPlat
   WHERE Trp_KntNumer=@knt_gid
   AND Trp_KntTyp=@knt_gidtyp
   AND TrP_Typ = 2 
   AND TrP_Rozliczona = 0 
   AND TRP_Waluta = 'PLN'  --mozna przesunąć do argumentu funkcji
   AND TRP_GIDTyp IN (2033,2041,2034,2042) --faktury i korekty
   AND Trp_Termin < cdn.DateToClarion(getdate())
   
   RETURN @wynik
END
wtedy można to wywołać dla tylko dłużników równej lub pow kwoty przeterminowanej:

Kod: Zaznacz cały

@PAR ?@n9_.2|Kwota|&Kwota:REG=0 @? PAR@
Knt_GidNumer IN (
    SELECT k.Knt_GidNumer 
    FROM CDN.KntKarty k
    WHERE cdn.zadluzenie(k.Knt_GidNUmer, k.Knt_Gidtyp) IS NOT NULL
    AND ISNULL(cdn.zadluzenie(k.Knt_GidNUmer, k.Knt_Gidtyp),0) >= ??_QKwota
)
działą to nieporównywalnie szybciej

Wszystkich dłużników po terminie wyfiltrujesz wtedy tak:

Kod: Zaznacz cały

Knt_GidNumer IN (
   SELECT k.Knt_GidNumer 
   FROM CDN.KntKarty k
   WHERE cdn.zadluzenie(k.Knt_GidNUmer, k.Knt_Gidtyp) > 0
)

mogłem coś pokręcić bo przy drinku to piszę :) czuwaj!

Re: Filtr w dziale Kontrahenci (ukrywanie dłużników i 2-ga opcja pokazywanie dłużników)

: 02 gru 2024, 08:33
autor: ls29
Super.
Wszystko działa .
A czy jeszcze filtr w drugą stronę, ukrycie wszystkich dłużników od kwoty x ?
Czy mogę poprosić o pomoc jeszcze ?

Re: Filtr w dziale Kontrahenci (ukrywanie dłużników i 2-ga opcja pokazywanie dłużników)

: 02 gru 2024, 13:36
autor: praiser
Zamiana IN na NOT IN powinna być skuteczna. Potestuj.
Takie zapytanie powinno odrzucić wszystkich kontrahentów zwróconych przez podzapytanie. W ten sposób ukrywasz dłużników o zadłużeniu równym lub większym niż ??_QKwota.

Kod: Zaznacz cały

@PAR ?@n9_.2|Kwota|&Kwota:REG=0 @? PAR@
Knt_GidNumer NOT IN (
    SELECT k.Knt_GidNumer 
    FROM CDN.KntKarty k
    WHERE cdn.zadluzenie(k.Knt_GidNUmer, k.Knt_Gidtyp) IS NOT NULL
    AND ISNULL(cdn.zadluzenie(k.Knt_GidNUmer, k.Knt_Gidtyp),0) >= ??_QKwota
)