REFLEX Angebot/Auftrag Styles Code: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Code)
(Code)
Zeile 20: Zeile 20:
 
* Das Memo-Feld (Text-Feld) für die Anschrift wird gefüllt. Hier werden also die Anschriften-Felder nicht direkt auf dem Report platziert, sondern es gibt ein Memo <code>memoAnschrift</code>, in das die Zeilen (Lines) angefügt werden. Das hat den Vorteil, dass z.B. das Ansprechpartner-Feld keine Leerzeile verursacht, wenn es gar keinen Ansprechpartner gibt.
 
* Das Memo-Feld (Text-Feld) für die Anschrift wird gefüllt. Hier werden also die Anschriften-Felder nicht direkt auf dem Report platziert, sondern es gibt ein Memo <code>memoAnschrift</code>, in das die Zeilen (Lines) angefügt werden. Das hat den Vorteil, dass z.B. das Ansprechpartner-Feld keine Leerzeile verursacht, wenn es gar keinen Ansprechpartner gibt.
  
* Abhängig von den [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen]] werden Bänder ein- oder ausgeblendet.
+
* Abhängig von den [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen|Auftragskennzeichen]] werden Bänder ein- oder ausgeblendet.
  
  
Zeile 75: Zeile 75:
 
   
 
   
  
Diese Prozedur kommt aus dem Basis-Report, das zeigt das Wort <code>_inherited</code> ("geerbt"). Abhängig vom [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen]] ein das Logo im Kopf ein- oder ausgeblendet.
+
Diese Prozedur kommt aus dem Basis-Report, das zeigt das Wort <code>_inherited</code> ("geerbt"). Abhängig vom [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen|Auftragskennzeichen]] wird das Logo im Kopf ein- oder ausgeblendet.
 
   
 
   
 
  procedure pictureBasisKopfLogoOnBeforePrint_inherited(Sender: TfrxComponent);
 
  procedure pictureBasisKopfLogoOnBeforePrint_inherited(Sender: TfrxComponent);
Zeile 174: Zeile 174:
 
=== Positionen ===
 
=== Positionen ===
  
 +
 +
Wenn der Positions-Textbaustein leer ist oder wenn das [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen|Auftragskennzeichen]] 8 auf "Nein" steht, wird der Textbereich der Auftragsposition ausgeblendet:
 
   
 
   
 
  // Positionen:
 
  // Positionen:
Zeile 184: Zeile 186:
 
     ChildDetailPositionen.Visible := True;
 
     ChildDetailPositionen.Visible := True;
 
  end;
 
  end;
 +
 +
 +
Der Seiten-Kopf (Page-Header) kommt normalerweise auf '''jeder''' Seite, also auch auf der '''ersten'''. Das ist hier nicht gewünscht, weil im Kopf schon alle relevanten Informationen stehen. Deshalb wird dieses Band auf der 1. Seite ausgeblendet:
 
   
 
   
 
  procedure MemoTitelHeaderPositionenOnBeforePrint(Sender: TfrxComponent);
 
  procedure MemoTitelHeaderPositionenOnBeforePrint(Sender: TfrxComponent);
Zeile 193: Zeile 198:
 
     HeaderSeitenNummer.Visible := True;
 
     HeaderSeitenNummer.Visible := True;
 
  end;  
 
  end;  
 +
 +
 +
Der manuelle Seitenwechsel:
 
   
 
   
 
  procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent);
 
  procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent);
Zeile 202: Zeile 210:
 
  end;  
 
  end;  
 
    
 
    
+
 
 +
Zusatztext unterdrücken, wenn keiner angegeben ist:
 +
 
 
  procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent);
 
  procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent);
 
  begin
 
  begin
Zeile 211: Zeile 221:
 
     ChildGroupHeader1.Visible := True;
 
     ChildGroupHeader1.Visible := True;
 
  end;
 
  end;
 
 
 
   
 
   
 
+
 
 +
Die relative große Prozedur wird '''vor dem Drucken''' einer Position aufgerufen. Hier werden z.B. Bereiche ausgeschaltet, abhängig von [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen|Auftragskennzeichen]].
 +
 
 +
Damit die Abfragen nicht zu kompliziert werden, werden die Felder am Anfang erst mal alle auf '''sichtbar''' gestellt (<code>Visible := True</code>). Abhängig von Kennzeichen, Inhalten usw. werden dann einzelne felder auf unsichtbar gestellt  (<code>Visible := False</code>):
 +
 
  procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
 
  procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
 
  begin
 
  begin
Zeile 228: Zeile 241:
 
   memoPosGesBetrag.Visible        := True;  
 
   memoPosGesBetrag.Visible        := True;  
 
   
 
   
  // Derzeit unbenutzt: AuftrStatistikSummeRabatt.Visible:= True;
 
 
   
 
   
 
   // Kennzeichen 4 = Einzelpreise sichtbar Ja/Nein:
 
   // Kennzeichen 4 = Einzelpreise sichtbar Ja/Nein:
Zeile 257: Zeile 269:
 
     memoHeaderRabattTitel.Visible := False;
 
     memoHeaderRabattTitel.Visible := False;
 
     memoPositionenRabattProz.Visible := False;
 
     memoPositionenRabattProz.Visible := False;
    // Derzeit unbenutzt: AuftrStatistikSummeRabatt.Visible := False;
 
 
   end;  
 
   end;  
 
   
 
   
Zeile 333: Zeile 344:
 
   end;
 
   end;
 
  end;
 
  end;
 +
 +
 +
Diese Prozedur verhindert, dass auf der letzten Seite die Überschrift (Pos., Menge, Bezeichnung usw.) gedruckt wird, obwohl gar keine Position mehr da ist, die letzte Position also schon gedruckt wurde.
 +
 +
Dazu wird die Eigenschaft <code>EOF</code> des Positionen-Datensatzes "DetailPositionen.DataSet" abgefragt. EOF = End of File, eigentlich Ende der Datei, hier ist aber das Ende der Datensätze gemeint.
 +
 +
<code>EOF</code> ergibt <code>True</code> (wahr), wenn das Ende der Datensätze erreicht ist, also keine Positionen mehr kommen.
 +
 +
<code>EOF</code> ergibt <code>False</code> (wahr), wenn noch Positionen kommen.
 
   
 
   
 
  procedure ChildHeaderPositionenOnBeforePrint(Sender: TfrxComponent);
 
  procedure ChildHeaderPositionenOnBeforePrint(Sender: TfrxComponent);
Zeile 347: Zeile 367:
 
=== Fuss ===
 
=== Fuss ===
  
 +
Diese Prozedur wird '''vor dem Drucken''' des Fuss-Bereichs aufgerufen. Hier werden z.B. Bereiche ausgeschaltet, abhängig von [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen|Auftragskennzeichen]].
 +
 +
Im Fuss kann an den Gesamt-Rabatt auf das Material ausgeben. Da es ein solches Feld in der Datenbank nicht gibt, muss man den %-Wert berechnen und in einer Variablen <code>FussRabattProzent</code> ablegen.
 
   
 
   
 
  // FUSS:
 
  // FUSS:
Zeile 355: Zeile 378:
 
   if <AuftragsKopf."KENNZ2"> = 'Nein' then
 
   if <AuftragsKopf."KENNZ2"> = 'Nein' then
 
   begin
 
   begin
    // Derzeit unbenutzt: AuftrStatistikSummeRabatt.Visible:= False;
 
 
     MemoFooterGespreis.Visible:= False;
 
     MemoFooterGespreis.Visible:= False;
 
   end;  
 
   end;  
Zeile 375: Zeile 397:
 
   
 
   
 
  end;
 
  end;
 +
 +
 +
Im Fuss wird angezeigt, dass es im Angebot '''Alternativ-Positionen'' gibt. Dieser Hinweis soll natürlich nur erscheinen, wenn es im Angebot auch mind. eine Alternativ-Position gibt.
 +
 +
Das Druckprogramm stellt dazu in der Tabelle <code>AuftrStatistik</code> das Feld <code>"AnzahlAlternativPos"</code> zur Verfügung. Dieses Feld enthält die Anzahl der Positionen, die als "Alternativ" gekennzeichnet wurden.
 
   
 
   
 
  procedure AuftrStatistikAnzahlAlternativPosOnBeforePrint(Sender: TfrxComponent);
 
  procedure AuftrStatistikAnzahlAlternativPosOnBeforePrint(Sender: TfrxComponent);
Zeile 384: Zeile 411:
 
     AuftrStatistikAnzahlAlternativPos.Visible := True;
 
     AuftrStatistikAnzahlAlternativPos.Visible := True;
 
  end;
 
  end;
 +
 +
 +
Am Ende steht immer dieses, bitte nicht entfernen:
 
   
 
   
 
  begin  
 
  begin  

Version vom 15. Juli 2016, 11:28 Uhr

1 Allgemeines

Hier finden Sie den Programm-Code, der in den Standard-Style-Reports für Angebot/Auftrag verwendet wird.

2 Code

Der Code ist die Blöcke Kopf, Positionen und Fuss eingeteilt. Technisch gesehen ist das nicht notwendig, die Prozeduren könnten stehen wo sie wollen. Es erhöht aber die Übersichtlichkeit.

Auf den ersten Blick wirkt das erschreckend viel. Allerdings wiederholen sich die Befehle immer wieder, weil es in der Hauptsache darum geht:

  • Bereiche (Bänder) oder Felder ein- oder auszublenden
  • Felder (Memos, Textfelder) mit Inhalten zu füllen.

2.1 Kopf

Diese Prozedur wird aufgerufen, bevor der oberste Bereich (also das oberste Band) des Reports gedruckt wird.

Hier werden generelle Einstellungen des Reports gemacht:

  • Das Memo-Feld (Text-Feld) für die Anschrift wird gefüllt. Hier werden also die Anschriften-Felder nicht direkt auf dem Report platziert, sondern es gibt ein Memo memoAnschrift, in das die Zeilen (Lines) angefügt werden. Das hat den Vorteil, dass z.B. das Ansprechpartner-Feld keine Leerzeile verursacht, wenn es gar keinen Ansprechpartner gibt.


// Kopf:

procedure MasterDataAnschriftOnBeforePrint(Sender: TfrxComponent);
begin
  // Dies ist der erste Bereich des Reports, der gedruckt wird (außer dem PagerHeader des Basis-Reports).
  // Hier kann man generelle Einstellungen des Reports vornehmen.

  // Anschriftenfeld zusammenstellen:
  memoAnschrift.Lines.Clear;

  memoAnschrift.Lines.Add( <AuftragsKopf."NameFirma"> );

  if <Ansprechpartner."Briefanrede"> >  then
    memoAnschrift.Lines.Add( <Ansprechpartner."Briefanrede"> );

  memoAnschrift.Lines.Add( <AuftragsKopf."Str"> );
  memoAnschrift.Lines.Add( <AuftragsKopf."PLZ"> + ' ' + <AuftragsKopf."Ort"> );
  memoAnschrift.Lines.Add( UpperCase( <Adresse."Landname"> ) );

  // Kennzeichen 3 = Rabatt im Fuss Ja/Nein
  if <AuftragsKopf."KENNZ3"> = 'Nein' then
    ChildMaterialRabatt.Visible := False;

  // Kennzeichen 5 = Kapitelpreise Ja/Nein
  if <AuftragsKopf."KENNZ5"> = 'Nein' then
  begin
    memoKapitelBetrag.Visible         := False;
    GroupFooterKapitel.Visible := False;
  end;

  // Kapitel-Summe im Fuss:
  if <AuftragsKopf."KENNZ7"> = 'Nein' then
    GroupFooterKapitel.Visible := False;

  // Bänder nur für ANGEBOT (bzw. ANFRAGE):
  if <AuftragsKopf."StatusNr"> in [3,7,103,107] then // ANGEBOT, ANFRAGE, ANGEBOT im Archiv, ANFRAGE im Archiv
  begin
    // Angebots-Text im Fuß:
    ChildAngebotAuftragserteilung.Visible := True;

    // Wenn keine Arbeitszeit im Auftrag: Band unterdrücken:
    MasterDataArbeitszeitAng.Visible := <AuftragsFuss."SummeArbzeit"> > 0;
  end
  else
  begin
    // Wenn kein Angebot, müssen diese Bereiche IMMER ausgeblendet werden:
    ChildAngebotAuftragserteilung.Visible := False;
    MasterDataArbeitszeitAng.Visible := False;
  end;
end;

Diese Prozedur kommt aus dem Basis-Report, das zeigt das Wort _inherited ("geerbt"). Abhängig vom Auftragskennzeichen wird das Logo im Kopf ein- oder ausgeblendet.

procedure pictureBasisKopfLogoOnBeforePrint_inherited(Sender: TfrxComponent);
begin
  if <AuftragsKopf."KENNZ1"> = 'Nein' then
    pictureBasisKopfLogo.Visible := False;
end;

Da die Seitennummer im Kopf der ersten Seite steht, wird dieser Bereich auf der ersten Seite unterdrückt:

procedure HeaderSeitenNummerOnBeforePrint(Sender: TfrxComponent);
begin
  // Seitennummer auf der ersten Seite unterdrücken:
  if <Page>=1 then
    HeaderSeitenNummer.Visible := False
  else
    HeaderSeitenNummer.Visible := True;
end;

Das Band mit den Feldern Raum/Stand wird ausgeblendet, wenn die Felder leer sind:

procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent);
begin
  // Wenn beide Felder leer sind: Ausblenden!
  if ( <AuftragsKopf."VA-OrtKurzname"> =  ) and ( <AuftragsKopf."VA-Raum"> =  ) then
    MasterDataVARaum.Visible := False;
end;

Das Band mit dem Standard-Kopftext (aus den Programmparametern ⇒ Formular-Texte) wird ausgeblendet, wenn das Feld leer ist:

procedure MasterDataStandardTextKopfOnBeforePrint(Sender: TfrxComponent);
begin
  if <StandardTextKopf."StandardText"> =  then
     MasterDataStandardTextKopf.Visible:= False
  else
     MasterDataStandardTextKopf.Visible:= True;
end;

Das Band mit dem Kopftext (aus dem Auftragskopf) wird ausgeblendet, wenn das Feld leer ist:

procedure MasterDataKopftextOnBeforePrint(Sender: TfrxComponent);
begin
  if <AuftragsKopf."Kopftext"> =  then
    MasterDataKopftext.Visible:= False
  else
    MasterDataKopftext.Visible:= True;
end;

Die Bänder für die Bereiche Miete bzw. Verkauf (aus dem Auftragskopf) werden wechselweise aus-/eingeblendet, abhängig von dem Bereichskennzeichen des Auftrags:

procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent);
begin
  if <AuftragsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf"> <> 2 then
    MasterDataKopfMiete.Visible := False
  else
  begin
    MasterDataKopfMiete.Visible := True;

    // Bei Miete Datumsfelder im Kopf nur sichtbar, wenn Text drin steht:
    if <AuftragsKopf."AufbauText"> =  then
    begin
      AuftragsKopfAufbauDatum.Visible := False;
      AuftragsKopfAufbauText.Visible := False;
      AuftragsKopfAufbauZeit.Visible := False;
    end;

    if <AuftragsKopf."AbbauText"> =  then
    begin
      AuftragsKopfAbbauDatum.Visible := False;
      AuftragsKopfAbbauText.Visible := False;
      AuftragsKopfAbbauZeit.Visible := False;
    end;

    if <AuftragsKopf."ProbeText"> =  then
    begin
      AuftragsKopfProbeDatum.Visible := False;
      AuftragsKopfProbeText.Visible := False;
      AuftragsKopfProbeZeit.Visible := False;
    end;
  end;
end;

procedure MasterDataKopfVerkaufOnBeforePrint(Sender: TfrxComponent);
begin
  if <AuftragsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf"> = 2 then
    MasterDataKopfVerkauf.Visible := False
  else
    MasterDataKopfVerkauf.Visible := True;
end;


2.2 Positionen

Wenn der Positions-Textbaustein leer ist oder wenn das Auftragskennzeichen 8 auf "Nein" steht, wird der Textbereich der Auftragsposition ausgeblendet:

// Positionen:

procedure ChildDetailPositionenOnBeforePrint(Sender: TfrxComponent);
begin
  if ( <Positionen."TextPosition"> =  ) or ( <AuftragsKopf."KENNZ8"> = 'Nein' ) then
    ChildDetailPositionen.Visible := False
  else
    ChildDetailPositionen.Visible := True;
end;

Der Seiten-Kopf (Page-Header) kommt normalerweise auf jeder Seite, also auch auf der ersten. Das ist hier nicht gewünscht, weil im Kopf schon alle relevanten Informationen stehen. Deshalb wird dieses Band auf der 1. Seite ausgeblendet:

procedure MemoTitelHeaderPositionenOnBeforePrint(Sender: TfrxComponent);
begin
  // Auf der 1. Seite unterdrücken:
  if <Page> = 1 then
    HeaderSeitenNummer.Visible := False
  else
    HeaderSeitenNummer.Visible := True;
end; 

Der manuelle Seitenwechsel:

procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent);
begin
  // Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird.
  // Wenn das Kennzeichen "Seitenwechsel Vorher" gesetzt ist:
  if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then
    Engine.NewPage;                                   // Neue Seite, Seitenkopf usw. drucken
end; 
 

Zusatztext unterdrücken, wenn keiner angegeben ist:

procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent);
begin
  // Unterdrücken, wenn kein Zusatztext vorhanden ist:
  if <Positionen."TextPosition"> =  then
    ChildGroupHeader1.Visible := False
  else
    ChildGroupHeader1.Visible := True;
end;

Die relative große Prozedur wird vor dem Drucken einer Position aufgerufen. Hier werden z.B. Bereiche ausgeschaltet, abhängig von Auftragskennzeichen.

Damit die Abfragen nicht zu kompliziert werden, werden die Felder am Anfang erst mal alle auf sichtbar gestellt (Visible := True). Abhängig von Kennzeichen, Inhalten usw. werden dann einzelne felder auf unsichtbar gestellt (Visible := False):

procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent);
begin
  // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band
  // ausgegeben wird. 

  // Grundeinstellung: Erst mal alles einschalten, unten u.U. wieder aus:
  MemHeaderEinzPreis.Visible       := True;
  memoHeaderRabattTitel.Visible    := True;
  memoHeaderGesPreis.Visible       := True;
  memoPositionenRabattProz.Visible := True; 

  memoPosEinzelPreis.Visible       := True;
  memoPosGesBetrag.Visible         := True; 


  // Kennzeichen 4 = Einzelpreise sichtbar Ja/Nein:
  if <AuftragsKopf."KENNZ4"> = 'Nein' then
  begin
    MemHeaderEinzPreis.Visible    := False;
    memoHeaderRabattTitel.Visible := False;
    memoHeaderGesPreis.Visible    := False;
  end;

  // Wenn der Gesamtpreis 0 ist, den Einzelpreis unterdrücken:
  // (z.B. bei 100 % Rabatt)
  if <Positionen."GesBetrag"> = 0 then
  begin
    memoPosEinzelPreis.Visible := False;
    memoPositionenRabattProz.Visible := False;
  end;

  // Titel "Rabatt" in Überschrift unterdrücken, wenn keine
  // Rabatt-Postion vorhanden ist.
  // (Hinweis: Hinter diesem Feld liegt ein leeres Textfeld, das den Rahmen anzeigt, wenn dieses Feld unsichtbar ist!)
  if <AuftrStatistik."AnzahlRabattPos"> = 0 then
    memoHeaderRabattTitel.Visible := False; 

  // Kennzeichen 2 = Rabatt Ja/Nein
  if <AuftragsKopf."KENNZ2"> = 'Nein' then
  begin
    memoHeaderRabattTitel.Visible := False;
    memoPositionenRabattProz.Visible := False;
  end; 

  // Kapitel-Position ausblenden:
  // Kennzeichen "Nur Kapitel" = 'Ja': Positionen unterdrücken:
  if ( <Positionen."PosNr"> = 0  )
  or ( <AuftragsKopf."KENNZ6"> = 'Ja' ) then
  begin
    DetailPositionen.Visible := False;
  end
  else
    DetailPositionen.Visible := True; 

  // Rabatt % unterdrücken, wenn's keinen Rabatt-Betrag gibt:
  if <Positionen."RabattBetrag"> = 0 then
    memoPositionenRabattProz.Visible := False;

  // Einzelpreise sichtbar abhängig vom Kennzeichen 4:
  if <AuftragsKopf."KENNZ4"> = 'Nein' then
  begin
    memoPosEinzelPreis.Visible := False;
    memoPositionenRabattProz.Visible := False;
    memoPosGesBetrag.Visible := False;
  end;

  // Bei Mietartikeln den Mietpreisfaktor anzeigen,
  // bei Arbeitszeit die Stunden/Tage:
  PositionenMietFaktor.Visible := False;
  PositionenStundenSoll_BeiArbZeit.Visible := False;
  if <Positionen."Artikelart_1MT_2VK_3DL_4AZ"> = 1 then
  begin
    PositionenMietFaktor.Visible := True;
  end; 

  if <Positionen."Artikelart_1MT_2VK_3DL_4AZ"> = 4 then
  begin
    PositionenStundenSoll_BeiArbZeit.Visible := True;
  end;

  // Alternativ-Position kennzeichnen:
  // Markierung mit " * " nur bei Alternativ-Position anzeigen
  // (und nicht beim Kapitel, das auch das Alternativ-Kennzeichen hat!)
  if (<Positionen."Alternativ_0_1"> = 1) and (<Positionen."PosNr"> > 0 ) then
  begin
    memoPosGesBetrag.Font.Color := clGray; // clWindowFrame;
    MemoAlternativStern.Visible := True;
  end
  else
  begin
    MemoAlternativStern.Visible := False;
    memoPosGesBetrag.Font.Color := clBlack; // clWindowText;
  end;

  // 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;                                                // Neue Seite, Seitenkopf usw. drucken
  
end; 

procedure HeaderPositionenOnBeforePrint(Sender: TfrxComponent);
begin
  // Auf der 1. Seite unterdrücken:
  if <Page> = 1 then
  begin
    MemoAuftrNrTitelHeaderPositionen.Visible := False;
    HeaderSeitenNummer.Visible := False;
    HeaderPositionen.Visible := False;
  end
  else
  begin
    MemoAuftrNrTitelHeaderPositionen.Visible := True;
    HeaderSeitenNummer.Visible := True;
    HeaderPositionen.Visible := True;
  end;
end;

Diese Prozedur verhindert, dass auf der letzten Seite die Überschrift (Pos., Menge, Bezeichnung usw.) gedruckt wird, obwohl gar keine Position mehr da ist, die letzte Position also schon gedruckt wurde.

Dazu wird die Eigenschaft EOF des Positionen-Datensatzes "DetailPositionen.DataSet" abgefragt. EOF = End of File, eigentlich Ende der Datei, hier ist aber das Ende der Datensätze gemeint.

EOF ergibt True (wahr), wenn das Ende der Datensätze erreicht ist, also keine Positionen mehr kommen.

EOF ergibt False (wahr), wenn noch Positionen kommen.

procedure ChildHeaderPositionenOnBeforePrint(Sender: TfrxComponent);
begin
  // Überschriftszeile unterdrücken, wenn keine Positionen mehr kommen:
  if DetailPositionen.DataSet.EOF then
    ChildHeaderPositionen.Visible := False
  else
    ChildHeaderPositionen.Visible := True;
end;


2.3 Fuss

Diese Prozedur wird vor dem Drucken des Fuss-Bereichs aufgerufen. Hier werden z.B. Bereiche ausgeschaltet, abhängig von Auftragskennzeichen.

Im Fuss kann an den Gesamt-Rabatt auf das Material ausgeben. Da es ein solches Feld in der Datenbank nicht gibt, muss man den %-Wert berechnen und in einer Variablen FussRabattProzent ablegen.

// FUSS:

procedure FussPositionenOnBeforePrint(Sender: TfrxComponent);
begin
  // Kennzeichen 2 = Rabatt Ja/Nein
  if <AuftragsKopf."KENNZ2"> = 'Nein' then
  begin
    MemoFooterGespreis.Visible:= False;
  end; 

  // Ohne Mwst.: Mwst-Felder unterdrücken:
  if <AuftragsFuss."MwstBetrag"> = 0 then
  begin
    AuftragsFussMwstBetrag.Visible:= False;
    AuftragsFussMwstSatzProzent.Visible:= False;
    memoFussGesamtbetragText.Visible:= False;
    AuftragsFussGesamtBetragBrutto.Visible:= False;
  end;

  // Rabatt % berechnen:
  if ( <AuftragsFuss."KalkSummeGesamt"> > 0 ) then
    Set( 'FussRabattProzent', 100 - ( (<AuftragsFuss."SummeMiete"> +  <AuftragsFuss."SummeVerkauf"> ) / <AuftragsFuss."KalkSummeGesamt">  * 100 ) )
  else
    Set( 'FussRabattProzent',0);

end;

Im Fuss wird angezeigt, dass es im Angebot 'Alternativ-Positionen gibt. Dieser Hinweis soll natürlich nur erscheinen, wenn es im Angebot auch mind. eine Alternativ-Position gibt.

Das Druckprogramm stellt dazu in der Tabelle AuftrStatistik das Feld "AnzahlAlternativPos" zur Verfügung. Dieses Feld enthält die Anzahl der Positionen, die als "Alternativ" gekennzeichnet wurden.

procedure AuftrStatistikAnzahlAlternativPosOnBeforePrint(Sender: TfrxComponent);
begin
  // Hinweis aus Alternativ-Positionen:
  if <AuftrStatistik."AnzahlAlternativPos"> = 0 then
    AuftrStatistikAnzahlAlternativPos.Visible := False
  else
    AuftrStatistikAnzahlAlternativPos.Visible := True;
end;

Am Ende steht immer dieses, bitte nicht entfernen:

begin 
end.

3 Links