Variablen Und Berechnungen
Zuletzt geändert: 14.03.2026 17:06

Variablen und Berechnungen #

Die Variable-Komponente ist das zentrale Werkzeug, um im Bericht Berechnungen durchzuführen und deren Ergebnisse anzuzeigen. Anders als ein DBText-Feld, das direkt an eine Datenquelle gebunden ist, erhält eine Variable ihren Wert über ein Pascal-Script.

Die Variable-Komponente #

Eine Variable platzieren Sie wie jede andere Komponente im Berichts-Designer: Ziehen Sie sie aus der Komponentenleiste in ein Band.

Wichtige Eigenschaften #

EigenschaftBeschreibung
DatentypBestimmt den Typ des Wertes: String, Integer, Double, Boolean, DateTime
AnzeigeformatFormatiert die Ausgabe (z.B. #.##0,00 für Dezimalzahlen)
TextAlignmentTextausrichtung (links, rechts, zentriert)

Der OnCalc-Event #

Das Ereignis OnCalc wird für jeden Datensatz aufgerufen. Über den Parameter Value weisen Sie der Variablen ihren Wert zu.

procedure Variable1OnCalc(var Value: Variant);
begin
  Value := Positionen['Menge'] * Positionen['Einzelpreis'];
end;

Den OnCalc-Event anlegen #

Es gibt zwei Wege:

Weg 1 – Über das Kontextmenü:

  1. Rechtsklick auf die Variable im Design.
  2. Wählen Sie Berechnungen.
  3. Der Berechnungsdialog öffnet sich mit Code-Editor und Code-Toolbox.
  4. Geben Sie den Code ein.
  5. Klicken Sie OK.

Weg 2 – Über den Arbeitsbereich Berechnungen:

  1. Wechseln Sie zum Reiter Berechnungen.
  2. Wählen Sie die Variable in der Baumansicht.
  3. Rechtsklick auf OnCalc | Neu.
  4. Geben Sie den Code ein.

Einfache Berechnungen #

Feldwert anzeigen #

procedure Variable1OnCalc(var Value: Variant);
begin
  Value := Rechnungskopf['VkBrutto'];
end;

Felder verketten #

procedure Variable1OnCalc(var Value: Variant);
begin
  Value := Adresse['Vorname'] + ' ' + Adresse['Name1'];
end;

Berechneten Wert anzeigen #

procedure Variable1OnCalc(var Value: Variant);
begin
  Value := Positionen['Menge'] * Positionen['Einzelpreis'] * (1 - Positionen['Rabatt'] / 100);
end;

Bedingte Summen #

Gruppenweise Summe mit Bedingung #

Ein häufiger Anwendungsfall: Zählen oder summieren Sie nur bestimmte Datensätze.

procedure Variable1OnCalc(var Value: Variant);
begin
  { Nur Positionen über 100 EUR zählen }
  if Positionen['Einzelpreis'] > 100 then
    Value := Value + 1;
end;
Beachten Sie: Value := Value + 1 funktioniert, weil die Variable ihren vorherigen Wert zwischen den Aufrufen behält. Am Anfang jeder Gruppe wird Value automatisch auf den Startwert zurückgesetzt (je nach Datentyp 0, ’’ oder False).

Gesamtsumme mit Bedingung #

Für eine Gesamtsumme über alle Datensätze platzieren Sie die Variable im Summary-Band statt im Gruppenfuß:

procedure Variable1OnCalc(var Value: Variant);
begin
  if Positionen['Rabatt'] > 0 then
    Value := Value + Positionen['Menge'] * Positionen['Einzelpreis'];
end;

Lokale Variablen in Events #

Neben der Variable-Komponente können Sie auch lokale Variablen in jedem Event-Handler deklarieren:

procedure DetailBeforePrint;
var
  Gesamtpreis: Double;
  Bezeichnung: String;
begin
  Gesamtpreis := Positionen['Menge'] * Positionen['Einzelpreis'];
  Bezeichnung := Positionen['Kurztext1'];

  if Gesamtpreis > 1000 then
    LabelHinweis.Caption := Bezeichnung + ' (Großposition)'
  else
    LabelHinweis.Caption := Bezeichnung;
end;

Globale Variablen #

Wenn Sie einen Wert über mehrere Event-Handler hinweg benötigen, deklarieren Sie ihn als globale Variable (siehe Globale Deklarationen):

var
  Zeilennummer: Integer;
procedure GlobalOnCreate;
begin
  Zeilennummer := 0;
end;
procedure DetailBeforeGenerate;
begin
  Zeilennummer := Zeilennummer + 1;
end;

Datentypen #

Die wichtigsten Datentypen in Pascal-Script:

TypBeschreibungBeispiel
IntegerGanzzahl42
DoubleGleitkommazahl3.14
CurrencyWährungsbetrag (4 Nachstellen)99.95
StringText'Hallo'
BooleanWahrheitswertTrue, False
DateTimeDatum und/oder UhrzeitCurrentDate
VariantBeliebiger Typ (Standard für Variable-Komponenten)

Typische Fehler #

FehlerUrsacheLösung
“Undeclared identifier”Variable nicht deklariertvar-Abschnitt prüfen oder globale Deklaration anlegen
Summe stimmt nichtVariable im falschen Band platziertVariable ins Summary-Band (Gesamtsumme) oder Gruppenfuß (Gruppensumme) verschieben
Wert wird nicht angezeigtFalscher Datentyp der VariableDatentyp der Variable-Komponente auf den passenden Typ setzen (z.B. Double für Berechnungen)
Laufzeitfehler bei DivisionDivision durch NullPrüfung einbauen: if Nenner <> 0 then ...