--Betald dröjränta per kund för valfri tidsperiod --Bengt Rönde, EDP Consult AB 2017-01-18 --Hanterar negativa fakturor för sig, tar inte med annullerade fakturor 2017-04-02 --Lagt till taxan för amorteringsplansränta 2018-06-19, Ove Eldståhl if OBJECT_ID('tempdb..#t1') IS NOT NULL drop table #t1; if OBJECT_ID('tempdb..#t2') IS NOT NULL drop table #t2; if OBJECT_ID('tempdb..#t3') IS NOT NULL drop table #t3; if OBJECT_ID('tempdb..#t4') IS NOT NULL drop table #t4; DECLARE @datfrom smalldatetime SET @datfrom = '2018-01-01' -- Ange betaldatum fr o m här DECLARE @dattom smalldatetime SET @dattom = '2018-12-31' -- Ange betaldatum t o m här DECLARE @minranta integer SET @minranta = 0 -- Ange minimi total ränta/kund för att presenteras i rapport, från 0 och uppåt --Skapa en tabell med Dröjsmålsräntetaxor (även subparametrar) select strParameterDefaultValue as taxa into #t1 from tbEDPParameterDefaultValue d inner join tbEDPParameter p on p.intParameterID=d.intParameterID where strParametername like 'TaxekodDröjränta' or strParameterName like 'AmorteringsplanRäntetaxa' insert into #t1 (taxa) select distinct strValue from tbEDPParameterSubParameterValue s inner join tbEDPParameter p on p.intParameterID=s.intParameterID where strParametername like 'TaxekodDröjränta' --Skapa en tabell med alla fakturor med dröjsmålsränta select intKundnr,intSpecialAdressnr,lngFakturanr,curBruttobelopp,100000000.00 as totalbelopp,datFakturadatum, isnull((select sum(curRadBruttobelopp) from tbFuFakturarad r where r.lngFakturanr=tbFuFaktura.lngfakturanr and strTaxefaktor='KRED'),0) as kred, (select sum(curRadBruttobelopp) from tbFuFakturarad r where r.lngFakturanr=tbFuFaktura.lngfakturanr and strTaxekod in (select taxa from #t1)) as dröj into #t2 from tbFuFaktura where (select sum(curRadBruttobelopp) from tbFuFakturarad r where r.lngFakturanr=tbFuFaktura.lngfakturanr and strTaxekod in (select taxa from #t1)) >0 and strBetalstatus <>'ANNU' --Beräkna totalbelopp för faktura exkl kreditrader update #t2 set totalbelopp=curBruttobelopp-kred delete from #t2 where totalbelopp=0 --Gör en tabell med alla betalningar under perioden på någon av fakturorna i #t2, bara för posoitiva fakturor select intKundnr,intSpecialAdressnr,r.lngFakturanr,curReskontrabelopp,curFakturaKapitalBetalbelopp,strReskontratyp,100000.00 as betränta into #t3 from tbFuReskontra r inner join #t2 on #t2.lngFakturanr=r.lngFakturanr where strReskontratyp in ('AGBE','BET1','BET2','BGMA','BGOC','CHEC','EBET','FACT','IFBE','KONT','KVIT','PGMA','PGOC') and curReskontrabelopp <> 0 and bolBackad=0 and datBetaldatum between @datfrom and @dattom and curFakturaKapitalBetalbelopp<>0 and curBruttobelopp>0 -- till denna tabell lägger vi till Kreddelen som en betalning om fakturan är gjord under perioden, bara för posoitiva fakturor insert into #t3 (intKundnr,intSpecialAdressnr,lngFakturanr,curReskontrabelopp,curFakturaKapitalBetalbelopp,strReskontratyp,betränta) select intKundnr,intSpecialAdressnr,lngFakturanr, kred,-1*kred,'KRED',100000.00 from #t2 where kred<0 and datFakturadatum between @datfrom and @dattom and curBruttobelopp>0 -- Nu beräknar vi räntedelen för varje betalning update #t3 set betränta=curFakturaKapitalBetalbelopp/(select totalbelopp from #t2 where #t2.lngFakturanr=#t3.lngFakturanr)* (select dröj from #t2 where #t2.lngFakturanr=#t3.lngFakturanr) -- vi lägger till Inkassoränta som betalats under perioden insert into #t3 (intKundnr,intSpecialAdressnr,lngFakturanr,curReskontrabelopp,curFakturaKapitalBetalbelopp,strReskontratyp,betränta) select intKundnr,intSpecialAdressnr,r.lngFakturanr,0,0,'INKR',curReskontrabelopp from tbFuReskontra r inner join tbFuFaktura f on f.lngFakturanr=r.lngFakturanr where strReskontratyp='INKR' and datBetaldatum between @datfrom and @dattom --Nu lägger vi till hela dröj-beloppet för negativa fakturor som reglerats under perioden. insert into #t3 (intKundnr,intSpecialAdressnr,lngFakturanr,curReskontrabelopp,curFakturaKapitalBetalbelopp,strReskontratyp,betränta) select intKundnr,intSpecialAdressnr,lngFakturanr, 0,0,'KRED',dröj from #t2 where curBruttobelopp<0 and lngFakturanr in (select lngFakturanr from tbFuTillgodohavande where datAtgardUtforddatum between @datfrom and @dattom and strOrsak='NEGF') --sumera per kund och specialadressnr i #t4 select intKundnr,intSpecialAdressnr,sum(betränta) as BetaldRänta into #t4 from #t3 group by intKundnr,intSpecialAdressnr --Lägg till fält i #t4 ALTER TABLE #t4 ADD PersOrgnr varchar(12), Namn1 varchar(81), Namn2 varchar(81), Adress varchar(72), Postnr varchar(10), Ort varchar(60) -- Uppdatera ut de utan fakturaadress update #t4 set PersOrgnr=isnull(strPersonnr1,''),Namn1=LTrim(Ltrim(isnull(strFornamn1,'')) + ' ' + Ltrim(isnull(strEfternamn1,''))), Namn2=Ltrim(Ltrim(isnull(strFornamn2,'')) + ' ' + Ltrim(isnull(strEfternamn2,''))),Adress=Ltrim(Ltrim(isnull(strKundadressgata,'')) + ' ' + Ltrim(isnull(str(intKundadressnr),'')) + ' ' + Ltrim(isnull(strKundadressbokstav,''))), Postnr=(isnull(strPostnr,'')),Ort=Ltrim(isnull(strOrt,'')) from #t4 inner join tbFuKund k on k.intKundnr=#t4.intKundnr where intSpecialAdressnr is null -- Uppdatera ut de med fakturaadress update #t4 set PersOrgnr=isnull(strPersonnr,''),Namn1=LTrim(Ltrim(isnull(strFornamn1,'')) + ' ' + Ltrim(isnull(strEfternamn1,''))), Namn2=Ltrim(Ltrim(isnull(strFornamn2,'')) + ' ' + Ltrim(isnull(strEfternamn2,''))),Adress=Ltrim(Ltrim(isnull(strAdressgata,'')) + ' ' + Ltrim(isnull(str(intAdressnr),'')) + ' ' + Ltrim(isnull(strAdressbokstav,''))), Postnr=(isnull(strPostnr,'')),Ort=Ltrim(isnull(strOrt,'')) from #t4 inner join tbFuSpecialadress s on s.intKundnr=#t4.intKundnr and s.intSpecialadressnr=#t4.intSpecialAdressnr where #t4.intSpecialAdressnr is not null --Skriv ut select intKundnr as Kundnr,intSpecialAdressnr as FaktAdressNr,PersOrgnr,Namn1,Namn2,Adress,Postnr,Ort, BetaldRänta from #t4 where BetaldRänta >@minranta order by BetaldRänta desc --SLUT