FastReport Beispiel Auftragsformular Struktur der Positionen

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

Hie wird die Struktur eines Reports für ein Auftragsformular (Angebot, Auftrag) beschrieben.


2 Der Aufbau der Detail-Bereiche

FastReport Auftragssformular Struktur Positionen.png


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 eine Code unterdrückt, wie [FastReport_Tipps_und_Tricks#Gruppenkopf_auf_jeder_Seite_unterdr.C3.BCcken.2C_wenn_keine_Daten_mehr_kommen|hier]] 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:

FastReport Auftragssformular Struktur Positionen Gruppe.png

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 [FastReport_Tipps_und_Tricks#Gruppenkopf_auf_jeder_Seite_unterdr.C3.BCcken.2C_wenn_keine_Daten_mehr_kommen|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
Anmerkungen
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!

3 Links