cTN004 ;Functies ivm saldo rekeningen ;cTN004 ; [ 01/12/09 15:30:14 ] ; T1 ; ; T1F ; ; T1E ; ; YZ Q ; SALDO(Q,UI1R,MT,TYPE,SW) ; Saldo van rekening aan de hand van ^DBH ; Input: Q: Firma ; UI1R: UI1 rekening ; Indien samengesteld: UI1's, gescheiden door "\" ; MT: Boekingsmaand JJJJ.MM ; Opmerkingen: ; - Indien geen maand doorgegeven: huidig saldo rekening ; - Indien SW=4: van en tot maand doorgeven, gescheiden door "\" ; - Indien SW=3/5: boekjaar doorgeven (BJJJ) ; TYPE: Type rekening ; --- ENKELVOUDIG ---- ; AR.A,"" of onbestaand: Grootboekrekening ; ARA.A: Analytische rekening ; KL.A: Klantenrekening ; LE.A: Leveranciersrekening ; EC1: Extra comptabele code 1 ; EC2: Extra comptabele code 3 ; EC3: Extra comptabele code 3 ; --- SAMENGESTELD --- ; AR.ARA: Combinatie Grootboekrek.-Analytische rek. ; AR.EC1: Combinatie Grootboekrek.-EC1-code ; AR.EC2: Combinatie Grootboekrek.-EC3-code ; AR.EC3: Combinatie Grootboekrek.-EC2-code ; --- OPMERKINGEN----- ; Indien type = AR.ARA en enkel grootboekrekening wordt doorgegeven, ; wordt het saldo van de grootboekrekening bepaald aan de hand van ; de samgenstelde cumul. ; -------------------- ; SW: 0,"" of onbestaand: saldo bij begin van de maand ; 1: saldo op het eind van de maand ; 2: saldo van doorgegeven maand ; 3: beginsaldo ; 4: saldo's van tot-maand ; 5: beginsaldo afgesloten jaar (=0 indien opgevraagd voor een niet afgesloten boekjaar) ; 6: saldo bij het begin van de maand binnen het boekjaar ; 7: saldo bij het eind van de maand binnen het boekjaar ; 8: beginsaldo, bij openstaande BJ geen rekening houden met W/V-rekeningen ; ; Output: Indien SW = ; 0,1,2,3,5,6,7,8 : Saldo rekening ; 4 : Saldi, gescheiden door "\" ; xDC : Saldo rekening in de vorm Debet#Credit ; xOMZ : Saldo gebaseerd op omzet-cijfers ipv cumul-cijfers ; xVM : Saldo in vreemde munt (=munt rekening, enkel mogelijk voor grootboekrek.) ; xG : Geboekt op deze rekening(en)? (0 of 1) ; xBUD : Saldo gebaseerd op budget-cijfers ipv cumul-cijfers ; ; S $ZT="TRAP^cAN000" N (Q,UI1R,MT,TYPE,SW) ; ; Controle parameters SALDO1 S DC=$S($L($G(SW),"DC")=2:1,1:0),OMZ=$S($L($G(SW),"OMZ")=2:1,1:0),SALDO=$S(DC:"0#0",1:0) S VM=$S($L($G(SW),"VM")=2:1,1:0),GEB=$S($L($G(SW),"G")=2:1,1:0),BUD=$S($L($G(SW),"BUD")=2:1,1:0) S SW=+$G(SW),TYPE=$S($L($G(TYPE)):TYPE,1:"AR.A"),D="\" I '$L($G(Q))!'$L($G(UI1R)) G SALDOZ D Q1^cAFA10("REG") S TYPE=$TR($P(TYPE_" ",".A ")," "),DMS=$S(BUD:"BUD.",1:"CUM.")_TYPE S:$P(DMS,".",2,3)="AR.ARA" DMS=$P(DMS,".") ; "BUD" of "CUM" in geval van combinatie grootboekrek-analytische rek. S SCUM=($L(TYPE,".")>1) ;I SCUM,(DMS'="CUM"),($L(UI1R,D)'>1) G SALDOZ ; Samengestelde cumul? I VM S:($P(TYPE,".")'="AR") VM=0 I VM I $$SIG^cAFA1("AR.A",$P(UI1R,D),111)=$$PAR^cTN001(Q,202) S VM=0 ; Vreemde munt enkel bij AR en indien munt AR <> munt BH S BCUM=($E(TYPE,1,2)'="EC") I (TYPE="AR.A"!SCUM),'$$PAR^cTN001(Q,518) S BCUM=0 ; Beginsaldo op extracomptabele rekenening ondersteund? ; ; Beginmaand bepalen SALDO2 I SW=2 S BMT=MT G SALDO3 I SW=8 S SW=3,SKIPVW=1 I SW=3 S:$L(MT)>4 MT=$$BJ^cTN003(.Q,MT) G:'MT SALDOX S MT=$$BM^cTN003(.Q,MT) I SW=4 S BMT=$P(MT,D),MT=$P(MT,D,2) G SALDO3 I SW=5 S BMT=MT G SALDO5 SALDO25 I '$L($G(MT)) S MT=$$JBM^cTN003(.Q) I 'SW S SW=1 ; Jongst openstaand maand S BMTJ=$$BJ^cTN003(.Q,MT) G:'BMTJ SALDOX ; Boekjaar gevraagde maand S BMT=$$BM^cTN003(.Q,BMTJ) ; Beginmaand is eerste maand van het boekjaar I 'BCUM!(SW=6)!(SW=7)!OMZ!BUD G SALDO29 ; Geen beginsaldi I $P(TYPE,".")="AR",'$G(SKIPVW),$$VW(UI1R) G SALDO29 ; V/W rekening (saldo begint elk jaar vanaf 0) S BJ=$$SIG^cAFA1("Q",Q,209)+1 I BJMT G SALDO5 I $P(BM,".",2)>12 S BM=BM+.88 S BM=$E(BM_"0",1,7) I SW=4 S PC=$G(PC)+1 ; ; Via enkelvoudige cumul SALDO42 I DMS="CUM"!SCUM G SALDO43 S UI1=Q49_" "_$TR(BM,".")_" "_UI1R I '$D(@UREF) G SALDO49 S INH=^(UI1,0) D CUM I GEB S (SALDO,SALDI)=1 G SALDOY G SALDO49 ; ; Via samengestelde cumul SALDO43 I '$L($G(BJMT)) S BJMT=$$BJ^cTN003(.Q,MT) S SWVW=(SW=3) I (SW<2) I $$BJ^cTN003(.Q,BM)'=BJMT S SWVW=1 ; ; << Analytische rekening >> SALDO44 S I3="" I SCUM G SALDO47 SALDO45 S I3=$O(@IREF@("M1",Q49,$TR(BM,"."),UI1R,I3)) I '$L(I3) G SALDO49 S UI1=$P(^(I3),D) S INH=@UREF@(0) I SWVW I $$VW($P(INH,D,3)) G SALDO49 ; Saldo op een W/V rekening niet meenemen D CUM I GEB S (SALDO,SALDI)=1 G SALDOY G SALDO45 ; ; << Combinatie rekeningen >> SALDO47 S (UI1,ST)=Q49_" "_$TR(BM,".")_" "_$TR($P(UI1R,D,1,$L(UI1R,D)),D," ") I GEB,($L(UI1R,D)=1) S UI1=UI1_" 0" G SALDO48 ;S (UI1,ST)=Q49_" "_$TR(BM,".")_" "_$TR($P(UI1R,D,1,3-$E(TYPE,2)),D," ") I $P(DMS,".")="BUD" G:$D(@UREF) SALDO485 G SALDO49 ; UI1 is reeds volledig samengesteld SALDO48 S UI1=$O(@UREF) I $P(UI1," ",1,2+$L(UI1R,D))'=ST G SALDO49 SALDO485 S INH=^(UI1,0) I $P(INH,D,30) G SALDO48 ; Verwijderd of buiten gebruik I SWVW I $$VW($P(INH,D,3)) G SALDO49 ; Saldo op een W/V rekening niet meenemen D CUM I GEB,$L($P(UI1," ",4)) S (SALDO,SALDI)=1 G SALDOY G:$P(DMS,".")="BUD" SALDO49 G SALDO48 ; SALDO49 G SALDO41 ; ; *** Beginsaldo ****************************************************** ; ; Beginsaldo (via enkelvoudige cumul) SALDO5 I 'BCUM!(SW=2)!(SW=6)!(SW=7)!OMZ!BUD G SALDOX S BSBJ=$S($L(BMT)=4:BMT,1:$$BJ^cTN003(.Q,BMT)) G:TYPE="ARA" SALDO6 G:SCUM SALDO65 I GEB S (SALDO,SALDI)=1 G SALDOY S SALDO=SALDO+$$SIG^cAFA1("BEG."_TYPE,$$Q^cAFA10_" "_BSBJ_" "_UI1R,103+VM) G SALDOX ; ; Beginsaldo (via samengestelde cumul): << Analytische rekening >> SALDO6 S REF=$$REF^cAFA10(.Q,"BEG","M1"),UREF=$P(REF,D),IREF=$P(REF,D,3),I3="" I '$L(UREF)!'$L(IREF) G SALDOX SALDO63 S I3=$O(@IREF@(Q49,BSBJ,UI1R,I3)) I '$L(I3) G SALDOX I GEB S (SALDO,SALDI)=1 G SALDOY S UI1=$P(^(I3),D) S SALDO=SALDO+$P(@UREF@(0),D,11+(VM*2)) G SALDO63 ; ; Beginsaldo (via samengestelde cumul): << Combinatie rekeningen >> SALDO65 S UREF=$P($$REF^cAFA10(.Q,$$REPL^cAFA10(DMS,"CUM","BEG")),D) I '$L(UREF) G SALDOX S (UI1,ST)=Q49_" "_BSBJ_" "_$TR($P(UI1R,D,1,$L(UI1R,D)),D," ") G SALDO68 SALDO67 S UI1=$O(@UREF) I $P(UI1," ",1,2+$L(UI1R,D))'=ST G SALDOX SALDO68 S INH=$G(@UREF@(0)) I '$L(INH)!$P(INH,D,30) G SALDO69 ; Verwijderd of buiten gebruik I GEB S (SALDO,SALDI)=1 G SALDOY S SALDO=SALDO+$P(@UREF@(0),D,11+(VM*2)) SALDO69 G SALDO67 ; SALDOX I GEB S (SALDO,SALDI)=0 SALDOY D Q2^cAFA10 ; SALDOZ Q $S($G(SW)=4:$G(SALDI),1:SALDO) ; ; SALDOF(Q,UI1R,MT,TYPE,PAR) ; Saldo van rekening met filter op type registratie (loopt alle registraties af) ; Input: Q: Firma ; UI1R: UI1 rekening ; MT: Boekingsmaand JJJJ.MM van en tot maand doorgeven, gescheiden door "\" ; TYPE: Type rekening ; AR.A,"" of onbestaand: Grootboekrekening ; ARA.A: Analytische rekening ; KL.A: Klantenrekening ; LE.A: Leveranciersrekening ; EC1: Extra comptabele code 1 ; EC2: Extra comptabele code 3 ; EC3: Extra comptabele code 3 ; PAR: Parameters gescheiden door "\" ; 1. Filter op type registatie gescheiden door ";" (A;V;F;D;AD) ; (indien filter leeg = alle registraties -> oproepen functie $$SALDO) ; 2. DC = 0 of leeg: saldo ; 1 : Debet#Credit ; 3. 0 of "": munt boekhouding : indien $p(PAR,D)="" dan is dit steeds in mnt BH en NOOIT in munt rekening ; 1 : munt van de rekening ; ; Output: Saldo van de rekening of Debet#Credit van de rekening (doorgegeven maanden gescheiden door "\") ; (Afhankelijk van $P(PAR,D,3)) ; ; N oQ,FILTER,MULTI,BMT,EMT,REF,UREF,IREF,UI1REG,Q49,DEBET,CREDIT,MND,DOCDAT,VNR,UI1REG,INH,PC,SALDO,i S $ZT="TRAP^cAN000" f i="UI1R","MT","TYPE","PAR" I '$L($G(@i)) S @i="" I '$L($G(Q))!'$L(UI1R) G SALDOFZ S TYPE=$S($L(TYPE):TYPE,1:"AR.A") S BMT=$P(MT,D),EMT=$P(MT,D,2) I '$L(EMT) S EMT=BMT ; Controleren of niet alle types registraties worden gevraagd SALDOFA I '$L($P($G(PAR),D)) S SALDO=$$SALDO(Q,UI1R,BMT_D_EMT,TYPE,"4"_$S('$P($G(PAR),D,2):"",1:"DC")) G SALDOFZ ; Controleren parameters SALDOFB S SALDO="" S FILTER=$P($G(PAR),D) ; Bepalen multiple adhv type rekening SALDOFC S MULTI=$S(TYPE="AR.A":"M3",TYPE="ARA.A":"M4",TYPE="EC1":"M5",TYPE="EC2":"M6",TYPE="EC3":"M7",TYPE="KL.A":"M8",TYPE="LE.A":"M9",1:"") I MULTI="" G SALDOFZ ; Ophalen definities registraties SALDOFD D Q1^cAFA10("REG") S REF=$$REF^cAFA10(.Q,"REG"),UREF=$P(REF,D),IREF=$P(REF,D,3) I '$L(UREF)!'$L(IREF) G SALDOFY S UREF=$$REPL^cAFA10(UREF,"UI1","UI1REG") S Q49=$$Q^cAFA10() ; ; Aflopen registaties via juiste multiple SALDOFE S MND=BMT-.01 SALDOFG S MND=MND+.01 I MND>EMT G SALDOFY S DEBET="",CREDIT="" I $P(MND,".",2)>12 S MND=MND+.88 S MND=$E(MND_"0",1,7) S PC=$G(PC)+1 S $P(SALDO,D,PC)="" S DOCDAT="" SALDOFH S DOCDAT=$O(@IREF@(MULTI,Q49,UI1R,$TR(MND,".",""),DOCDAT)) I DOCDAT="" S $P(SALDO,D,PC)=$S('$P($G(PAR),D,2):DEBET-CREDIT,1:DEBET_"#"_CREDIT) G SALDOFG S VNR="" SALDOFI S VNR=$O(@IREF@(MULTI,Q49,UI1R,$TR(MND,".",""),DOCDAT,VNR)) I VNR="" G SALDOFH S UI1REG="" SALDOFJ S UI1REG=$O(@IREF@(MULTI,Q49,UI1R,$TR(MND,".",""),DOCDAT,VNR,UI1REG)) I UI1REG="" G SALDOFI ; Testen of registatie behoort tot filter I (U_FILTER_U)'[(U_$P(UI1REG," ")_U) G SALDOFJ S INH=@UREF@(0) S DEBET=DEBET+$P(INH,D,$S('$P($G(PAR),D,3):15,1:17)) S CREDIT=CREDIT+$P(INH,D,$S('$P($G(PAR),D,3):16,1:18)) G SALDOFJ ; SALDOFY D Q2^cAFA10 SALDOFZ Q SALDO ; ; ******************************************************************************* ; A L T E R N A T I E V E I N G A N G E N ; ******************************************************************************* ; ; BUDGET(Q,UI1R,MT,TYPE,SW) ; Enkelvoudig budget op grootboekrek. of analytische rekening ; Input: zie SALDO ; Output: zie SALDO ; ; Opmerkingen: ; TYPE: Enkel AR.A of ARA.A ; SW: Enkel 0,1,2,4,6 en 7 zijn beschikbaar ; S $ZT="TRAP^cAN000" N (Q,UI1R,MT,TYPE,SW) ; ; Enkel voor grootboekrek./analytische rekening BUDGET1 S BUD=0 I ($G(TYPE)'="AR.A"),($G(TYPE)'="ARA.A") G BUDGETZ ; ; Budget opvragen BUDGET2 S BUD=$$SALDO(.Q,$G(UI1R),$G(MT),$G(TYPE),$G(SW)_"BUD") ; BUDGETZ Q BUD ; BUDGETC(Q,AR,EC,TYPE,MT,SW) ; Samengesteld budget op combinatie rekeningen ; Input: Q: Firma ; AR: Grootboekrekening ; EC: Extra comptabele rekening (AR.A of EC*) ; TYPE: AR.ARA of "": Combinatie Grootboekrek.-Analytische rek. ; AR.EC1: Combinatie Grootboekrek.-EC1-code ; AR.EC2: Combinatie Grootboekrek.-EC3-code ; AR.EC3: Combinatie Grootboekrek.-EC2-code ; MT: Zie SALDO ; SW: Zie SALDO ; ; Output: zie SALDO S $ZT="TRAP^cAN000" N (Q,AR,EC,TYPE,MT,SW) ; ; Combinatie rekeningen samenstellen BUDGETC1 S TYPE=$G(TYPE) I '$L(TYPE) S TYPE="AR.ARA" S UI1R=$G(AR)_"\"_$G(EC) ; BUDGETCZ Q $$SALDO(.Q,UI1R,$G(MT),$G(TYPE),$G(SW)_"BUD") ; OMZET(Q,UI1R,MT,TYPE,SW) ; Omzet van klant/leverancier ; Input: zie SALDO ; Output: zie SALDO ; ; Opmerkingen: ; TYPE: Enkel KL.A of LE.A (geen AR.A of ARA.A) ; SW: Enkel 0,1,2,4,6 en 7 zijn beschikbaar ; S $ZT="TRAP^cAN000" N (Q,UI1R,MT,TYPE,SW) ; ; Enkel voor klant/leverancier OMZET1 S OMZ=0 I ($G(TYPE)'="KL.A"),($G(TYPE)'="LE.A") G OMZETZ ; ; Omzet opvragen OMZET2 S OMZ=$$SALDO(.Q,$G(UI1R),$G(MT),$G(TYPE),$G(SW)_"OMZ") ; OMZETZ Q OMZ ; SALDOC(Q,AR,EC,TYPE,MT,NIV,SW) ; Samengesteld saldo op combinatie rekeningen ; Input: Q: Firma ; AR: Grootboekrekening ; EC: Extra comptabele rekening (AR.A of EC*) ; TYPE: AR.ARA of "": Combinatie Grootboekrek.-Analytische rek. ; AR.EC1: Combinatie Grootboekrek.-EC1-code ; AR.EC2: Combinatie Grootboekrek.-EC3-code ; AR.EC3: Combinatie Grootboekrek.-EC2-code ; MT: Zie SALDO ; NIV: Niveau ; "",0: Combinatie rekeningen ; 1: Tot op grootboekrekening-niveau (enkel bij AR.ARA) ; SW: Zie SALDO ; ; Output: zie SALDO S $ZT="TRAP^cAN000" N (Q,AR,EC,TYPE,MT,NIV,SW) ; ; Combinatie rekeningen samenstellen SALDOC1 S TYPE=$G(TYPE) I '$L(TYPE) S TYPE="AR.ARA" S UI1R=$G(AR) I '$G(NIV)!(TYPE'="AR.ARA") S UI1R=UI1R_"\"_$G(EC) ; SALDOCZ Q $$SALDO(.Q,UI1R,$G(MT),$G(TYPE),$G(SW)) ; ; ******************************************************************************* ; H U L P F U N C T I E S ; ******************************************************************************* ; ; Cumul verwerken CUM ; ; Kan aangeroepen worden voor enkelvoudige cumuls (CUM.AR,CUM.KL,...) als ; voor de samengestelde cumuls (CUM,CUM.AR.EC1,...) ; I $P(INH,D,30) G CUMZ ; Verwijderd of buiten gebruik ; ; Omzet I OMZ D Q . S SALDO=SALDO+$P(INH,D,10) . S:SW=4 $P(SALDI,D,PC)=SALDO,SALDO=0 ; Saldo I 'DC D Q . S SALDO=SALDO+$P(INH,D,11+(VM*2))-$P(INH,D,12+(VM*2)) . S:SW=4 $P(SALDI,D,PC)=SALDO,SALDO=0 ; Debet#Credit S $P(SALDO,"#")=$P(SALDO,"#")+$P(INH,D,11+(VM*2)) S $P(SALDO,"#",2)=$P(SALDO,"#",2)+$P(INH,D,12+(VM*2)) S:SW=4 $P(SALDI,D,PC)=SALDO,SALDO=0 ; CUMZ Q ; VW(UI1) ; Verlies/Winst-rekening? ; Input: UI1: Grootboekrekening ; ; Opmerking: UREFAR wordt om performantie-redenen NIET genewed. ; (indien meerdere keren aangeroepen bij het bepalen van het saldo ; van een analytische rekening) ; S $ZT="TRAP^cAN000" N VW,R ; ; UREF ophalen van grootboekrekening VW1 S UI1=$P(UI1,D) S:'$L($G(UREFAR)) UREFAR=$P($$REF^cAFA10(.Q,"AR.A"),D) I '$L(UREFAR) S R=0 G VWZ ; ; Verlies/Winst? VW2 S VW=$P($G(@UREFAR@(0)),D,13) S R=(VW=2)!(VW=3) ; VWZ Q R ; ; ZZ ; 17.03.09 - 15 u 59 * V9.05