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

Problemy i pomysły związane z funkcjonowaniem modułu Sprzedaż

Moderator: mikey

ls29
Posty: 29
Rejestracja: 30 sty 2017, 10:07
Rola: Użytkownik CDN XL
Wersja: 2016

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

Post 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.

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

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

Post 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!
--------------------------------
Pozdrawiam
WW

ls29
Posty: 29
Rejestracja: 30 sty 2017, 10:07
Rola: Użytkownik CDN XL
Wersja: 2016

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

Post 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 ?

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

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

Post 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
)
--------------------------------
Pozdrawiam
WW

ODPOWIEDZ