REFLEX Standard-Report Rechnung

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

Der Report "Rechnung_Standard_Vxx.fr3" wird für den Druck einer Rechnung/Gutschrift verwendet. Er unterscheidet im Design zwischen Miete und Verkauf.


1.1 Verzeichnis, Basis-Report

Der Report befindet sich im Formular-Verzeichnis "Formular\Rechnung".

Der Report verwendet als Basis für den Kopf- und Fuss-Bereich den Basis-Report "BasisReport_01.fr3". Dieser muss im Verzeichnis "Formular" liegen.


1.2 Auftragskennzeichen

Das Desgin des Reports kann über Auftragskennzeichen gesteuert werden. Folgende Kennzeichen werden verwendet:

Kennzeichen Parameter-Text Mögliche Werte Auswirkung
<RechnungsKopf."KENNZ1"> Logo drucken Ja, Nein, Leer Bei Nein wird das Logo unterdrückt, bei allen anderen Werten wird das Logo gedruckt.
<RechnungsKopf."KENNZ2"> Rabatt drucken Ja, Nein, Leer Bei Nein wird der Rabatt in den Positionen und im Fuss unterdrückt, bei allen anderen Werten wird er gedruckt.
<RechnungsKopf."KENNZ3"> Einzelpreise Ja, Nein, Leer Bei Nein werden die Einzelpreise unterdrückt, bei allen anderen Werten werden die Einzelpreise gedruckt.
<RechnungsKopf."KENNZ4"> Kapitelpreise drucken Ja, Nein, Leer Bei Nein werden die Kapitel-Preise in den Positionen unterdrückt, bei allen anderen Werten werden sie gedruckt.
<RechnungsKopf."KENNZ5"> Artikel-Texte drucken Ja, Nein, Leer Bei Nein wird der Artikel-Text (unter der Artikel-Bezeichnung) in den Positionen unterdrückt, bei allen anderen Werten wird sie gedruckt.
<RechnungsKopf."KENNZ6"> Nur Kapitel-Überschriften Ja, Nein, Leer Bei Ja werden nur die Kapitel-Überschriften gedruckt, die Positionen werden komplett unterdrückt. Bei allen anderen Werten werden sie gedruckt.


  • Hinweis: "Gedruckt" heißt natürlich auch angezeigt, exportiert usw.


Siehe auch:



2 Vorschau

In der Vorschau sieht das Formular so aus:

Standard Rechnung 01 Vorschau.png



3 Bereiche

3.1 1.png Seitenkopf, Seitenfuss

Diese Bereiche kommen aus dem Basis-Report. Änderungen sollten immer im Basis-Report vorgenommen werden, weil diese sich auf alle anderen Reports auswirken, die den Basis-Report verwenden!


3.1.1 Der Bereich

Standard AngebotAuftrag 02 PageHeader.png

3.1.2 Code dazu

Im Ereignis OnBeforePrint des Bild-Objektes 'pictureBasisKopf wird das Logo ausgeschaltet, wenn das Rechnungskennzeichen 1 auf "Nein" steht:

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

Hinweis: Das "_inherited" ("ererbt") im Prozedur-Namen kommt daher, weil das Objekt ursprünglich aus dem Basis-Report kommt.

Siehe auch: FastReport: Steuerung des Report mit Rechnungskennzeichen.

3.2 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. if <Ansprechpartner."Briefanrede"> = '' then RechnungsKopfStr.Top := AnsprechpartnerBriefanrede.Top;)
hat dadurch keine Wirkung!

3.3 Der Auftagskopf

Die folgenden Bereiche gehören alle zum Rechnungskopf.

Die Bänder haben alle das Dataset RechnungsKopf. 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.

Standard AngebotAuftrag 03 Kopf.png


3.3.1 3.png Erste Seite: Formular-Titel, Datum, Seiten-Nummer

Der Bereich MasterRechnungskopf 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:

[Titel] Nr. [RechnungsKopf."RechNr"] 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
[RechnungsKopf."RechNr"] Hier wird die Rechnungsnummer 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. [RechnungsKopf."AuftrNr"] vom [RechnungsKopf."DruckDat"]
Hinweis
Der Titel für die Folgeseiten wird über den Header der Positionen HeaderPositionen ausgegeben.


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

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.3.3 5.png Auftragsdaten im Kopf

3.3.3.1 MasterDataKopfMiete

In diesem Bereich stehen die Kopfdaten für eine Miet-Rechnung.

Deshalb muss dieser Bereich ausgeblendet werden, wenn es um eine Verkaufs-Rechnung geht. Außerdem sollen die Aufbau, Abbau, Probe-Felder ausgeblendet werden, wenn dort kein Text eingegeben wurde.

Dazu gibt es diesen Code in MasterDataKopfMieteOnBeforePrint:

procedure MasterDataKopfMieteOnBeforePrint(Sender: TfrxComponent);
begin
  if <RechnungsKopf."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 <RechnungsKopf."Bereich_1Verkauf_2Miete_3Mietverkauf"> (es heißt wirklich so!) 1 steht, ist es eine Verkaufs-Rechnung, bei 2 eine Miet-Rechnung, bei 3 ein Mietartikel-Verkaufen-Rechnung.



3.3.3.2 MasterDataKopfVerkauf

In diesem Bereich stehen die Kopfdaten für eine Verkaufs-Rechnung.

Deshalb muss dieser Bereich ausgeblendet werden, wenn es um eine Miet-Rechnung geht. Dazu gibt es den Code in MasterDataKopfMieteOnBeforePrint, wie oben beschrieben.


3.3.3.3 MasterDataVARaum

In diesem Bereich stehen die Veranstaltungs-Raum und -VA-Ort (Kurzname) für eine Miet-Rechnung.

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 ( <RechnungsKopf."VA-OrtKurzname"> =  ) and ( <RechnungsKopf."VA-Raum"> =  ) then
    MasterDataVARaum.Visible := False;
end;

Hinweis
Der VA-Ort-Name wird im Rechnungskopf unter dem VA-Ort optional angegeben.


3.3.3.4 MasterKoptext

In diesem Bereich stehen die Ansprechpartner-Daten des Kopfes.

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.3.4 6.png Standardtext, Text aus Kopf

Im Bereich MasterDataStandardTextKopf steht der Standard-Text, der in den Programmparametern für dieses Formular festgelegt wurde. Weitere Informationen.


Darunter, im Bereich MasterDataKopftext steht der Text, der im Rechnungskopf eingegeben wurde. Dieser Text ist also eine Ergänzung des Standard-Textes. Weitere Informationen.



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


Standard AngebotAuftrag 04 Positionen.png


3.4.1 8.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.4.2 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 in der Rechnungsposition das Kennzeichen "Neue Seite vorher" 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.

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 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
  if <RechnungsKopf."KENNZ4"> = 'Nein' then
  begin
    memoKapitelBetrag.Visible         := False;
  end;
end;



3.4.3 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.4.4 DetailPositionen

In diesem Bereich werden die eigentlichen Rechnungspositionen 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 <RechnungsKopf."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 <RechStatistik."AnzahlRabattPos"> = 0 then
   memoHeaderRabattTitel.Visible := False;
Hinweis
  • Das Programm stellt das Feld <RechStatistik."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 <RechnungsKopf."KENNZ2"> = 'Nein' then
 begin
   memoHeaderRabattTitel.Visible := False;
   memoPositionenRabattProz.Visible := False;
   RechStatistikSummeRabatt.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 ( <RechnungsKopf."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 <RechnungsKopf."KENNZ3"> = 'Nein' then
 begin
   memoPosEinzelPreis.Visible := False;
   memoPositionenRabattProz.Visible := False;
   memoPosGesBetrag.Visible := False;
 end;
Seitenwechsel
Wenn das Kennzeichen "Seitenwechsel Vorher" in einer Rechnungspositionen 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.4.5 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;



3.5 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 RechnungsFuss

3.5.1 Code

Der Code hier ist überschaubar und befindet sich im Ereignis FussPositionenOnBeforePrint:

Rabattfeld
optional ausschalten:
 // Kennzeichen 2 = Rabatt Ja/Nein
 if <RechnungsKopf."KENNZ2"> = 'Nein' then
 begin
   RechStatistikSummeRabatt.Visible:= False;
   MemoFooterGespreis.Visible:= False;
 end;


Wenn kein Mehrwertsteuer angegeben ist
Felder ausschalten:
 // Ohne Mwst.: Mwst-Felder unterdrücken:
 if <RechnungsFuss."MwstBetrag"> = 0 then
 begin
   RechnungsFussMwstBetrag.Visible:= False;
   RechnungsFussMwstSatzProzent.Visible:= False;
   memoFussGesamtbetragText.Visible:= False;
   RechnungsFussGesamtBetragBrutto.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.
Gutschrift
Zahlungskondition unterdrücken:
Bei einer Gutschrift sollen die Zahlungskonditionen nicht gedruckt werden:
 // Gutschrift: Zahlungskondition unterdrücken:
 if ( <RechnungsKopf."StatusNr"> = 6 )        // Gutschrift                                                                
 or ( <RechnungsKopf."StatusNr"> = 106 ) then // Gutschrift im Archiv
 begin              
   RechnungsFussZahlungTitel.Visible := False;                                        
   RechnungsFussZahlungBisDatum.Visible := False;
 end;


Skonto-Datum und -Betrag
Das Skonto-Feld nur drucken, wenn ein Skonto angegeben ist:
 procedure RechnungsFussSkonto1BisDatumOnBeforePrint(Sender: TfrxComponent);
 begin
   if <RechnungsFuss."Skonto1Betrag"> = 0 then
     RechnungsFussSkonto1BisDatum.Visible := False; 
 end;


3.5.2 Lieferschein(e) im Rechnungsformular

Aus steuerrechtlichen Gründen kann es notwendig sein, den/die Lieferschein(e) im Rechnungsformular aufzuführen, mit denen die Leistung erbracht/ausgeführt wurde.

Beispiel:

FastReport Rechnung LieferscheinNummern.png

Dazu stellt das Druckprogramm folgendes zur Verfügung:

Tabelle "LieferscheinNummern"
In dieser Tabelle stehen die Lieferschein-Nummer(n), das Druck- und Erstellungsdatum des jeweiligen Lieferscheins, der für den Auftrag, zu der die Rechnung gehört, erzeugt wurde.
(Rechnung ⇒ Zu Auftrag ⇒ Lieferscheine)
Wenn diese Tabelle im Report nicht angezeigt wird: Menü Report⇒Daten. Dataset (Tabelle) "LieferscheinNummern" anklicken.
Siehe auch FastReport Dataset (Tabelle) wird im Report nicht angezeigt.
Feld "AnzahlLieferscheine" in der Tabelle "RechStatistik"
In diesem Feld steht die Anzahl der gefundenen Lieferscheine zu der Rechnung (bzw. dem zugrundeliegenden Auftrag)

Vorgehensweise:

  • Zuerst fügt man ein neues Detail-Band in den Report ein, in dem Beispiel unten nennt man es "DetailDataLieferscheinNrn".
  • In dieses Band zieht man die gewünschten Felder aus der Tabelle "LieferscheinNummern".
  • Dann fügt man ein Header-Band (Kopf) in den Report ein und zieht ihn über das neue Detail-Band. Dort fügt man nun ein Textfeld (Memo) für die Überschrift ein.

Beispiel:

FastReport Rechnung LieferscheinNummern Band.png


Wenn es keinen Lieferschein gibt
Dann gibt es auch keine Daten in der Tabelle "LieferscheinNummern", allerdings würde die Überschrift trotzdem gedruckt werden.
Um das zu verhindern, kann man im OnBeforePrint-Ereignis folgenden Code schreiben:
procedure HeaderLieferscheinNrnOnBeforePrint(Sender: TfrxComponent);
begin
  // Unterdrücken, wenn´s keine Lieferscheine gibt:
  if <RechStatistik."AnzahlLieferscheine"> = 0 then
    HeaderLieferscheinNrn.Visible := False;
end;


In Spalten drucken
Um Platz zu sparen, kann man die Lieferschein-Tabelle auch nebeneinander drucken. Dazu:
Klicken Sie auf das Detail-Datenbank.
Im Objektinspektor links setzen Sie die Eigenschaft Columns z.B. auf 3 und ColumnWidth z.B. auf 6.


4 Optionen

Wie man Anzahlungsrechnungen in einer Schlussrechnung aufführen kann wird hier beschrieben.

Wie man die Zahlungskonditionen mit Skonto ausgeben kann wird hier beschrieben.

Wie man den schweizer Einzahlungsschein erstellt wird hier beschrieben.

5 Updates

Version Datum Beschreibung
V10 28.12.2015 Bei Gutschriften werden die Zahlungskonditionen unterdrückt.
V11 12.02.2016 Lieferschein-Nummern im Fuss. Beschreibung dazu siehe oben.

6 Standard-Reports

7 Links