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 #
| Eigenschaft | Beschreibung |
|---|---|
| Datentyp | Bestimmt den Typ des Wertes: String, Integer, Double, Boolean, DateTime |
| Anzeigeformat | Formatiert die Ausgabe (z.B. #.##0,00 für Dezimalzahlen) |
| TextAlignment | Textausrichtung (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ü:
- Rechtsklick auf die Variable im Design.
- Wählen Sie Berechnungen.
- Der Berechnungsdialog öffnet sich mit Code-Editor und Code-Toolbox.
- Geben Sie den Code ein.
- Klicken Sie OK.
Weg 2 – Über den Arbeitsbereich Berechnungen:
- Wechseln Sie zum Reiter Berechnungen.
- Wählen Sie die Variable in der Baumansicht.
- Rechtsklick auf
OnCalc| Neu. - 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 + 1funktioniert, weil die Variable ihren vorherigen Wert zwischen den Aufrufen behält. Am Anfang jeder Gruppe wirdValueautomatisch 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:
| Typ | Beschreibung | Beispiel |
|---|---|---|
Integer | Ganzzahl | 42 |
Double | Gleitkommazahl | 3.14 |
Currency | Währungsbetrag (4 Nachstellen) | 99.95 |
String | Text | 'Hallo' |
Boolean | Wahrheitswert | True, False |
DateTime | Datum und/oder Uhrzeit | CurrentDate |
Variant | Beliebiger Typ (Standard für Variable-Komponenten) |
Typische Fehler #
| Fehler | Ursache | Lösung |
|---|---|---|
| “Undeclared identifier” | Variable nicht deklariert | var-Abschnitt prüfen oder globale Deklaration anlegen |
| Summe stimmt nicht | Variable im falschen Band platziert | Variable ins Summary-Band (Gesamtsumme) oder Gruppenfuß (Gruppensumme) verschieben |
| Wert wird nicht angezeigt | Falscher Datentyp der Variable | Datentyp der Variable-Komponente auf den passenden Typ setzen (z.B. Double für Berechnungen) |
| Laufzeitfehler bei Division | Division durch Null | Prüfung einbauen: if Nenner <> 0 then ... |