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!