CrystalReports: Mengenfeld mit oder ohne Nachkommastellen

Aus GEVITAS
Version vom 8. Mai 2014, 09:28 Uhr von GevitasSupport (Diskussion | Beiträge) (Dynamische Formatierung des Mengenfeldes)
Wechseln zu: Navigation, Suche

1 Allgemeines

Das Mengenfeld (z.B. in einer Rechnung) wird normalerweise mit einer fest eingestellten Anzahl von Nachkommastellen (Dezimalstellen) gedruckt. Wenn man z.B. niemals gebrochene Zahlen fakturiert sondern nur ganzzahlige Mengen hat, wird man im Formular (im Report) die Formatierung so einstellen, dass keine Dezimalstellen ausgegeben werden. Hat man nun aber ausnahmsweise doch mal Dezimalstellen in der Menge, werden diese im Formular aufgerundet und ohne Nachkommastellen ausgegeben. Dieser Artikel beschreibt, wie man das Mengenfeld in CrystalReports dynamisch formatieren kann.

2 Feste Formatierung des Mengenfeldes

Normalerweise wird das Mengenfeld in CrystalReports fest formatiert:

CrystalReports Bsp Mengenfeld FesteFormatierung.png

In diesem Fall werden keine Dezimalstellen ausgegeben!

  • Diesen Dialog öffnet man mit der rechten Maustaste über dem Feld --> Feld Formatieren-->Anpassen.

3 Dynamische Formatierung des Mengenfeldes

3.1 Dezimalstellen

Man kann die Dezimalstellen auch über Formeln steuern. Das bedeutet, dass die fest vorgegebene Formatierung nicht verwendet wird, sondern anhand einer Formel-Abfrage bestimmt wird, ob bzw. wieviel Dezimalstellen ausgegeben werden sollen. Dazu klickt man im Formatierungsdialog auf die Schaltfläche neben der Dezimal-Angabe...

CrystalReports Bsp Mengenfeld Formel Btn.png

und gibt folgende Formel ein:

// Wenn die Menge Nachkommastellen enthält, mit 2 NK drucken, sonst ohne:
if {RECHPO.AUFTRMENGE} - Int({RECHPO.AUFTRMENGE}) > 0 then
   2
else
   0;
Erklärung
// Wenn die Menge Nachkommastellen enthält, mit 2 NK drucken, sonst ohne: ist ein Kommentar, der Aufgabe der Formel beschreibt. Kommentar sind wichtig und sollten bei keiner Formel fehlen!
if {RECHPO.AUFTRMENGE} - Int({RECHPO.AUFTRMENGE}) > 0 then entscheidet darüber, ob Dezimalstellen ausgegeben werden sollen oder nicht. Die CrystalReports-Funktion Int(xxx) (von "Integer" = Ganze Zahl) wandelt eine Zahl mit Nachkommastellen in eine Zahl ohne Nachkommastellen um. Aus 1,75 wird also 1, aus 2 wird 2 usw. Wenn man nun von einer Zahl den ganzzahligen Wert abzieht (z.B. 1,75 - 1) und erhält einen Rest (z.B. 0,75) weiß man, dass die Zahl Dezimalstellen enthält!
In diesem Fall gibt die Formel das Ergebnis 2 zurück, also 2 Dezimalstellen sollen für die Formatierung der Zahl verwendet werden.
Ergibt die Abfrage oben 0, gibt die Formel das Ergebnis 0 zurück, also keine Dezimalstellen sollen für die Formatierung der Zahl verwendet werden.

3.2 Runden

Die gleiche Formel wie oben muss man auch für das Runden der Zahl einsetzen.

4 Links