REFLEX Standard-Report Ladeliste: Unterschied zwischen den Versionen
(→Datei:1.png Seitenkopf) |
|||
Zeile 40: | Zeile 40: | ||
Der Barcode wird auf jeder Seite wiederholt. Grund: Wenn man die Option "Jedes Kapitel auf neue Seite" verwendet, um z.B. für jedes Gewerk ein anderes Team zum laden zu schicken, wäre nur auf der ersten Seite der Auftragsnummern-Barcode drauf. | Der Barcode wird auf jeder Seite wiederholt. Grund: Wenn man die Option "Jedes Kapitel auf neue Seite" verwendet, um z.B. für jedes Gewerk ein anderes Team zum laden zu schicken, wäre nur auf der ersten Seite der Auftragsnummern-Barcode drauf. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Das Feld für den Formular-Titel hat folgenden Inhalt: | Das Feld für den Formular-Titel hat folgenden Inhalt: | ||
− | [Titel] Nr. [AuftragsKopf."AuftrNr | + | [Titel] Nr. [AuftragsKopf."AuftrNr"] vom [Date] |
Zeile 98: | Zeile 53: | ||
|Diese Variable wird vom Programm an den Report übergeben. Der Text dazu kommt aus den Programm-Parametern. [[REFLEX-Basic Formular-Titel|Weitere Informationen dazu]] | |Diese Variable wird vom Programm an den Report übergeben. Der Text dazu kommt aus den Programm-Parametern. [[REFLEX-Basic Formular-Titel|Weitere Informationen dazu]] | ||
|- valign="top" | |- valign="top" | ||
− | |<code>[AuftragsKopf."AuftrNr | + | |<code>[AuftragsKopf."AuftrNr"]</code> |
− | |Hier wird die Auftragsnummer ausgegeben | + | |Hier wird die Auftragsnummer ausgegeben |
− | |||
− | |||
− | |||
− | |||
|- valign="top" | |- valign="top" | ||
|<code>[Date]</code> | |<code>[Date]</code> | ||
Zeile 111: | Zeile 62: | ||
Alternativ dazu könnte man auch das gespeichert Druckdatum benutzen. Das Feld würde dann so aussehen: | Alternativ dazu könnte man auch das gespeichert Druckdatum benutzen. Das Feld würde dann so aussehen: | ||
− | [Titel] Nr. [AuftragsKopf."AuftrNr | + | [Titel] Nr. [AuftragsKopf."AuftrNr"] vom [AuftragsKopf."DruckDat"] |
|} | |} | ||
Zeile 117: | Zeile 68: | ||
;Hinweis: | ;Hinweis: | ||
:Der Titel für die Folgeseiten wird über den Header der Positionen '''HeaderPositionen''' ausgegeben. | :Der Titel für die Folgeseiten wird über den Header der Positionen '''HeaderPositionen''' ausgegeben. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Damit dieser Bereich auf der '''ersten Seite unterdrückt''' wird, gibt es diesen Code in ''' HeaderPositionenOnBeforePrint''': | Damit dieser Bereich auf der '''ersten Seite unterdrückt''' wird, gibt es diesen Code in ''' HeaderPositionenOnBeforePrint''': | ||
Zeile 147: | Zeile 92: | ||
(Eigentlich gehört dieser Bereich nicht zum Kopf sondern zum Header über den Positionen) | (Eigentlich gehört dieser Bereich nicht zum Kopf sondern zum Header über den Positionen) | ||
− | ==== [[Datei: | + | |
+ | |||
+ | |||
+ | ==== Der Bereich ==== | ||
+ | |||
+ | [[Datei:Ladeliste_Standard_02_Seitenkopf.png]] | ||
+ | |||
+ | |||
+ | der Bereich hat keinen Code. | ||
+ | |||
+ | |||
+ | === Der Auftragskopf === | ||
+ | |||
+ | Die folgenden Bereiche gehören alle zum Auftragskopf. | ||
+ | |||
+ | Die Bänder haben alle das Dataset '''AuftragsKopf'''. Sie gehören zum Band-Typ '''MasterData''', werden also nur '''ein mal''' ausgegeben! | ||
+ | |||
+ | Der Kopf ist in verschiedene Bereiche eingeteilt, die teilweise unter bestimmten Umständen unterdrückt werden. | ||
+ | |||
+ | [[Datei:Ladeliste_Standard_03_Kopf.png]] | ||
+ | |||
+ | |||
+ | ==== [[Datei:2.png]] Auftragsdaten im Kopf ==== | ||
+ | |||
+ | ===== Kunden-Adresse, Veranstaltungs- und Projektdaten ===== | ||
+ | |||
+ | Die Kunden-Adresse liegt im Band '''MasterDataKopfMiete''' bzw. '''MasterDataKopfVerkauf'''. Diese beiden Bänder werden wechselweise ein- bzw. ausgeschaltet. | ||
===== MasterDataKopfMiete ===== | ===== MasterDataKopfMiete ===== | ||
Zeile 153: | Zeile 124: | ||
In diesem Bereich stehen die Kopfdaten für einen '''Miet-Auftrag'''. | In diesem Bereich stehen die Kopfdaten für einen '''Miet-Auftrag'''. | ||
− | Deshalb muss dieser Bereich ausgeblendet werden, wenn es um einen Verkaufs-Auftrag geht | + | Deshalb muss dieser Bereich ausgeblendet werden, wenn es um einen Verkaufs-Auftrag geht. |
Dazu gibt es diesen Code in '''MasterDataKopfMieteOnBeforePrint''': | Dazu gibt es diesen Code in '''MasterDataKopfMieteOnBeforePrint''': | ||
Zeile 165: | Zeile 136: | ||
begin | begin | ||
MasterDataKopfMiete.Visible := True; // Es ist Miete, also Bereich einschalten! | MasterDataKopfMiete.Visible := True; // Es ist Miete, also Bereich einschalten! | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
end; | end; | ||
end; | end; | ||
Zeile 225: | Zeile 174: | ||
− | |||
− | In diesem Bereich stehen die Ansprechpartner-Daten des | + | ===== [[Datei:3.png]] MasterKoptext ==== |
+ | In diesem Bereich stehen die Ansprechpartner-Daten des Auftrags. | ||
Er wird immer ausgegeben und hat keine Ereignisse. | Er wird immer ausgegeben und hat keine Ereignisse. | ||
Zeile 238: | Zeile 187: | ||
− | + | ==== [[Datei:4.png]] HeaderPositionen, Überschrift über die Positionen ==== | |
− | ==== [[Datei: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
Dieser Bereich beinhaltet den Titel über die Positionen. Dieser wird oben im Kopf beschrieben. | Dieser Bereich beinhaltet den Titel über die Positionen. Dieser wird oben im Kopf beschrieben. | ||
Zeile 287: | Zeile 209: | ||
'''[[FastReport_Gruppenkopf_unterdrücken,_wenn_keine_Daten_mehr_kommen|Weitere Hinweise dazu]]''' | '''[[FastReport_Gruppenkopf_unterdrücken,_wenn_keine_Daten_mehr_kommen|Weitere Hinweise dazu]]''' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === [[Datei:5.png]] Positionen === | ||
+ | |||
+ | Zentrales Band der Positionen ist das Band '''DetailPositionen'''. Es gehört zum Band-Typ '''DetailData''' mit den Daten aus der Tabelle '''Positionen'''. Das bedeutet, dass dieser Bereich wiederholt ausgegeben wird, bis es keine Positionsdaten mehr gibt! | ||
+ | |||
+ | Um, dieses Band herum wurden andere Bänder gelegt: | ||
+ | |||
+ | * Ein '''Header''' ("HeaderPositionen"), der den Titel über die Positionen beinhaltet. Dieser wird oben im Kopf beschrieben. | ||
+ | * Ein '''GroupHeader''' ("GroupHeaderKapitel"), der die Kapitel-Bezeichnungen beinhaltet. Das bedeutet, dass in dem Report die Gruppierungs-Funktion benutzt wird. Gruppieren bedeutet, dass die Positionen nach der Kapitel-Nummer getrennt werden. Die Kapitel-Überschrift steht im '''GroupHeader''', die eigentlichen Positionen im Band '''DetailPositionen'''. | ||
+ | * Ein '''Child-Band''' ("ChildGroupHeader1") für den Hinweis auf abweichende Daten. Ein Child-Band deshalb, weil das Band ausgeblendet wird, wenn es keine Abweichung zwischen Kopf und Positionen gibt. | ||
+ | * Ein '''Footer''' ("FussPositionen"), in dem Hinweise, Unterschriftenfelder usw. stehen. Dieser Bereich wird unten unter "Fuss" behandelt. | ||
+ | |||
+ | |||
+ | [[Datei:Ladeliste_Standard_04_Positionen.png]] | ||
+ | |||
Zeile 297: | Zeile 237: | ||
Es gibt diese Besonderheiten: | Es gibt diese Besonderheiten: | ||
− | * Wenn | + | * Wenn die Option "Jedes Kapitel auf neue Seite" (im Drucken-Fenster) gesetzt wurde, soll ein Seitenwechsel durchgeführt werden, bevor dieser Bereich gedruckt wird. |
− | * Wenn | + | * Wenn in Bezeichnung das Wort "Personal" steht, soll die Kapitelüberschrift unterdrückt werden. |
Deshalb gibt es im Ereignis '''GroupHeaderKapitelOnBeforePrint''' diesen Code: | Deshalb gibt es im Ereignis '''GroupHeaderKapitelOnBeforePrint''' diesen Code: | ||
Zeile 306: | Zeile 246: | ||
begin | begin | ||
// Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird. | // Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird. | ||
− | |||
− | |||
− | |||
− | // | + | // Wenn in der Kapitel-Bezeichnung irgendwo 'Personal' steht: Unterdrücken! |
− | if < | + | // (Groß- Kleinschreibung ist egal) |
− | + | if Pos('PERSONAL', Uppercase( <Positionen."Bezeichnung">) ) > 0 then // Pos( SuchenNach, SuchenIn ) sucht nach Texten und bring die Position zurück oder 0. | |
− | + | GroupHeaderKapitel.Visible := False | |
− | + | else | |
+ | GroupHeaderKapitel.Visible := True; | ||
+ | |||
+ | // Wenn die Option "Jedes Kapitel auf neue Seite" im Druckfenster eingeschaltet ist. | ||
+ | // Aber - Nicht bei dem 1. Kapitel! | ||
+ | // - Nicht wenn der Bereich unsichtbar ist! | ||
+ | if ( <KapitelNeueSeite> = 1 ) | ||
+ | and ( <Positionen."Kapitel"> > 1 ) | ||
+ | and ( GroupHeaderKapitel.Visible ) then | ||
+ | Engine.NewPage; // Neue Seite, Seitenkopf usw. drucken | ||
end; | end; | ||
</code> | </code> |
Version vom 23. Dezember 2015, 18:17 Uhr
Inhaltsverzeichnis
1 Allgemeines
Der Report "Ladeliste_Standard_Vxx.fr3" wird für den Druck einer Ladeliste aus der Auftragsverwaltung heraus verwendet. Er unterscheidet im Design zwischen Miete und Verkauf.
1.1 Verzeichnis, Basis-Report
Der Report befindet sich im Formular-Verzeichnis "Formular\Auftrag".
Der Report verwendet den Basis-Report nicht, da die Ladeliste eher ein internes Formular ist und die Geschäftsdaten nur Platz weg nehmen.
1.2 Auftragskennzeichen
Die Auftragskennzeichen, die für Angebot/Auftrag/Rechnung benutzt werden, werden in diesem Report nicht verwendet.
2 Vorschau
In der Vorschau sieht das Formular so aus:
3 Bereiche
3.1 Seitenkopf
In diesem Bereich steht der Firmenname (formlos, weil die Liste eher intern verwendet wird).
Rechts wird die Auftragsnummer in Barcode-Form angedruckt. Es wird der Barcode-Type Code-39 verwendet, der universal und nicht längenabhängig ist.
- Barcodes können direkt im Report eingefügt werden. FastReport unterstützt alle gängigen Barcodes.
- QR-Code kann auch verwendet werden, dazu ist jedoch eine Zusatz-Lizenz erforderlich.
Der Barcode wird auf jeder Seite wiederholt. Grund: Wenn man die Option "Jedes Kapitel auf neue Seite" verwendet, um z.B. für jedes Gewerk ein anderes Team zum laden zu schicken, wäre nur auf der ersten Seite der Auftragsnummern-Barcode drauf.
Das Feld für den Formular-Titel hat folgenden Inhalt:
[Titel] Nr. [AuftragsKopf."AuftrNr"] vom [Date]
Feld | Beschreibung |
---|---|
[Titel]
|
Diese Variable wird vom Programm an den Report übergeben. Der Text dazu kommt aus den Programm-Parametern. Weitere Informationen dazu |
[AuftragsKopf."AuftrNr"]
|
Hier wird die Auftragsnummer ausgegeben |
[Date]
|
In dieser Systemvariable steht das aktuelle Tagesdatum.
Alternativ dazu könnte man auch das gespeichert Druckdatum benutzen. Das Feld würde dann so aussehen: [Titel] Nr. [AuftragsKopf."AuftrNr"] vom [AuftragsKopf."DruckDat"] |
- Hinweis
- Der Titel für die Folgeseiten wird über den Header der Positionen HeaderPositionen ausgegeben.
Damit dieser Bereich auf der ersten Seite unterdrückt wird, gibt es diesen Code in HeaderPositionenOnBeforePrint:
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;
(Eigentlich gehört dieser Bereich nicht zum Kopf sondern zum Header über den Positionen)
3.1.1 Der Bereich
der Bereich hat keinen Code.
3.2 Der Auftragskopf
Die folgenden Bereiche gehören alle zum Auftragskopf.
Die Bänder haben alle das Dataset AuftragsKopf. Sie gehören zum Band-Typ MasterData, werden also nur ein mal ausgegeben!
Der Kopf ist in verschiedene Bereiche eingeteilt, die teilweise unter bestimmten Umständen unterdrückt werden.
3.2.1 Auftragsdaten im Kopf
3.2.1.1 Kunden-Adresse, Veranstaltungs- und Projektdaten
Die Kunden-Adresse liegt im Band MasterDataKopfMiete bzw. MasterDataKopfVerkauf. Diese beiden Bänder werden wechselweise ein- bzw. ausgeschaltet.
3.2.1.2 MasterDataKopfMiete
In diesem Bereich stehen die Kopfdaten für einen Miet-Auftrag.
Deshalb muss dieser Bereich ausgeblendet werden, wenn es um einen Verkaufs-Auftrag geht.
Dazu gibt es diesen Code in MasterDataKopfMieteOnBeforePrint:
procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent); begin if <AuftragsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf"> <> 2 then MasterDataKopfMiete.Visible := False // Es ist Verkauf, also Bereich ausschalten! else begin MasterDataKopfMiete.Visible := True; // Es ist Miete, also Bereich einschalten! end; end;
Wenn im Feld <AuftragsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf">
(es heißt wirklich so!) 1 steht, ist es ein Verkaufs-Auftrag, bei 2 ein Miet-Auftrag, bei 3 ein Mietartikel-Verkaufen-Auftrag.
3.2.1.3 MasterDataKopfVerkauf
In diesem Bereich stehen die Kopfdaten für einen Verkaufs-Auftrag.
Deshalb muss dieser Bereich ausgeblendet werden, wenn es um einen Miet-Auftrag geht. Dazu gibt es den Code in MasterDataKopfMieteOnBeforePrint, wie oben beschrieben.
3.2.1.4 MasterDataVARaum
In diesem Bereich stehen die Veranstaltungs-Raum und -VA-Ort (Kurzname) für einen Miet-Auftrag.
Dieser Bereich soll nur gedruckt werden, wenn es einen Raum oder VA-Ort-Namen gibt. Deshalb gibt es diesen Code in MasterDataVARaumOnBeforePrint:
procedure MasterDataVARaumOnBeforePrint(Sender: TfrxComponent); begin // Wenn beide Felder leer sind: Ausblenden! if ( <AuftragsKopf."VA-OrtKurzname"> = ) and ( <AuftragsKopf."VA-Raum"> = ) then MasterDataVARaum.Visible := False; end;
- Hinweis
- Der VA-Ort-Name wird im Auftragskopf unter dem VA-Ort optional angegeben.
3.2.2 = MasterKoptext
In diesem Bereich stehen die Ansprechpartner-Daten des Auftrags.
Er wird immer ausgegeben und hat keine Ereignisse.
- Ansprechnpartner Kunde
- Die Daten kommen aus den Kontakt-Stammdaten des Kunden bzw. Ansprechpartners. Weitere Informationen.
- Ansprechnpartner Auftrag
- Die Daten kommen aus den Personen-Stammdaten des Auftragsbearbeiters. Weitere Informationen.
3.2.3 HeaderPositionen, Überschrift über die Positionen
Dieser Bereich beinhaltet den Titel über die Positionen. Dieser wird oben im Kopf beschrieben.
Wichtig ist die Eigenschaft (rechte Maustaste auf dem Bereich) Auf neuer Seite wiederholen. Diese legt fest, dass der Header auf jeder neuen Seite oben gedruckt wird!
Der Bereich hat ein Child (Kind) mit dem Namen "ChildHeaderPositionen", in den die Überschrift über den Positionen liegt.
Weil die Überschrift nicht gedruckt werden soll, wenn es auf der neuen Seite gar keine Positionen mehr gibt, wird dieser Code in ChildHeaderPositionenOnBeforePrint verwendet:
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;
3.3 Positionen
Zentrales Band der Positionen ist das Band DetailPositionen. Es gehört zum Band-Typ DetailData mit den Daten aus der Tabelle Positionen. Das bedeutet, dass dieser Bereich wiederholt ausgegeben wird, bis es keine Positionsdaten mehr gibt!
Um, dieses Band herum wurden andere Bänder gelegt:
- Ein Header ("HeaderPositionen"), der den Titel über die Positionen beinhaltet. Dieser wird oben im Kopf beschrieben.
- Ein GroupHeader ("GroupHeaderKapitel"), der die Kapitel-Bezeichnungen beinhaltet. Das bedeutet, dass in dem Report die Gruppierungs-Funktion benutzt wird. Gruppieren bedeutet, dass die Positionen nach der Kapitel-Nummer getrennt werden. Die Kapitel-Überschrift steht im GroupHeader, die eigentlichen Positionen im Band DetailPositionen.
- Ein Child-Band ("ChildGroupHeader1") für den Hinweis auf abweichende Daten. Ein Child-Band deshalb, weil das Band ausgeblendet wird, wenn es keine Abweichung zwischen Kopf und Positionen gibt.
- Ein Footer ("FussPositionen"), in dem Hinweise, Unterschriftenfelder usw. stehen. Dieser Bereich wird unten unter "Fuss" behandelt.
3.3.1 GroupHeaderKapitel
Beinhaltet die Kapitel-Bezeichnungen. Das bedeutet, dass in dem Report die Gruppierungs-Funktion benutzt wird. Gruppieren bedeutet, dass die Positionen nach der Kapitel-Nummer getrennt werden. Die Kapitel-Überschrift steht im GroupHeader, die eigentlichen Positionen im Band DetailPositionen.
Es gibt diese Besonderheiten:
- Wenn die Option "Jedes Kapitel auf neue Seite" (im Drucken-Fenster) gesetzt wurde, soll ein Seitenwechsel durchgeführt werden, bevor dieser Bereich gedruckt wird.
- Wenn in Bezeichnung das Wort "Personal" steht, soll die Kapitelüberschrift unterdrückt werden.
Deshalb gibt es im Ereignis GroupHeaderKapitelOnBeforePrint diesen Code:
procedure GroupHeaderKapitelOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Gruppenkopf-Band (die Kapitel-Überschrift) ausgegeben wird. // Wenn in der Kapitel-Bezeichnung irgendwo 'Personal' steht: Unterdrücken! // (Groß- Kleinschreibung ist egal) if Pos('PERSONAL', Uppercase( <Positionen."Bezeichnung">) ) > 0 then // Pos( SuchenNach, SuchenIn ) sucht nach Texten und bring die Position zurück oder 0. GroupHeaderKapitel.Visible := False else GroupHeaderKapitel.Visible := True;
// Wenn die Option "Jedes Kapitel auf neue Seite" im Druckfenster eingeschaltet ist. // Aber - Nicht bei dem 1. Kapitel! // - Nicht wenn der Bereich unsichtbar ist! if ( <KapitelNeueSeite> = 1 ) and ( <Positionen."Kapitel"> > 1 ) and ( GroupHeaderKapitel.Visible ) then Engine.NewPage; // Neue Seite, Seitenkopf usw. drucken end;
3.3.2 ChildGroupHeader1
für den Text der Positionen. Ein Child-Band deshalb, weil das Band ausgeblendet wird, wenn gar kein Text angegeben wurde. Deshalb gibt es im Ereignis ChildGroupHeader1OnBeforePrint diesen Code:
procedure ChildGroupHeader1OnBeforePrint(Sender: TfrxComponent); begin // Unterdrücken, wenn kein Zusatztext vorhanden ist: if <Positionen."TextPosition"> = then ChildGroupHeader1.Visible := False else ChildGroupHeader1.Visible := True; end;
3.3.3 DetailPositionen
In diesem Bereich werden die eigentlichen Auftragspositionen ausgegeben.
In DetailPositionenOnBeforePrint gibt es einigen Code, der das Verhalten der Objekte dieses Bereiches beeinflusst.
Er befindet sich nach
procedure DetailPositionenOnBeforePrint(Sender: TfrxComponent); begin // Dieser Code wird ausgeführt, BEVOR das Positionen-Detail-Band // ausgegeben wird.
Im Code werden Felder auf unsichtbar ("Visible=False
") gestellt, abhängig von bestimmten Werten.
Weil das die Abfragen einfacher macht, werden erst einmal alle betroffenen Objekte auf Sichtbar ("Visible=True
") gestellt:
// 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; AuftrStatistikSummeRabatt.Visible:= True;
Im weiteren Verlauf werden dann einige Objekte wieder auf unsichtbar ("Visible=False") zurückgestellt, wenn es erforderlich ist.
Der Code der Positionen im Einzelnen:
- Wenn das Kennzeichen 3 = Einzelpreise sichtbar Ja/Nein auf "Nein" steht
- Preis- und Rabattfelder ausblenden::
// Kennzeichen 3 = Einzelpreise sichtbar Ja/Nein: if <AuftragsKopf."KENNZ3"> = 'Nein' then begin MemHeaderEinzPreis.Visible := False; memoHeaderRabattTitel.Visible := False; memoHeaderGesPreis.Visible := False; end;
- Wenn der Gesamtpreis 0 ist (z.B. bei 100 % Rabatt)
- Den Einzelpreis unterdrücken:
// 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:
// 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;
- Hinweis
- Das Programm stellt das Feld
<AuftrStatistik."AnzahlRabattPos">
zur Verfügung. In diesem Feld steht die Anzahl der Positionen, die einen Rabatt beihalten. Wenn hier 0 steht, gibt es keine Position mit Rabatt!
- Wenn das Kennzeichen 2 = Rabatt Ja/Nein auf "Nein" steht
- Rabatt in den Positionen und im Fuss unterdrücken:
// Kennzeichen 2 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ2"> = 'Nein' then begin memoHeaderRabattTitel.Visible := False; memoPositionenRabattProz.Visible := False; AuftrStatistikSummeRabatt.Visible := False; end;
- Kapitel-Position ausblenden
- Da die Kapitel-Positionen (1.0, 2.0, 3.0 usw.) im Gruppenkopf gedruckt werden, müssen sie hier im eigentlichen Positionsbereich unterdrückt werden.
- Außerdem können die Positionen über das Kennzeichen 6 ("nur Kapitel drucken = Ja) komplett unterdrückt werden:
// 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:
// Rabatt % unterdrücken, wenn's keinen Rabatt-Betrag gibt: if <Positionen."RabattBetrag"> = 0 then memoPositionenRabattProz.Visible := False;
- Einzelpreise
- sichtbar abhängig vom Kennzeichen 3:
// Einzelpreise sichtbar abhängig vom Kennzeichen 3: if <AuftragsKopf."KENNZ3"> = 'Nein' then begin memoPosEinzelPreis.Visible := False; memoPositionenRabattProz.Visible := False; memoPosGesBetrag.Visible := False; end;
- Seitenwechsel
- Wenn das Kennzeichen "Seitenwechsel Vorher" in einer Auftragspositionen gesetzt wurde, muss ein Seitenwechsel durchgeführt werden. Das diese Abfrage auch in der Kapitel-Überschrift drin ist, darf sie hier nur gemacht werden, wenn es eine "normale" Position ist, also die Positionsnummer größer als 0 ist (
<Positionen."PosNr"> > 0
:
// 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
3.3.4 Optionale Codierung in den DetailPositionen
Im Folgenden werden Codes beschrieben, die man optional in den Positionen verwenden kann. Diese sind im Standard-Formular nicht enthalten, können aber auf Wunsch verwendet werden. Dazu können Sie die hier aufgeführten Code-Teile einfach kopieren und ans Ende von DetailPositionenOnBeforePrint
einfügen.
- Formatierungen für Sets und Zubehör
- Hier werden z.B. die Feld-Schrift-Styles geändert, wenn die Position einen Haupt-Set-Artikel oder -Zubehör-Artikel beinhaltet.
- Außerdem wird gezeigt, wie man die Bezeichnungs- und Text-Felder für Set-Positionen einrücken kann.
- Wichtig: Positionsangaben im Code werden in Pixeln gemacht! Damit man Pixel einfach in cm umrechnen kann, stellt FastReport eine Funktion namens
fr1cm
zur Verfügung. Die Umrechnung in cm wird mit einer Formel gemacht: - "xxx.Left := 1.3 * fr1cm;"
- Wichtig: Positionsangaben im Code werden in Pixeln gemacht! Damit man Pixel einfach in cm umrechnen kann, stellt FastReport eine Funktion namens
- Standard-Einstellungen
- Erst einmal werden alle Felder auf den Standard positioniert:
// Alle Schrift-Attribute erst mal auf den Standard setzen: MemoPositionenBezeichnung.Font.Style := 0; memoPosMengeAuftrag.Font.Style := 0; memoPosEinzelPreis.Font.Style := 0; memoPositionenRabattProz.Font.Style := 0; memoPosGesBetrag.Font.Style := 0; // Einrücken erst mal zurücksetzen: MemoPositionenBezeichnung.Left := 1.3 * fr1cm; MemoPositionenBezeichnung.Width := 9.2 * fr1cm; RichChildDetailPositionen.Left := 1.3 * fr1cm;
- Die cm-Angaben (1.3 und 9.2) müssten Sie u.U. an Ihre Positionen anpassen, wenn Sie die Felder verschoben haben!
- Bitte beachten: Kommstellen im Code werden mit dem Punkt angegeben!
- Set-Position
- werden eingerückt, also der Wert der Left-Eigenschaft der Felder wird verändert:
if ( <Positionen."SetNr"> > 0 ) and ( <Positionen."SetNrHauptArtikel"> = ) then begin MemoPositionenBezeichnung.Left := 2.3 * fr1cm; MemoPositionenBezeichnung.Width := 8.2 * fr1cm; RichChildDetailPositionen.Left := 2.3 * fr1cm; end;
- Alternativ dazu könnte man das Feld auch kursiv darstellen:
if ( <Positionen."SetNr"> > 0 ) and ( <Positionen."SetNrHauptArtikel"> = ) then begin memoPosBezeichnung.Font.Style := fsItalic; end;
- Zubehör-Hauptartikel
- Könnten z.B. in Fettschrift dargestellt werden:
if <Positionen."ZubehoerKennzch_1Haupt_2Unter"> = 1 then begin MemoPositionenBezeichnung.Font.Style := fsBold; memoPosMengeAuftrag.Font.Style := fsBold; memoPosEinzelPreis.Font.Style := fsBold; memoPositionenRabattProz.Font.Style := fsBold; memoPosGesBetrag.Font.Style := fsBold; end;
- Zubehör-Unterposition
- Könnten z.B. kursiv darstellen:
if <Positionen."ZubehoerKennzch_1Haupt_2Unter"> = 2 then begin MemoPositionenBezeichnung.Font.Style := fsItalic; memoPosMengeAuftrag.Font.Style := fsItalic; memoPosEinzelPreis.Font.Style := fsItalic; memoPositionenRabattProz.Font.Style := fsItalic; memoPosGesBetrag.Font.Style := fsItalic; end;
- Alternativ könnten die Felder auch eingerückt werden:
if <Positionen."ZubehoerKennzch_1Haupt_2Unter"> = 2 then begin MemoPositionenBezeichnung.Left := 2.3 * fr1cm; MemoPositionenBezeichnung.Width := 8.2 * fr1cm; RichChildDetailPositionen.Left := 2.3 * fr1cm; end;
Alternative Positionen im Angebot:
- Alternativ-Positionen werden mit einem "*" markiert und zusätzlich wird der Gesamtpreis grau gedruckt.
- Das geht dann in
PositionenGesBetragOnBeforePrint
z.B. so:
procedure PositionenGesBetragOnBeforePrint(Sender: TfrxComponent); begin // Alternativ-Position kennzeichnen: // (Nicht beim Kapitel, das auch das Alternativ-Kennzeichen hat!) if (<Positionen."Alternativ_0_1"> = 1) and (<Positionen."PosNr"> > 0 ) then memoPosGesBetrag.Font.Color := clWindowFrame else memoPosGesBetrag.Font.Color := clWindowText; end;
- Die Markierung mit "*"
- wird nur bei Alternativ-Positionen angezeigt:
procedure MemoAlternativSternOnBeforePrint(Sender: TfrxComponent); begin // 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 MemoAlternativStern.Visible := True else MemoAlternativStern.Visible := False; end;
3.4 Fuss: Summen, Zahlung, Text
In diesem Bereich werden die Summen, Zahlungskonditionen usw. angezeigt.
- Genau genommen, ist dieser Bereich Bestandteil der Positionen, weil er als Footer (Fuss) der Positionen definiert ist.
Hier stehen die Felder aus der Tabelle AuftragsFuss
3.4.1 Code
Der Code hier ist überschaubar und befindet sich im Ereignis FussPositionenOnBeforePrint
:
- Rabattfeld
- optional ausschalten:
// Kennzeichen 2 = Rabatt Ja/Nein if <AuftragsKopf."KENNZ2"> = 'Nein' then begin AuftrStatistikSummeRabatt.Visible:= False; MemoFooterGespreis.Visible:= False; end;
- Wenn kein Mehrwertsteuer angegeben ist
- Felder ausschalten:
// 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;
- Hinweis
- Das Feld mit der Mehrwertsteuer zieht sich bis ganz nach rechts. Grund: Das Feld hat oben und unten einen Rahmen, der als Striche zwischen den Zeilen genutzt wird.
Alternative Positionen im Angebot:
In einem Angebot kann es alternative Positionen geben, die im Gesamtpreis nicht eingerechnet sind! Diese sollten irgendwie gekennzeichnet werden.
Im Standard-Formular werden diese Positionen mit einem "*" gekennzeichnet.
Im Fuss gibt es einen Hinweis, dass Alternativen im Angebot vorhanden sind. Dieser Hinweis soll natürlich nur erscheinen, wenn es im Angebot überhaupt Alternativ-Positionen gibt.
Dazu stellt das Programm in der Tabelle AuftrStatistik
das Feld "AnzahlAlternativPos"
zur Verfügung.
Steht dort eine Zahl größer als 0, gibt es eine entsprechende Anzahl von Alternativ-Positionen im Angebot.
- Hinweis auf Alternativ-Positionen
- Dieser wird nur angezeigt, wenn die Anzahl der Alternativ-Positionen > 0 ist.
- Das Feld
AuftrStatistikAnzahlAlternativPos
wird sonst unterdrückt:
procedure AuftrStatistikAnzahlAlternativPosOnBeforePrint(Sender: TfrxComponent); begin // Hinweis aus Alternativ-Positionen: if <AuftrStatistik."AnzahlAlternativPos"> = 0 then AuftrStatistikAnzahlAlternativPos.Visible := False else AuftrStatistikAnzahlAlternativPos.Visible := True; end;