CrystalReports: Mengenfeld mit oder ohne Nachkommastellen: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Dynamische Formatierung des Mengenfeldes)
K (Dezimalstellen)
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Allgemeines ==
 
== 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.
+
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.
  
 
== Feste Formatierung des Mengenfeldes ==
 
== Feste Formatierung des Mengenfeldes ==
Zeile 24: Zeile 24:
  
 
  // Wenn die Menge Nachkommastellen enthält, mit 2 NK drucken, sonst ohne:
 
  // Wenn die Menge Nachkommastellen enthält, mit 2 NK drucken, sonst ohne:
  if {RECHPO.AUFTRMENGE} - Int({RECHPO.AUFTRMENGE}) > 0 then
+
  if {RechPo.AuftrMenge} - Int({RechPo.AuftrMenge}) > 0 then
 
     2
 
     2
 
  else
 
  else
Zeile 30: Zeile 30:
  
 
;Erklärung:
 
;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!
+
*'''"// Wenn die Menge..."'''
:In diesem Fall gibt die Formel das Ergebnis '''2''' zurück, also 2 Dezimalstellen sollen für die Formatierung der Zahl verwendet werden.
+
:Das ist ein Kommentar, der Aufgabe der Formel beschreibt. Kommentare sind wichtig und sollten bei keiner Formel fehlen!
 +
 
 +
*'''"if {RechPo.AuftrMenge} - Int({RechPo.AuftrMenge}) > 0 then"''':
 +
:Diese Zeile 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!
 +
 
 +
:Wenn die Abfrage einen Wert '''größer als 0''' ergibt, 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.
 
: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.
 +
 +
;Hinweise:
 +
 +
* Wenn man das für ein Auftrags-Formular machen will, heißt das Feld
 +
 +
    {MAufPo.AuftrMenge}
 +
 +
* Wenn Ihre Datenbank mit dem '''mySQL©-Server''' arbeitet, müssen die Feldnamen u.U. in '''Kleinbuchstaben''' angeben.
 +
 +
* Wenn Ihre Datenbank mit dem '''ORACLE©''' arbeitet, müssen die Feldnamen u.U. in '''Großbuchstaben''' angeben.
 +
 +
* Wenn Ihre Datenbank mit dem '''Microsoft-SQL-Server©''' arbeitet, ist die Schreibweise egal.
  
 
=== Runden ===
 
=== Runden ===

Aktuelle Version vom 8. Mai 2014, 09:40 Uhr

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..."
Das ist ein Kommentar, der Aufgabe der Formel beschreibt. Kommentare sind wichtig und sollten bei keiner Formel fehlen!
  • "if {RechPo.AuftrMenge} - Int({RechPo.AuftrMenge}) > 0 then":
Diese Zeile 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!
Wenn die Abfrage einen Wert größer als 0 ergibt, 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.
Hinweise
  • Wenn man das für ein Auftrags-Formular machen will, heißt das Feld
   {MAufPo.AuftrMenge}
  • Wenn Ihre Datenbank mit dem mySQL©-Server arbeitet, müssen die Feldnamen u.U. in Kleinbuchstaben angeben.
  • Wenn Ihre Datenbank mit dem ORACLE© arbeitet, müssen die Feldnamen u.U. in Großbuchstaben angeben.
  • Wenn Ihre Datenbank mit dem Microsoft-SQL-Server© arbeitet, ist die Schreibweise egal.

3.2 Runden

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

4 Links