Crystal Reports Formel: IsNull + Iif
-
22-08-2019 - |
Frage
Es gibt Hinweise auf die Antwort auf diese Frage hier und da auf dieser Seite, aber ich bin eine etwas andere Frage zu stellen.
Wo Crystal Reports Dokument, dass diese Syntax funktioniert nicht?
Trim({PatientProfile.First}) + " "
+ Trim(Iif(
IsNull({PatientProfile.Middle})
, Trim({PatientProfile.Middle}) + " "
, " "
)
)
+ Trim({PatientProfile.Last})
Ich weiß, dass die Lösung
If IsNull({PatientProfile.Middle}) Then
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Last})
Else
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Middle})
+ " " + Trim({PatientProfile.Last})
aber wie sollen wir uns nicht, um herauszufinden, die erste Version verwenden kann?
Die Dokumentation für IsNull sagt
- Wertet das Feld im aktuellen Datensatz angegeben und gibt TRUE zurück, wenn das Feld einen Nullwert enthält
und Iif gibt
- [Returns] truePart wenn Ausdruck True and falsepart ist, wenn Ausdruck falsch ist. Der Typ des zurückgegebene Wert ist der gleiche wie der Typ von truePart und falsepart.
Ich nehme an, wenn Sie in dieser Zeile über „Typ des Rückgabewert“ starren Sie können es, aber ...
Lösung
Ich denke, CR wertet beide IIFs wahre und falsche Teile. Weil Sie „Trim ({PatientProfile.Middle})“ Teil gibt, der aganst Nullwert bewertet werden, CR Formelauswerter scheint nicht nur.
Andere Tipps
Wo Crystal Reports Dokument, dass diese Syntax funktioniert nicht?
Ich bezweifle, dass es im ganzen Universum überall groß genug ist, alles zu dokumentieren, die nicht in Crystal Report funktionieren ...
Ich weiß, ich bin Jahre zu spät auf diesen einen, aber ich kam auf diese Frage bei dem Versuch, die gleiche Sache, um herauszufinden. Komischerweise konnte ich nicht einmal die Antwort in Crystal Reports-Dokumentation finden, sondern in einem Link zu IBM .
Baiscally, wenn Sie mit Crystal Reports 8.x oder 10.x, ISNULL
und IIF
nicht zusammenarbeiten. Von der Website:
Ursache
Es ist ein Defekt in Crystal Reports 8.x und 10.x, die von der Arbeit richtig mit der obigen Formel verhindert. Die ‚IIF‘ und ‚IsNull‘ Befehle Funktion kann nicht zusammen, und das schließt die IsNull Befehl versucht, die Verwendung von „Not“ zu verändern; zum Beispiel IIF (nicht IsNull ()).
Problemlösung
Die Abhilfe ist es, eine "If-Then-Else" Anweisung zu verwenden. Zum Beispiel:
If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress"
Wenn Sie also CR 8.x oder 10.x verwenden (was wir sind), sind Sie kein Glück. Es macht es richtig Spaß, wenn Sie mehrere Felder zusammen verketten und einer von ihnen könnte NULL sein.
versuchen Sie dies:
currencyvar tt;
currencyvar dect;
tt :={ship.comm_amount};
dect := tt - Truncate(tt);
tt := truncate(tt);
dect := dect * 100;
if dect = 0 then
UPPERCASE('$ ' + ToWords (tt,0 )) + ' ONLY'
else
UPPERCASE('$ ' + ToWords (tt,0) + ' And ' + ToWords(dect,0)) + ' ONLY ';