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 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:

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 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!

3 Links