REFLEX Angebot/Auftrag Styles Code: Unterschied zwischen den Versionen
(Die Seite wurde neu angelegt: „== Allgemeines == Hier finden Sie den Programm-Code, der in den Standard-Style-Reports für Angebot/Auftrag verwendet wird. == Code == <nowiki> procedur…“) |
(→Kopf) |
||
| (10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
== Allgemeines == | == Allgemeines == | ||
| − | Hier finden Sie den Programm-Code, der in den Standard-Style-Reports für Angebot/Auftrag verwendet wird. | + | Hier finden Sie den Programm-Code, der in den [[REFLEX Angebot/Auftrag Styles|Standard-Style-Reports für Angebot/Auftrag]] verwendet wird. |
| + | |||
| + | Generell kann man die Syntax in FastReport für mehrere Programmier-Sprachen einstellen, wir verwenden die sog. "Pascal"-Syntax, weil die unserer Meinung nach für Ungeübte am Besten lesbar ist. | ||
| + | |||
| + | * Achtung! Wenn Sie Syntax im Report-Code '''nachträglich''' ändern, werden alle Zeilen des Codes '''gelöscht'''!!! | ||
== Code == | == 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. | ||
| + | |||
| + | Im Code befinden sich '''Kommentare'''. Kommentare kann man so festlegen: | ||
| + | |||
| + | ;Zeilenweise: | ||
| + | :Hier werden die Zeichen <code>//</code> verwendet. Alles was danach steht, ist Kommentar! | ||
| + | |||
| + | ;Blockweise: | ||
| + | :Hier werden die Zeichen <code>(*</code> am Anfang und <code>*)</code> am Ende verwendet. Alles was dazwischen steht, ist Kommentar! | ||
| + | |||
| + | |||
| + | |||
| + | === 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 <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. | ||
| + | * Am Schluss wird der Länder-Name in das Memo eingefügt. Nach DIN 5008 soll der Länder-Name in Großbuchstaben angegeben werden. Deshalb wird das Feld mit der Funktion <Code>UpperCase(..)</Code> eingefügt. Diese Funktion wandelt alle Zeichen in Großbuchstaben um. | ||
| + | |||
| + | * Abhängig von den [[REFLEX_Standard-Report_Angebot/Auftrag#Auftragskennzeichen|Auftragskennzeichen]] werden Bänder ein- oder ausgeblendet. | ||
| + | |||
| + | |||
| + | // Kopf: | ||
procedure MasterDataAnschriftOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataAnschriftOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 25: | Zeile 57: | ||
memoAnschrift.Lines.Add( UpperCase( <Adresse."Landname"> ) ); | memoAnschrift.Lines.Add( UpperCase( <Adresse."Landname"> ) ); | ||
| − | // Kennzeichen 3 = Rabatt im Fuss Ja/Nein | + | Rabatt-Bereich(e) ausschalten, wenn es gar keinen Rabatt gibt: |
| − | if <AuftragsKopf."KENNZ3"> = 'Nein' then | + | |
| + | // Kennzeichen 3 = Rabatt im Fuss Ja/Nein oder kein Rabatt im Auftrag vorhanden: | ||
| + | if ( <AuftragsKopf."KENNZ3"> = 'Nein' ) | ||
| + | or ( <AuftrStatistik."AnzahlRabattPos"> = 0 ) then | ||
ChildMaterialRabatt.Visible := False; | ChildMaterialRabatt.Visible := False; | ||
| + | |||
| + | |||
| + | Im '''Style D''' gibt es auf der '''ersten und auf der letzten''' Seite einen Rabatt-Bereich, deshalb lautet der Code hier: | ||
| + | (weil von dem <code>if...then</code> nun mehrere Zeilen betroffen sein sollen, muss man diese Zeilen nun mit <code>begin</code> beginnen mit <code>end;</code> beenden!) | ||
| + | |||
| + | // Kennzeichen 3 = Rabatt im Fuss Ja/Nein oder kein Rabatt im Auftrag vorhanden: | ||
| + | if ( <AuftragsKopf."KENNZ3"> = 'Nein' ) | ||
| + | or ( <AuftrStatistik."AnzahlRabattPos"> = 0 ) then | ||
| + | begin | ||
| + | MasterDataKopfRabatt.Visible := False; // Rabatt-Bereich auf der 1. Seite | ||
| + | ChildMaterialRabatt.Visible := False; // Rabatt-Bereich auf der letzten Seite | ||
| + | end; | ||
| + | |||
| + | |||
// Kennzeichen 5 = Kapitelpreise Ja/Nein | // Kennzeichen 5 = Kapitelpreise Ja/Nein | ||
| Zeile 57: | Zeile 106: | ||
end; | end; | ||
| + | |||
| + | 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 63: | Zeile 114: | ||
pictureBasisKopfLogo.Visible := False; | pictureBasisKopfLogo.Visible := False; | ||
end; | end; | ||
| − | + | ||
| − | + | ||
| − | + | Da die Seitennummer im Kopf der ersten Seite steht, wird dieser Bereich auf der ersten Seite unterdrückt: | |
| − | |||
| − | |||
procedure HeaderSeitenNummerOnBeforePrint(Sender: TfrxComponent); | procedure HeaderSeitenNummerOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 78: | Zeile 127: | ||
end; | end; | ||
| + | |||
| + | Das Band mit den Feldern Raum/Stand wird ausgeblendet, wenn die Felder leer sind: | ||
procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 85: | Zeile 136: | ||
MasterDataVARaum.Visible := False; | MasterDataVARaum.Visible := False; | ||
end; | end; | ||
| + | |||
| + | |||
| + | Das Band mit dem Standard-Kopftext (aus den Programmparametern ⇒ Formular-Texte) wird ausgeblendet, wenn das Feld leer ist: | ||
procedure MasterDataStandardTextKopfOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataStandardTextKopfOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 93: | Zeile 147: | ||
MasterDataStandardTextKopf.Visible:= True; | MasterDataStandardTextKopf.Visible:= True; | ||
end; | end; | ||
| + | |||
| + | |||
| + | Das Band mit dem Kopftext (aus dem Auftragskopf) wird ausgeblendet, wenn das Feld leer ist: | ||
procedure MasterDataKopftextOnBeforePrint(Sender: TfrxComponent); | procedure MasterDataKopftextOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 101: | Zeile 158: | ||
MasterDataKopftext.Visible:= True; | MasterDataKopftext.Visible:= True; | ||
end; | 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); | procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 141: | Zeile 201: | ||
MasterDataKopfVerkauf.Visible := True; | MasterDataKopfVerkauf.Visible := True; | ||
end; | end; | ||
| − | + | ||
| + | === 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 152: | Zeile 216: | ||
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 161: | Zeile 228: | ||
HeaderSeitenNummer.Visible := True; | HeaderSeitenNummer.Visible := True; | ||
end; | end; | ||
| + | |||
| + | |||
| + | Der manuelle Seitenwechsel: | ||
procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent); | procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 170: | Zeile 240: | ||
end; | end; | ||
| − | + | ||
| + | Zusatztext unterdrücken, wenn keiner angegeben ist: | ||
| + | |||
procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent); | procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent); | ||
begin | begin | ||
| Zeile 179: | Zeile 251: | ||
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 196: | Zeile 271: | ||
memoPosGesBetrag.Visible := True; | memoPosGesBetrag.Visible := True; | ||
| − | |||
// Kennzeichen 4 = Einzelpreise sichtbar Ja/Nein: | // Kennzeichen 4 = Einzelpreise sichtbar Ja/Nein: | ||
| Zeile 225: | Zeile 299: | ||
memoHeaderRabattTitel.Visible := False; | memoHeaderRabattTitel.Visible := False; | ||
memoPositionenRabattProz.Visible := False; | memoPositionenRabattProz.Visible := False; | ||
| − | |||
end; | end; | ||
| Zeile 301: | Zeile 374: | ||
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> (falsch), wenn noch Positionen kommen. | ||
procedure ChildHeaderPositionenOnBeforePrint(Sender: TfrxComponent); | procedure ChildHeaderPositionenOnBeforePrint(Sender: TfrxComponent); | ||
| Zeile 311: | Zeile 393: | ||
end; | end; | ||
| + | |||
| + | |||
| + | === Fuss === | ||
| + | |||
| + | Bitte beachten Sie, dass manche Bereiche im Fuss schon ganz oben im Kopfbereich ein- oder ausgeblendet werden. | ||
| + | |||
| + | 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 man 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 319: | Zeile 410: | ||
if <AuftragsKopf."KENNZ2"> = 'Nein' then | if <AuftragsKopf."KENNZ2"> = 'Nein' then | ||
begin | begin | ||
| − | |||
MemoFooterGespreis.Visible:= False; | MemoFooterGespreis.Visible:= False; | ||
end; | end; | ||
| Zeile 339: | Zeile 429: | ||
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 348: | Zeile 443: | ||
AuftrStatistikAnzahlAlternativPos.Visible := True; | AuftrStatistikAnzahlAlternativPos.Visible := True; | ||
end; | end; | ||
| + | |||
| + | |||
| + | Am Ende steht immer dieses, bitte nicht entfernen: | ||
begin | begin | ||
| − | + | ||
end. | end. | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
== Links == | == Links == | ||
Aktuelle Version vom 16. Juli 2016, 00:46 Uhr
Inhaltsverzeichnis
1 Allgemeines
Hier finden Sie den Programm-Code, der in den Standard-Style-Reports für Angebot/Auftrag verwendet wird.
Generell kann man die Syntax in FastReport für mehrere Programmier-Sprachen einstellen, wir verwenden die sog. "Pascal"-Syntax, weil die unserer Meinung nach für Ungeübte am Besten lesbar ist.
- Achtung! Wenn Sie Syntax im Report-Code nachträglich ändern, werden alle Zeilen des Codes gelöscht!!!
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.
Im Code befinden sich Kommentare. Kommentare kann man so festlegen:
- Zeilenweise
- Hier werden die Zeichen
//verwendet. Alles was danach steht, ist Kommentar!
- Blockweise
- Hier werden die Zeichen
(*am Anfang und*)am Ende verwendet. Alles was dazwischen steht, ist Kommentar!
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. - Am Schluss wird der Länder-Name in das Memo eingefügt. Nach DIN 5008 soll der Länder-Name in Großbuchstaben angegeben werden. Deshalb wird das Feld mit der Funktion
UpperCase(..)eingefügt. Diese Funktion wandelt alle Zeichen in Großbuchstaben um.
- Abhängig von den Auftragskennzeichen werden Bänder ein- oder ausgeblendet.
// 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"> ) );
Rabatt-Bereich(e) ausschalten, wenn es gar keinen Rabatt gibt:
// Kennzeichen 3 = Rabatt im Fuss Ja/Nein oder kein Rabatt im Auftrag vorhanden:
if ( <AuftragsKopf."KENNZ3"> = 'Nein' )
or ( <AuftrStatistik."AnzahlRabattPos"> = 0 ) then
ChildMaterialRabatt.Visible := False;
Im Style D gibt es auf der ersten und auf der letzten Seite einen Rabatt-Bereich, deshalb lautet der Code hier:
(weil von dem if...then nun mehrere Zeilen betroffen sein sollen, muss man diese Zeilen nun mit begin beginnen mit end; beenden!)
// Kennzeichen 3 = Rabatt im Fuss Ja/Nein oder kein Rabatt im Auftrag vorhanden:
if ( <AuftragsKopf."KENNZ3"> = 'Nein' )
or ( <AuftrStatistik."AnzahlRabattPos"> = 0 ) then
begin
MasterDataKopfRabatt.Visible := False; // Rabatt-Bereich auf der 1. Seite
ChildMaterialRabatt.Visible := False; // Rabatt-Bereich auf der letzten Seite
end;
// 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 (falsch), 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
Bitte beachten Sie, dass manche Bereiche im Fuss schon ganz oben im Kopfbereich ein- oder ausgeblendet werden.
Diese Prozedur wird vor dem Drucken des Fuss-Bereichs aufgerufen. Hier werden z.B. Bereiche ausgeschaltet, abhängig von Auftragskennzeichen.
Im Fuss kann man 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.