Globale Deklarationen
Zuletzt geändert: 14.03.2026 17:06

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 #

  1. Im Arbeitsbereich Berechnungen: Rechtsklick | Modul.
  2. Klicken Sie auf Deklarationen | Constants.
  3. 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 #

  1. Im Arbeitsbereich Berechnungen: Rechtsklick | Modul.
  2. Klicken Sie auf Deklarationen | Variables.
  3. 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 #

  1. Im Arbeitsbereich Berechnungen: Rechtsklick | Modul.
  2. Klicken Sie auf Programme.
  3. 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 #

  1. 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. MwstSatz ist lesbarer als 19.0 und 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 OnCreate initialisiert werden, damit der Bericht auch bei mehrfachem Drucken korrekte Ergebnisse liefert.
  • Objekte freigeben – Alles was Sie mit .Create erzeugen, muss in OnDestroy mit .Free freigegeben werden.