REFLEX Standard-Report Ladeliste: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(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.
 
 
 
==== Der Bereich ====
 
 
[[Datei:Ladeliste_Standard_02_Seitenkopf.png]]
 
 
 
der Bereich hat keinen Code.
 
 
=== [[Datei:2.png]] Kunden-Adresse ===
 
 
Die Kunden-Adresse incl. Ansprechpartner liegt im '''BasisSeitenkopfChild''' aus dem Basis-Report.
 
 
Man kann also auch Felder in einen Bereich legen, der eigentlich nicht zum eigentlichen Report gehört. Die sind dort aber nur in dem Haupt-Report, nicht im Basis-Report!
 
 
Die Felder haben die Eigenschaften (rechte Maustaste und Option wählen)
 
 
* '''Dehnen''': Das Feld wird automatisch an die Höhe des Inhalts angepasst.
 
* '''Verschieben wenn Überlappung''': Das Feld wir nach unten verschoben, wenn sich ein Feld darüber ausdehnt.
 
 
;Hinweis:
 
:Das Ansprechpartnerfeld wird derzeit vorausgesetzt!
 
:Es ist noch kein Mechanismus eingebaut, der die unteren Felder nach oben schiebt, wenn es keinen Ansprechpartner gibt.
 
:Die Schwierigkeit ist, dass die Felder die Option '''Verschieben wenn Überlappung''' haben, damit sie sich nach unten verschieben, wenn der Firmenname mehrzeilig ist.
 
:Dadurch '''verwaltet der Report die Positionen automatisch''', ein Code, der die Position manuell anpasst
 
::(z.B. <code><nowiki> if <Ansprechpartner."Briefanrede"> = '' then AuftragsKopfStr.Top := AnsprechpartnerBriefanrede.Top;</nowiki></code>)
 
:hat dadurch '''keine Wirkung'''!
 
 
=== Der Auftagskopf ===
 
 
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:Standard_AngebotAuftrag_03_Kopf.png]]
 
 
 
 
==== [[Datei:3.png]] Erste Seite: Formular-Titel, Datum, Seiten-Nummer ====
 
 
Der Bereich '''MasterAuftragskopf''' beinhaltet den Formulartitel und die Seitennummer für die '''erste Seite'''.
 
(Die Schrift ist etwas größer als der Titel für die Folgeseiten)
 
  
 
Das Feld für den Formular-Titel hat folgenden Inhalt:
 
Das Feld für den Formular-Titel hat folgenden Inhalt:
  
  [Titel] Nr. [AuftragsKopf."AuftrNr"].[AuftrStatistik."AuftrVersion"] vom [Date]
+
  [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"].[AuftrStatistik."AuftrVersion"]</code>
+
|<code>[AuftragsKopf."AuftrNr"]</code>
|Hier wird die Auftragsnummer ausgegeben, gefolgt von einem Punkt und der Versionsnummer des Auftrags.
+
|Hier wird die Auftragsnummer ausgegeben
  
;Modul "Auftragsversionen"
 
* Dieses Zusatzmodul ermöglicht es, von einem Angebot/Auftrag beliebig viele Versionen abzuspeichern.
 
* Das hier beschriebene Formular kann auch von den Auftragsversionen zum Drucken benutzt werden (das geht mit CrystalReports nicht!)
 
* Wenn Sie das Modul "Auftragsversionen" von [[REFLEX]] nicht nutzen, können Sie dieses Feld und den Punkt löschen.
 
 
|- 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"].[AuftrStatistik."AuftrVersion"] vom [AuftragsKopf."DruckDat"]
+
   [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.
 
 
 
==== [[Datei:4.png]] Ab zweiter Seite: Formular-Titel, Datum, Seiten-Nummer ====
 
 
Der Titel für die Seiten 2 - Ende 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:5.png]] Auftragsdaten im Kopf ====
+
 
 +
 
 +
 
 +
==== 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. Außerdem sollen die Aufbau, Abbau, Probe-Felder ausgeblendet werden, wenn dort kein Text eingegeben wurde.
+
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!   
 
    // 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;
 
  end;
 
  end;
Zeile 225: Zeile 174:
  
  
===== MasterKoptext =====
 
  
In diesem Bereich stehen die Ansprechpartner-Daten des Kopfes.
+
===== [[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:6.png]] Standardtext, Text aus Kopf ====
 
 
 
Im Bereich '''MasterDataStandardTextKopf''' steht der Standard-Text, der in den Programmparametern für dieses Formular festgelegt wurde.  '''[[FastReport:_Standard-Formular-Texte|Weitere Informationen]]'''.
 
 
 
 
 
Darunter, im Bereich '''MasterDataKopftext''' steht der Text, der im Auftragskopf eingegeben wurde. Dieser Text ist also eine Ergänzung des Standard-Textes. '''[[REFLEX_Bedienungsanleitung_Auftragsverwaltung_Kopf#Text_im_Auftragskopf|Weitere Informationen]]'''.
 
 
 
 
 
 
 
 
 
=== [[Datei:7.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 Text der Positionen. Ein Child-Band deshalb, weil das Band ausgeblendet wird, wenn gar kein Text angegeben wurde.
 
* Ein '''Footer''' ("FussPositionen"), in dem die Summen, Zahlungskonditionen usw. stehen. Dieser Bereich wird unten unter "Fuss" behandelt.
 
 
 
 
 
[[Datei:Standard_AngebotAuftrag_04_Positionen.png]]
 
 
 
 
 
 
 
==== [[Datei:8.png]] HeaderPositionen, Überschrift über die Positionen ====
 
  
 
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 in der Auftragsposition das Kennzeichen "Neue Seite vorher" gesetzt wurde, soll ein Seitenwechsel durchgeführt werden, bevor dieser Bereich gedruckt wird.
+
* 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 im Kennzeichen 4 "Nein" steht, soll der Bereich unterdrückt werden.
+
* 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 das Kennzeichen "Seitenwechsel Vorher" gesetzt ist:
 
  if <Positionen."Seitenwechsel_0Nein_1Vorher_2Nachher"> = 1 then
 
    Engine.NewPage;                                  // Neue Seite, Seitenkopf usw. drucken
 
 
   
 
   
   // Kennzeichen 4 = Kapitelpreise Ja/Nein
+
   // Wenn in der Kapitel-Bezeichnung irgendwo 'Personal' steht: Unterdrücken!
   if <AuftragsKopf."KENNZ4"> = 'Nein' then
+
  // (Groß- Kleinschreibung ist egal)
   begin
+
   if Pos('PERSONAL',  Uppercase( <Positionen."Bezeichnung">) ) > 0 then  // Pos( SuchenNach, SuchenIn ) sucht nach Texten und bring die Position zurück oder 0.
     memoKapitelBetrag.Visible         := False;
+
    GroupHeaderKapitel.Visible := False
   end;
+
   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

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:

Ladeliste Standard 01 Vorschau.png



3 Bereiche

3.1 1.png 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

Ladeliste Standard 02 Seitenkopf.png


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.

Ladeliste Standard 03 Kopf.png


3.2.1 2.png 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 = 3.png 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 4.png 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;

Weitere Hinweise dazu



3.3 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.


Ladeliste Standard 04 Positionen.png



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;"
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 9.png 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.

Standard AngebotAuftrag 05 Fuss.png


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;

4 Links