*Kontenblatt
#main

*--------------------------------------------------
* Variablen:
* Zeile     aktuelle Zeilenummer
* ZlStart1  Zeilenvorschuebe nach Kopf auf Seite 1
* ZlStart2  Zeilenvorschuebe nach Kopf ab  Seite 2
* cyKD      Zeilenvorschuebe nach dem Dateikopf
* ZlMax     Zeile ab der der Fussbereich beginnt
* Seite     Seitennummer beginnend mit 1
* RandX     linker Rand in cm
* RandY     oberer Rand in cm
* SizeX     Druckbreite ab Rand links
*--------------------------------------------------
VAR Zeile(s,2,0)
VAR ZlMax(s,2,0)
VAR Seite(s,2,0)
VAR RandX(d,8,2)
VAR RandY(d,8,2)
VAR SizeX(d,8,2)
VAR Heute(D,10,0)
VAR cyZeile(d,8,6)

ZlMax=     60
RandX=      0,80
RandY=      0,60
SizeX=      27,5
Seite=      1
Zeile=      0
cyZeile= 2,54/8

Heute=H
IFNOT ISVAR(Zeitraum)
  VAR Zeitraum(u,8,0)
IFNOT ISVAR(FilterLen)
  VAR FilterLen(N,2,0)
IFNOT ISVAR(Titel)
  VAR Titel(C,50,0)
IFNOT ISVAR(FltTyp)
  VAR FltTyp(u,1,0)
IFNOT ISVAR(FltKtoVon)
  VAR FltKtoVon(u,8,0)
IFNOT ISVAR(FltKtoBis)
  VAR FltKtoBis(u,8,0)

REC recOPT(OPTIONEN,0,5) 7008
REC recFSAD(EIGENE_ANSCHRIFTEN,0,2)01
REC recMainKTO(KONTENPLAN,0,1)$[FltTyp<1]
SEEK recMainKTO($[FltKtoVon])

OUT INITPAGESIZE
OUT STARTJOB $[Titel] $[Heute]
OUT TRANSPARENT
LOOP recMainKTO(#loopMainKTO)
OUT ENDJOB



#end

#CheckPage
* Fussbereich ausgeben, wenn letzte Zeile erreicht
IF BOOL($[Zeile] >= $[ZlMax])
   SUB #Fuss
* Kopfbereich ausgeben, wenn erste Zeile erreicht
IF BOOL($[Zeile] = 0)
   SUB #Kopf

#end

#Fuss
Zeile=$[ZlMax]
OUT ##FussSeite
OUT ENDPAGE
* naechste Seite anfangen
Seite=$[Seite]+1
Zeile=0

OUT STARTPAGE
*OUT DEVICE A4Quer
OUT CALCBORDER
OUT XOFFSET 0
OUT YOFFSET 0

#end

#Kopf
OUT ##KopfSeite
OUT ##KopfDetail
* OUT ##Uebertrag

#end

##KopfSeite
CY=2
L= 0;0;85;1;Times New Roman,10,F;$[recFSAD.NAME1] $[recFSAD.NAME2], $[recFSAD.STRASSE], $[recFSAD.PLZORT]
R=85,0;0,0;15,0;1,0;Arial,10,N;$[Heute]
L=0,0;1,2;85,0;1,0;Times New Roman,12,F;$[recMainKTO.Konto] - $[recMainKTO.Name] / Filter $[Zeitraum] - $[FilterLen]
R=85,0;1,2;15,0;1,0;Arial,10,N;-$[Seite]-

#end

##KopfDetail
CY=4
L=0;0,8;100;1; ;\-

L= 0,0;1,4;6,0;1,0;Arial, 8,F;Journal Nr.
L= 6,0;1,4;5,0;1,0;Arial, 8,F;Gebucht
L=11,0;1,4;5,0;1,0;Arial, 8,F;Erfasst
L=16,0;1,4;8,0;1,0;Arial, 8,F;Vorgangs Nr.
L=24,0;1,4;6,0;1,0;Arial, 8,F;Beleg Nr.
L=30,0;1,4;8,0;1,0;Arial, 8,F;Externe Beleg Nr.
L=38,0;1,4;5,0;1,0;Arial, 8,F;B-Datum
L=43,0;1,4;5,0;1,0;Arial, 8,F;Fällig
L=48,0;1,4;13,0;1,0;Arial, 8,F;Buchungstext
L=61,0;1,4; 6,0;1,0;Arial, 8,F;Projekt
L=67,0;1,4; 6,0;1,0;Arial, 8,F;KTR
L=73,0;1,4; 4,0;1,0;Arial, 8,F;KST
L=77,0;1,4; 4,0;1,0;Arial, 8,F;Konto
L=81,0;1,4; 5,0;1,0;Arial, 8,F;UStVA

R=86,0;1,4; 7,0;1,0;Arial, 8,F;Soll
R=93,0;1,4; 7,0;1,0;Arial, 8,F;Haben

L=0;2;100;1; ;\-

L=77,0;3; 9,0;1,0;Arial, 8,F;alter Saldo
R=86,0;3; 7,0;1,0;Arial, 8,F;$[mcsSoll]
R=93,0;3; 7,0;1,0;Arial, 8,F;$[mcsHaben]

#end

##Linie
* TODO: beschreiben Sie hier die Verwendung
CY=1
L=0;0;100;1; ;\-

#end

##FussSeite
CY=3
L=0;0;100;1; ;\-

L=0,0;1,0;15,0;1,0;Arial, 8,N;Liste Nr. 1019

L=77,0;1; 9,0;1,0;Arial, 8,F;neuer Saldo
R=86,0;1; 7,0;1,0;Arial, 8,F;$[mcsSoll]
R=93,0;1; 7,0;1,0;Arial, 8,F;$[mcsHaben]

L=0;2;100;1; ;\-

#end

##outloopZlTrn
* Ausgabe für ReportMain/loopBBZeile/loopZlTrn
CY=1

L=48,0;0;13,0;1,0;Arial, 8,N;$[recZlTrn.Text]
L=61,0;0; 6,0;1,0;Arial, 8,N;$[recZlTrn.PrjNr]
L=67,0;0; 6,0;1,0;Arial, 8,N;$[recZlTrn.Ktr]
L=73,0;0; 4,0;1,0;Arial, 8,N;$[recZlTrn.Kst]
L=77,0;0; 4,0;1,0;Arial, 8,N;$[recZlTrn.Konto]
L=81,0;0; 2,0;1,0;Arial, 8,N;$[mcUSTKZ]
L=83,0;0; 3,0;1,0;Arial, 8,N;$[recUstKZ.UstSpalte]
R=86,0;0; 7,0;1,0;Arial, 8,N;$[mcSoll]
R=93,0;0; 7,0;1,0;Arial, 8,N;$[mcHaben]

#end

##outFirstRec
* Ausgabe für ReportMain/loopBBZeile/loopZlTrn/subFirstRec
CY=0

R= 0,0;0;5,0;1,0;Arial, 8,N;$[mcJnlLine]
L= 6,0;0;5,0;1,0;Arial, 8,N;$[recZlTrn.Tag<2].$[recZlTrn.Monat<2].$[recZlTrn.Jahr>2]
L=11,0;0;5,0;1,0;Arial, 8,N;$[recZlTrn.StatusDate<6]$[recZlTrn.StatusDate>2]
L=16,0;0;8,0;1,0;Arial, 8,N;$[recZlTrn.Vorgang]
L=24,0;0;6,0;1,0;Arial, 8,N;$[recZlTrn.BelNr]
L=30,0;0;8,0;1,0;Arial, 8,N;$[recZlTrn.BelNrExt]
L=38,0;0;5,0;1,0;Arial, 8,N;$[recZlTrn.BelDatum<6]$[recZlTrn.BelDatum>2]

#end

#subFirstRec
* Unterprogramm von ReportMain/loopBBZeile/loopZlTrn

VAR mcJnlLine(u,8,0)
IF BOOL(($[recZlTrn.JnlLine]) > (0))
  mcJnlLine=$[recZlTrn.JnlLine>8]

OUT ##outFirstRec
RETURN

#end

##outPerson
* Ausgabe für ReportMain/loopBBZeile/loopZlTrn/subPerson
CY=0
L=43,0;0;5,0;1,0;Arial, 8,N;$[recZlTrn.FTag<2].$[recZlTrn.FMonat<2].$[recZlTrn.FJahr>2]


#end

#subPerson
* Unterprgramm von ReportMain/loopBBZeile/loopZlTrn
OUT ##outPerson
RETURN

#end

##outBelegNr
* Ausgabe für ReportMain/loopBBZeile/loopZlTrn/subGeld
CY=0
L=24,0;0;6,0;1,0;Arial, 8,N;$[recZlTrn.BelNr]

#end

#subGeld
* Unterprgramm von ReportMain/loopBBZeile/loopZlTrn
IF BOOL(($[mZlPrt]) = (0))
   RETURN

OUT ##outBelegNr
RETURN

#end

##outloopZlThis
* Ausgabe für ReportMain/loopMainKTO/loopBBZeile/loopZlTrn
CY=1

L=48,0;0;13,0;1,0;Arial, 8,F;$[recZlTrn.Text]
L=61,0;0; 6,0;1,0;Arial, 8,F;$[recZlTrn.PrjNr]
L=67,0;0; 6,0;1,0;Arial, 8,N;$[recZlTrn.Ktr]
L=73,0;0; 4,0;1,0;Arial, 8,N;$[recZlTrn.Kst]
L=77,0;0; 4,0;1,0;Arial, 8,N;$[recZlTrn.Konto]
L=81,0;0; 2,0;1,0;Arial, 8,N;$[mcUSTKZ]
L=83,0;0; 3,0;1,0;Arial, 8,N;$[recUstKZ.UstSpalte]
R=86,0;0; 7,0;1,0;Arial, 8,F;$[mcSoll]
R=93,0;0; 7,0;1,0;Arial, 8,F;$[mcHaben]

#end

#loopZlTrn
* Unterprgramm von ReportMain/loopBBZeile
* Datensatzschleife recZlTrn
* druckt alle Sätze der Transaktion, 
* die sich nicht auf das Buchblattkonto beziehen

IF BOOL(($[recZlTrn.Soll] = 0) & ($[recZlTrn.Haben] = 0))
   RETURN

REC recKtoTrn(KONTENPLAN,0,9)$[recZlTrn.Typ<1]$[recZlTrn.Konto<8]
REC recUstFall(USTFALLSPALTE,0,7)$[recKtoTrn.UstSpalte<3]$[recZlTrn.Jahr<4]
REC recUstKZ(ELSTER,0,7)$[recUstFall.Jahr<4]$[recUstFall.UstSpalte]
VAR mcSoll(C,12,0)
VAR mcHaben(C,12,0)
VAR mcUSTKZ(C,2,0)

IF BOOL(($[recZlTrn.Soll]) <> (0))
   mcSoll=$[recZlTrn.Soll]
IF BOOL(($[recZlTrn.Haben]) <> (0))
   mcHaben=$[recZlTrn.Haben]
IF BOOL(($[recUstKZ.KZ]) <> (0))
  mcUSTKZ=$[recUstKZ.KZ>2]

SUB #CheckPage

IFNOT CMP(recZlTrn.Typ,=)$[recMainKTO.Typ]
  GOTO :NoSaldo
IFNOT CMP(recZlTrn.Konto,=)$[recMainKTO.Konto]
  GOTO :NoSaldo
mSaldo=($[mSaldo] + $[recZlTrn.Haben]) - $[recZlTrn.Soll]
SUB #subFmtSaldo
:NoSaldo

IF BOOL(($[mZlPrt]) = (0))
  SUB #subFirstRec
IF CMP(recKtoTrn.Typ,=)P
  SUB #subPerson
IF CMP(recKtoTrn.KzKasse,=)B
  SUB #subGeld
IF CMP(recKtoTrn.KzKasse,=)G
  SUB #subGeld
IF CMP(recKtoTrn.KzKasse,=)K
  SUB #subGeld

IFNOT CMP(recZlTrn.Typ,=)$[recMainKTO.Typ]
  GOTO :NoThisKto
IFNOT CMP(recZlTrn.Konto,=)$[recMainKTO.Konto]
  GOTO :NoThisKto

:ThisKto
OUT ##outloopZlThis
mZlPrt=$[mZlPrt] + 1
RETURN

:NoThisKto
OUT ##outloopZlTrn
mZlPrt=$[mZlPrt] + 1
RETURN

#end

#loopZlCnt
* Unterprgramm von ReportMain/loopBBZeile
* Datensatzschleife recZlCnt
IF BOOL(($[recZlCnt.Soll] = 0) & ($[recZlCnt.Haben] = 0))
   RETURN

mZlCount= $[mZlCount] + 1
RETURN

#end

#subChkPg0
* Fussbereich ausgeben, wenn letzte Zeile erreicht
IF BOOL(($[Zeile] + $[mZlCount]) > $[ZlMax])
   SUB #Fuss
* Kopfbereich ausgeben, wenn erste Zeile erreicht
IF BOOL($[Zeile] = 0)
   SUB #Kopf



#end

#loopBBZeile
* Unterprogramm von ReportMain
* Datensatzschleife recZeile
* geht Tabelle Buchblattzeilen durch
* und ruft für jede TransNo die Schleifen
* für das Buchblattkonto auf

* Distinct Transaction-No
IF CMP(mLastTRN,=)$[recZeile.TransNo]
  RETURN
mLastTRN=$[recZeile.TransNo]


* Anzahl gültige Zeilen
* Anzahl gedruckte Zeilen
VAR mZlCount(N,8,0)
VAR mZlPrt(N,8,0)

REC recZlCnt(BUCHUNGSZEILEN,1,8)$[recZeile.TransNo<8]
REC recZlTrn(BUCHUNGSZEILEN,1,8)$[recZeile.TransNo<8]
LOOP recZlCnt(#loopZlCnt)

IF BOOL(($[mZlCount]) = (0))
  RETURN

SUB #subChkPg0
LOOP recZlTrn(#loopZlTrn)

RETURN

#end

#subFmtSaldo
* Unterprgramm von ReportMain/loopMainKTO

VAR tSaldo(N,14,2)
tSaldo=0 - $[mSaldo]

IF BOOL(($[mSaldo]) > (0))
  GOTO :DoHaben

:DoSoll
mcsSoll=$[tSaldo]
mcsHaben=
RETURN

:DoHaben
mcsSoll=
mcsHaben=$[mSaldo]
RETURN

#end

#loopMainKTO
* Unterprgramm von ReportMain
* Datensatzschleife recMainKTO

IF CMP(recMainKTO.Konto,>)$[FltKtoBis]
   BREAK recMainKTO
IF EOF(recMainKTO)
  RETURN

Seite=      1
Zeile=      0

VAR mSaldo(N,14,2)
VAR mcSoll(C,16,0)
VAR mcHaben(C,16,0)
VAR mcsSoll(C,16,0)
VAR mcsHaben(C,16,0)
VAR mLastTRN(u,8,0)
mLastTRN=XXXXXXXX

VAR SubFltLen(N,2,0)
SubFltLen=9 + $[FilterLen]
REC recZeile(BUCHUNGSZEILEN,0,$[SubFltLen])$[recMainKTO.Typ<1]$[recMainKTO.Konto<8]$[Zeitraum<8]
IF EOF(recZeile)
  RETURN

mSaldo=$[recZeile.SaldoAlt]
SUB #subFmtSaldo

OUT STARTPAGE
OUT DEVICE A4Quer
OUT CALCBORDER
OUT XOFFSET 0
OUT YOFFSET 0

OUT ##KopfSeite
OUT ##KopfDetail

LOOP recZeile(#loopBBZeile)

IF BOOL(($[Zeile]) = (0))
  RETURN

Zeile=$[ZlMax]
OUT ##FussSeite
OUT ENDPAGE
RETURN

#end

