Globale Deklarationen #
Globale Deklarationen sind Variablen, Konstanten, Prozeduren und Funktionen, die im gesamten Bericht sichtbar sind. Sie werden in der Modul-Ansicht des Arbeitsbereichs Berechnungen verwaltet und können von jedem Event-Handler aufgerufen werden.
Globale Konstanten #
Konstanten eignen sich für Werte, die sich während der Berichtsgenerierung nicht ändern: Steuersätze, Schwellenwerte oder feste Texte.
Anlegen #
- Im Arbeitsbereich Berechnungen: Rechtsklick | Modul.
- Klicken Sie auf Deklarationen | Constants.
- Rechtsklick | Neu, falls noch keine Konstanten vorhanden.
Syntax #
const
MwstSatz = 19.0;
Waehrung = 'EUR';
MaxPositionen = 50;
FirmenName = 'EULANDA Software GmbH';
Verwendung #
procedure DetailBeforePrint;
var
Brutto: Double;
begin
Brutto := Positionen['Netto'] * (1 + MwstSatz / 100);
LabelBrutto.Caption := FormatFloat('#,##0.00', Brutto) + ' ' + Waehrung;
end;
Globale Variablen #
Globale Variablen behalten ihren Wert über die gesamte Berichtsgenerierung. Sie eignen sich für Zähler, Zwischensummen oder Zustandsinformationen.
Anlegen #
- Im Arbeitsbereich Berechnungen: Rechtsklick | Modul.
- Klicken Sie auf Deklarationen | Variables.
- Rechtsklick | Neu, falls noch keine Variablen vorhanden.
Syntax #
var
Seitenzaehler: Integer;
GesamtRabatt: Double;
LetzteKategorie: String;
HatSonderposten: Boolean;
Initialisierung #
Globale Variablen sollten Sie im OnCreate-Ereignis initialisieren:
procedure GlobalOnCreate;
begin
Seitenzaehler := 0;
GesamtRabatt := 0.0;
LetzteKategorie := '';
HatSonderposten := False;
end;
Globale Prozeduren #
Wenn Sie den gleichen Code an mehreren Stellen benötigen, lagern Sie ihn in eine globale Prozedur aus. Das macht Ihre Event-Handler übersichtlicher und Änderungen müssen nur an einer Stelle gemacht werden.
Anlegen #
- Im Arbeitsbereich Berechnungen: Rechtsklick | Modul.
- Klicken Sie auf Programme.
- Rechtsklick in der Listenansicht | Neue Prozedur.
Beispiel #
procedure FormatiereBetrag(Lbl: TppLabel; Betrag: Double);
begin
Lbl.Caption := FormatFloat('#,##0.00', Betrag);
if Betrag < 0 then
Lbl.Font.Color := clRed
else
Lbl.Font.Color := clBlack;
end;
Aufruf in einem Event-Handler:
procedure DetailBeforePrint;
begin
FormatiereBetrag(LabelNetto, Positionen['Netto']);
FormatiereBetrag(LabelBrutto, Positionen['Brutto']);
end;
Globale Funktionen #
Funktionen geben im Unterschied zu Prozeduren einen Wert zurück.
Anlegen #
- Wie bei Prozeduren, aber: Rechtsklick | Neue Funktion.
Beispiel #
function BruttoPreis(Netto: Double; MwSt: Double): Double;
begin
Result := Netto * (1 + MwSt / 100);
end;
function KundenAnrede(Anrede: String; Name: String): String;
begin
if Anrede = 'Herr' then
Result := 'Sehr geehrter Herr ' + Name
else if Anrede = 'Frau' then
Result := 'Sehr geehrte Frau ' + Name
else
Result := 'Sehr geehrte Damen und Herren';
end;
Sichtbarkeit und Gültigkeitsbereich #
Globale Deklarationen sind sichtbar:
- In allen Event-Handlern des aktuellen Berichts.
- In allen Unterberichten (Subreports) unterhalb des aktuellen Berichts.
Die Auflösung erfolgt von innen nach außen: Wenn ein Bezeichner im aktuellen Modul nicht gefunden wird, sucht der Compiler im übergeordneten Bericht, dann in dessen übergeordnetem Bericht usw.
Hauptbericht
├── Globale Variable: FirmenName
├── Unterbericht 1
│ ├── kann FirmenName lesen ✓
│ └── Unterbericht 1a
│ └── kann FirmenName lesen ✓
└── Unterbericht 2
└── kann FirmenName lesen ✓
Tipp: Deklarieren Sie globale Elemente immer im Hauptbericht, wenn sie von Unterberichten benötigt werden. Ein Unterbericht kann nicht auf Deklarationen eines gleichrangigen Unterberichts zugreifen.
Praxisbeispiel: Globale StringList #
Eine TStringList eignet sich, um zur Laufzeit Daten zu sammeln, die später im Bericht ausgegeben werden:
var
Hinweise: TStringList;
procedure GlobalOnCreate;
begin
Hinweise := TStringList.Create;
end;
procedure GlobalOnDestroy;
begin
Hinweise.Free;
end;
procedure DetailBeforeGenerate;
begin
{ Artikel mit Mindesthaltbarkeitsdatum sammeln }
if Artikel['MHD'] <> '' then
Hinweise.Add('Artikel ' + Artikel['ArtNummer'] + ': MHD beachten');
end;
procedure SummaryBeforePrint;
var
I: Integer;
begin
if Hinweise.Count > 0 then
begin
MemoHinweise.Lines.Clear;
MemoHinweise.Lines.Add('Hinweise:');
for I := 0 to Hinweise.Count - 1 do
MemoHinweise.Lines.Add('- ' + Hinweise[I]);
MemoHinweise.Visible := True;
end
else
MemoHinweise.Visible := False;
end;
Tipps zur Organisation #
- Konstanten statt Magic Numbers – Verwenden Sie benannte Konstanten statt hartcodierter Werte.
MwstSatzist lesbarer als19.0und muss nur an einer Stelle geändert werden. - Hilfsfunktionen auslagern – Wiederkehrende Logik gehört in globale Funktionen (siehe auch Eigene Funktionen).
- Initialisierung nicht vergessen – Globale Variablen sollten immer in
OnCreateinitialisiert werden, damit der Bericht auch bei mehrfachem Drucken korrekte Ergebnisse liefert. - Objekte freigeben – Alles was Sie mit
.Createerzeugen, muss inOnDestroymit.Freefreigegeben werden.