PROCEDURE Rgdruni( cAuf, edrucker, zdate, textjn, nAnzr, nAnza ) // universelles Rechnungsdruckprogramm fr KSO LOCAL aLeist1 := {}, aLeist2 := {}, aLeist3 := {}, aData1 := {} LOCAL n4 := 4 , n5 := 5, nL123 LOCAL sbetr, grsu, smwsta, smwstb, zae LOCAL z12p := Trim(" "), z14p := Trim(" "), znorm := Trim(" ") nOldArea := Select() ASize( aLeist1, 0 ); ASize( aLeist2, 0 ); ASize( aLeist3, 0 ) nL123 := Leistfill( aLeist1, aLeist2, aLeist3 ) Druckerwahl( edrucker, @z12p, @z14p, @znorm ) SET DEVICE TO PRINTER DO WHILE nAnzr > 0 zae := RKopf( cAuf, zdate, zae, Space(13) ) zae := zae+2 nL1 := Len( aLeist1 ) IF nL1 > 0 aLeist1 := Leistdruck( aLeist1, n4, @zae, "1. Leistungen I:", "Summe Leistungen I" ) ELSE AAdd( aLeist1, 0, 1 ) AAdd( aLeist1, 0, 2 ) ENDIF nL2 := Len( aLeist2 ) IF nL2 > 0 aLeist2 := Leistdruck( aLeist2, n4, @zae, "2. Leistungen II:", "Summe Leistungen II" ) ELSE AAdd( aLeist2, 0, 1 ) AAdd( aLeist2, 0, 2 ) ENDIF zae := Leistzeil( "Leistungen I", 36, W_g, 57, aLeist1[nL1+1], 60, ++zae ) // zae := Leistzeil( cText, nSptext, cW_g, nSpw_g, nWert, nSpwert, zae ) zae := Leistzeil( "+ Leistungen II", 34, W_g, 57, aLeist2[nL2+1], 60, ++zae ) aLeist1[nL1+2] := aLeist2[nL2+2] := aLeist1[nL1+1] + aLeist2[nL2+1] zae := Summzeil( "Gesamtsumme", 36, W_g, 57, aLeist1[nL1+2], 60, ++zae, ; "--------", "========" ) if textjn="j".or.textjn="J" zae := SargProg( zae ) endif EJECT --Anzr ENDDO DO WHILE nAnza > 0 zae := RKopf( cAuf, zdate, zae, "Bestattung: " ) nL1 := Len( aLeist1 ) IF nL1 > 0 aLeist1 := Leistdrucka( aLeist1, n4, @zae, "Rechnung-", "Leistung I" ) ELSE AAdd( aLeist1, 0, 1 ) AAdd( aLeist1, 0, 2 ) ENDIF nL2 := Len( aLeist2 ) IF nL2 > 0 aLeist2 := Leistdrucka( aLeist2, n4, @zae, "Rechnung-", "Leistung II" ) ELSE AAdd( aLeist2, 0, 1 ) AAdd( aLeist2, 0, 2 ) ENDIF AAdd ( aLeist3, ( aLeist1[nL1+1] + aLeist2[nL2+1] ) ) nL3 := Len( aLeist3 ) IF nL3 > 0 aLeist3 := Leistdruck( aLeist3, n4, @zae, ; "In Ihrem Namen und fr Ihre Rechnung verauslagt:", "Gesamtkosten:" ) ELSE AAdd( aLeist3, 0, 1 ) AAdd( aLeist3, 0, 2 ) ENDIF Versfill( aLeist4 ) Versdruck( aLeist4, n4, @zae, "Erhaltene Betrge durch:", "Erhaltener Betrag:" ) nRest := aLeist3[nL3+1] - aLeist4[nL4+1] IF nRest > 0 cText1 := "Gesamtkosten:" cText2 := "- erhaltener Betrag:" cText3 := "Restbetrag:" cText4 := Auftext( nRest ) ELSEIF nRest < 0 cText1 := "erhaltener Betrag:" cText2 := "- Gesamtkosten:" cText3 := "Guthaben:" cText4 := Auftext( nRest ) ELSE cText1 := "erhaltener Betrag:" cText2 := "- Gesamtkosten:" cText3 := "" cText4 := Auftext( nRest ) ENDIF zae := Leistzeil( cText1, 36, W_g, 63, aLeist3[nL3+1], 66, ++zae ) zae := Leistzeil( cText2, 34, W_g, 63, aLeist4[nL4+1], 66, ++zae ) zae := Summzeil( cText3, 36, W_g, 57, nRest, 66, ++zae, ; "--------", "========" ) zae := Textzeil( cText4, 8 ) ENDIF EJECT --nAnza ENDDO SET DEVICE TO SCREEN select 1 if &r_b_1 <> aLeist1[nL1+1] satzsperren() //* aData1 := SatzGet( Select(), RecNo() ) *// IF xdmeu="D" repl &r_b_1 with aLeist1[nL1+1] repl &r_b_1h with aLeist1[nL1+1]/xfaktor ELSE repl &r_b_1 with aLeist1[nL1+1] repl &r_b_1h with aLeist1[nL1+1]*xfaktor ENDIF //* trckng( Select(), RecNo(), aData1 ) *// satzentsperren() endif if &r_b_2 <> aLeist2[nL2+1] satzsperren() //* aData1 := SatzGet( Select(), RecNo() ) *// IF xdmeu="D" repl &r_b_2 with aLeist2[nL2+1] repl &r_b_2h with aLeist2[nL2+1]/xfaktor ELSE repl &r_b_2 with aLeist2[nL2+1] repl &r_b_2h with aLeist2[nL2+1]*xfaktor ENDIF //* trckng( Select(), RecNo(), aData1 ) *// satzentsperren() endif SELECT &nOldArea RETURN //----------------------------------------- FUNCTION Leistdruck4( aLeist, n, zae, cTitel, cSumme ) nLL := Len( aLeist ) AAdd( aLeist, 0, nLL+1 ) AAdd( aLeist, 0, nLL+2 ) AAdd( aLeist, 0, nLL+3 ) AAdd( aLeist, 0, nLL+4 ) @ ++zae,10 say cTitel FOR i := n to ( nLL + 1 ) STEP n @ ++zae,10 say aLeist[i-3] @ zae,57 say w_g @ zae,60 say str( aLeist[i-2],8,2 ) aLeist[nLL+1]=aLeist[nLL+1] + aLeist[i-2] aLeist[nLL+2]=aLeist[nLL+2] + aLeist[i-2] if aLeist[i-1]="3" aLeist[nLL+3]=aLeist[nLL+3] + (aLeist[i-2] / (100+zschl_voll) * zschl_voll) endif if aLeist[i-1]="2" aLeist[nLL+4]=aLeist[nLL+4] + (aLeist[i-2] / (100+zschl_halb) * zschl_halb) endif NEXT @ ++zae,60 say "--------" @ ++zae,30 say cSumme @ zae,57 say w_g @ zae++,60 say str( aLeist1[nL1+1],8,2 ) RETURN aLeist FUNCTION Leistdruck5( aLeist, n, zae, cTitel, cSumme ) nLL := Len( aLeist ) AAdd( aLeist, 0, nLL+1 ) AAdd( aLeist, 0, nLL+2 ) AAdd( aLeist, 0, nLL+3 ) AAdd( aLeist, 0, nLL+4 ) FOR i := n to ( nLL + 1 ) STEP n @ ++zae,10 say "Rechnung-"+aLeist[i-4]+"-"+aLeist[i-3] @ zae,63 say w_g @ zae,66 say str( aLeist[i-2],8,2 ) aLeist[nLL]=aLeist[nLL] + aLeist[i-2] NEXT @ ++zae,66 say "--------" @ ++zae,30 say cSumme @ zae,57 say w_g @ zae++,66 say str( aLeist[nLL],8,2 ) RETURN aLeist FUNCTION Versdruck( aLeist, n, zae, cTitel, cSumme ) nLL := Len( aLeist ) AAdd( aLeist, 0, nLL+1 ) @ ++zae,10 say cTitel FOR i := n to ( nLL + 1 ) STEP n @ ++zae,10 say aLeist[i-1] @ zae,63 say w_g @ zae,66 say str( aLeist[i],8,2 ) aLeist[nLL+1]=aLeist[nLL+1] + aLeist[i] NEXT @ ++zae,66 say "--------" @ ++zae,30 say cSumme @ zae,63 say w_g @ zae++,66 say str( aLeist1[nL1+1],8,2 ) RETURN aLeist FUNCTION Druckerwahl( edrucker, z12p, z14p, znorm ) select 20 use drubef edrucker=upper(edrucker) if edrucker="E" c27 := IIf( ep12p<>" ", chr(27), Trim(" ") ) z12p=c27+trim(ep12p) z14p=c27+trim(ep14p) znorm=c27+trim(epnorm) else z12p=chr(27)+trim(hp12p) z14p=chr(27)+trim(hp14p) znorm=chr(27)+trim(hpnorm) endif USE RETURN (edrucker) FUNCTION Leistfill( aLeist1, aLeist2, aLeist3 ) nOldArea := Select() SELECT 3 ASize( aData1, FCount() ) FIND &cAuf DO WHILE 3->Auftrnr == Val( cAuf ) .AND. .NOT. Eof() DO CASE CASE 3->rn == " " AAdd( aLeist1, 3->bezeich, Val(3->zeile)*n4-3 ) AAdd( aLeist1, 3->&b_g, Val(3->zeile)*n4-2 ) AAdd( aLeist1, 3->mwst_schl, Val(3->zeile)*n4-1 ) AAdd( aLeist1, 3->rn, Val(3->zeile)*n4 ) CASE 3->rn == "2" AAdd( aLeist2, 3->bezeich, Val(3->zeile)*n4-3 ) AAdd( aLeist2, 3->&b_g, Val(3->zeile)*n4-2 ) AAdd( aLeist2, 3->mwst_schl, Val(3->zeile)*n4-1 ) AAdd( aLeist2, 3->rn, Val(3->zeile)*n4 ) CASE 3->rn == "3" AAdd( aLeist3, 3->bezeichf1, Val(3->zeile)*n5-4 ) AAdd( aLeist3, 3->bezeichf2, Val(3->zeile)*n5-3 ) AAdd( aLeist3, 3->&b_g, Val(3->zeile)*n5-2 ) AAdd( aLeist3, 3->mwst_schl, Val(3->zeile)*n5-1 ) AAdd( aLeist3, 3->rn, Val(3->zeile)*n5 ) ENDCASE SKIP ENDDO SELECT &nOldArea RETURN ( Len( aLeist1 ) + Len( aLeist2 ) + Len( aLeist3 ) ) FUNCTION Versfill( aLeist4 ) nOldArea := Select() SELECT 2 FIND &cAuf DO WHILE 2->Auftrnr == Val( cAuf ) .AND. .NOT. Eof() AAdd( aLeist4, 2->abrname ) AAdd( aLeist4, 2->&b_b_g ) SKIP ENDDO SELECT &nOldArea RETURN ( Len( aLeist4 ) ) FUNCTION RKopf( cAuf, zdate, zae, cTitel ) LOCAL nOldArea := Select() SELECT 1 find &cAuf @ zae,8 say ansp_anr @ ++zae,8 say trim(ansp_vname) + " " + ansp_name @ ++zae,8 say ansp_str ++zae @ ++zae,8 say ansp_ort @ ++zae,55 say cAuf + " / " + zdate @ ++zae,8 say z12p+cTitel+trim(anrede)+" "+trim(vorname)+ " "+name zae=zae+1 @ ++zae,8 say znorm+" " SELECT &nOldArea RETURN ( zae ) PROCEDURE SargProg( zae ) LOCAL nOldArea := Select() select 9 use ksotexte ++zae @ ++zae,12 say rtext1 @ ++zae,12 say rtext2 @ ++zae,12 say rtext3 @ ++zae,12 say rtext4 @ ++zae,12 say rtext5 @ ++zae,12 say rtext6 @ ++zae,12 say rtext7 @ ++zae,12 say rtext8 @ ++zae,12 say rtext9 use SELECT &nOldArea RETURN ( zae ) FUNCTION Leistzeil( cText, nSptext, cW_g, nSpw_g, nWert, nSpwert, zae ) @ zae,nSptext say cText @ zae,nSpw_g say cW_g @ zae,nSpwert say str( nWert,8,2 ) RETURN ( ++zae ) FUNCTION Summzeil( cText, nSptext, cW_g, nSpw_g, nWert, nSpwert, zae, ; cOben, cUnten ) @ zae++,nSpwert say cOben zae := Leistzeil( cText, nSptext, cW_g, nSpw_g, nWert, nSpwert, zae ) @ zae,nSpwert say cUnten RETURN ( ++zae )