FastReport Beispiel Auftragsformular Struktur der Positionen
Inhaltsverzeichnis
1 Allgemeines
Hie wird die Struktur eines Reports für ein Auftragsformular (Angebot, Auftrag) beschrieben.
2 Der Aufbau der Detail-Bereiche
Bereich | Beschreibung |
---|---|
1 | Der Header HeaderPositionen wird auf jeder Seite gedruckt und beinhaltet die Auftragsnummer und Seitennummer. Dazu mit der rechten Maustaste auf den Bereich klicken klicken und die Option "Auf neuer Seite wiederholen" auswählen. Über eine Formel wird dieses Band auf der ersten Seite jedoch unterdrückt, weil im Kopf die Auftragsnummer schon drin steht!
procedure HeaderPositionenOnBeforePrint(Sender: TfrxComponent); begin // Auf der 1. Seite unterdrücken: if <Page#> = 1 then HeaderPositionen.Visible := False else HeaderPositionen.Visible := True; end;
|
2 | Der Header HeaderPositionen hat ein darunterliegendes Kind-Band ("Child") mit dem Namen ChildHeaderPositionen. Es beinhaltet die Überschriften der Positionen.
Die Überschriften sind normale Textfelder ohne Rahmen. Unter den Textfeldern liegt ein weiteres Textfeld, das von ganz links bis ganz rechts geht und einen Rahmen unten und einen oben hat. Damit das Band nicht gedruckt wird, wenn es gar keine Positionen für die neue Seite mehr gibt, wird dies über einen Code unterdrückt, wie in diesem Artikel beschrieben. |
3 | Die Positionen werden von einer Gruppe umschlossen, die den Namen GroupHeaderKapitel hat. Hier werden die Kapitelnummer, -Bezeichnung und der -Preis ausgegeben. Die Gruppe wird ganz einfach festgelegt:
Die Felder kommen aus der Tabelle Positionen. |
4 | Hier stehen nun die eigentlichen Position im Band DetailPositionen.
Die Felder kommen aus der Tabelle Positionen. Damit das Überschriften-Band nicht gedruckt wird, wenn es gar keine Positionen für die neue Seite mehr gibt, wird dies über einen Code in OnAfterPrint dieses Bands unterdrückt, wie hier beschrieben. Da die Kapitel-Position (1.0, 2.0, 3.0 usw.) schon im Gruppenkopf gedruckt wird, muss im Detailbereich die Ausgabe unterdrückt werden, wenn es sich um eine ".0"-Position handelt. Dazu wird dieser Code benutzt: procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin // Kapitel-Position ausblenden: if <Positionen."PosNr"> = 0 then DetailPositionen.Visible := False // Kapitel-Position else DetailPositionen.Visible := True; // Normale Position Wenn das Kennzeichen "Seitenwechsel Vorher" benutzt werden soll, kann dieser Code verwendet werden: // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist: if <Positionen."PosNr"> > 0 then // NICHT bei Kapitel-Position, das wird da schon gemacht! if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then Engine.NewPage; Der Code für dieses Band beinhaltet noch weitere Abfragen, um z.B. das Rabattfeld optional zu unterdrücken. |
5 | Das Child-Band ChildDetailPositionen hängt am DetailPositionen-Band. Es ist deshalb ein Child-Band, weil es per Kennzeichen abschaltbar ist, z.B. mit:
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band ausgegeben wird. // Wenn Kennzeichen 4 auf 'Nein' steht: Bezeichnung nicht drucken! if <AuftragsKopf."KENNZ4"> = 'Nein' then ChildDetailPositionen.Visible := False else ChildDetailPositionen.Visible := True;
|
6 | Der Footer FussPositionen wird unterhalb der Positionen ausgegeben. Er beinhaltet die Auftragssummen, Mwst., Zahlungskonditionen usw.
Im Code kann man das Rabattfeld und Mwst.-Feld unter bestimmten Bedigungen ausschalten, z.B. mit: procedure FussPositionenOnBeforePrint(Sender: TfrxComponent); begin // Kennzeichen 3 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ3"> = 'Nein' then begin memoFooterRabatt.Visible := False; memoFooterPreis.Visible := False; AuftrStatistikSummeRabatt.Visible:= False; MemoFooterGespreis.Visible:= False; end; // Mwst-Zeile unterdrücken, wenn es keine gibt: if <AuftragsFuss."MwstSatzProzent"> = 0 then begin AuftragsFussMwstSatzProzent.Visible := False; AuftragsFussMwstBetrag.Visible := False; AuftragsFussGesamtBetragBrutto.Visible := False; end; end; |
2.1 Anmerkungen
- Namen der Bänder und Felder
- Die einzelnen Bänder (Bereiche) haben aussagekräftige Namen bekommen. "DetailPositionen" ist aussagekräftiger als "Details1". Sie sollten es sich angewöhnen, einem Band gleich nach dem einfügen in den Report einen vernünftigen Namen zu geben!
- Formatierungen im Code
- Wenn mehrere Code-Zeilen untereinander stehen, sind diese mit Leerstellen aufgefüllt, damit sie untereinander stehen. Das dienst nur der besseren Lesbarkeit und ist nicht unbedingt notwendig!
2.2 Code-Sprache
Alle Beispiele (wie auch alle GEVITAS-Standard-Reports) verwendet als Code-Sprache "Pascal". Alternativ kann man auch die Sprach-Syntax Basic, C++ oder JavaScript verwenden.
Beispiel Pascal:
procedure FussPositionenOnBeforePrint(Sender: TfrxComponent); begin // Kennzeichen 3 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ3"> = 'Nein' then begin memoFooterRabatt.Visible := False; memoFooterPreis.Visible := False; AuftrStatistikSummeRabatt.Visible:= False; MemoFooterGespreis.Visible:= False; end; // Mwst-Zeile unterdrücken, wenn es keine gibt: //JC//151221// if <AuftragsFuss."MwstSatzProzent"> = 0 then begin AuftragsFussMwstSatzProzent.Visible := False; AuftragsFussMwstBetrag.Visible := False; AuftragsFussGesamtBetragBrutto.Visible := False; end; end;
Beispiel Basic:
sub FussPositionenOnBeforePrint(Sender) ' Kennzeichen 3 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ3"> = "Nein" then memoFooterRabatt.Visible = False memoFooterPreis.Visible = False AuftrStatistikSummeRabatt.Visible= False MemoFooterGespreis.Visible = False end if ' Mwst-Zeile unterdrücken, wenn es keine gibt: //JC//151221// if <AuftragsFuss."MwstSatzProzent"> = 0 then begin AuftragsFussMwstSatzProzent.Visible = False AuftragsFussMwstBetrag.Visible = False AuftragsFussGesamtBetragBrutto.Visible = False end if end sub
- Achtung
- Das Wechseln der Code-Sprache in einem bestehenden Report löscht den ganzen Code des Reports!