crystal-reports - else - is not null crystal reports
Fórmula Crystal Reports: IsNull+Iif (4)
Creo que CR evalúa tanto las partes verdaderas como las falsas de IIF. Debido a que tiene la parte "Recortar ({PatientProfile.Middle})" que se evaluará como un valor nulo, el evaluador de la fórmula CR parece fallar.
Hay indicios de la respuesta a esta pregunta aquí y allá en este sitio, pero estoy haciendo una pregunta ligeramente diferente.
¿Dónde documenta Crystal Reports que esta sintaxis no funciona?
Trim({PatientProfile.First}) + " "
+ Trim(Iif(
IsNull({PatientProfile.Middle})
, Trim({PatientProfile.Middle}) + " "
, " "
)
)
+ Trim({PatientProfile.Last})
Sé que la solución es
If IsNull({PatientProfile.Middle}) Then
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Last})
Else
Trim({PatientProfile.First})
+ " " + Trim({PatientProfile.Middle})
+ " " + Trim({PatientProfile.Last})
pero ¿cómo se supone que debemos descubrir que no podemos usar la primera versión?
La documentación para IsNull dice
- Evalúa el campo especificado en el registro actual y devuelve TRUE si el campo contiene un valor nulo
e Iif da
- [Devuelve] truePart si la expresión es True y falsePart si la expresión es False. El tipo del valor devuelto es el mismo que el tipo de truePart y falsePart.
Supongo que si miras esa línea sobre "tipo de valor de retorno" puedes obtenerla, pero ...
¿Dónde documenta Crystal Reports que esta sintaxis no funciona?
Dudo que haya un lugar lo suficientemente grande en todo el universo para documentar todo lo que no funciona en Crystal Reports ...
Sé que llegué años atrás en esto, pero me encontré con esta pregunta al tratar de descubrir lo mismo. Curiosamente, ni siquiera pude encontrar la respuesta en la documentación de Crystal Reports, sino en un enlace a IBM .
Baiscally, si está utilizando Crystal Reports 8.xo 10.x, ISNULL
e IIF
no funcionan juntos. Desde el sitio:
Porque
Existe un defecto en Crystal Reports 8.xy 10.x que impide que la fórmula anterior funcione correctamente. Los comandos ''IIF'' e ''IsNull'' no pueden funcionar juntos, y eso incluye intentar usar "No" para modificar el comando IsNull; por ejemplo, IIF (Not IsNull ()).
Resolviendo el problema
La solución consiste en utilizar una declaración "If-Then-Else". Por ejemplo,
If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress"
Entonces, si usa CR 8.x o 10.x (que somos), no tiene suerte. Lo hace REALMENTE divertido cuando concatenas varios campos juntos y uno de ellos puede ser NULO.
prueba esto:
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 '';