Pregunta

Hay indicios de que la respuesta a esta pregunta aquí y allá en este sitio, pero yo estoy haciendo una pregunta un poco diferente.

¿De dónde viene documento de 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 vamos a averiguar que no podemos usar la primera versión?

La documentación para EsNulo dice

  • evalúa el campo especificado en el registro actual y devuelve verdadero si el campo contiene un valor nulo

y Iif da

  • [Vuelve] truepart si la expresión es verdadera y falsepart si la expresión es falsa. El tipo del valor devuelto es el mismo que el tipo de truepart y falsepart.

supongo que si usted mira fijamente esa línea de "tipo del valor de retorno" lo puede conseguir, pero ...

¿Fue útil?

Solución

Creo CR evalúa ambas partes IIFs verdaderos y falsos. Debido a que tiene "Trim ({} PatientProfile.Middle)" parte allí, que será evaluado aganst valor nulo, CR fórmula evaluador parece simplemente fallan.

Otros consejos

  
    

¿De dónde viene documento de Crystal Reports que esta sintaxis no funciona?

  

Dudo que haya cualquier lugar lo suficientemente grande en el universo entero para documentar todo lo que no funciona en Crystal Reports ...

Sé que soy años de retraso en este caso, pero me encontré con esta pregunta al tratar de averiguar lo mismo. Curiosamente, ni siquiera podía encontrar la respuesta en la documentación de Crystal Reports, pero en lugar de un enlace a IBM .

baiscally, si utiliza 8.x Crystal Reports o 10.x, ISNULL y IIF no funcionan juntos. Desde el sitio:

  

Causa

     

No es un defecto en 8.xy 10.x Crystal Reports que previene la fórmula anterior funcione correctamente. El 'IIF' y los comandos 'EsNulo' puede no funcionar juntos, y que incluye el intento de usar "No" para modificar el comando EsNulo; por ejemplo, IIF (No IsNull ()).

     

La solución del problema

     

La solución consiste en utilizar una sentencia "If-Then-Else". Por ejemplo,

If IsNull({~CRPT_TMP0001_ttx.install_date}) Then "TBD" Else "In Progress"

Así que si usted está utilizando 8.x CR o 10.x (que somos), estás de suerte. Esto hace que sea muy divertido cuando se está concatenando múltiples campos juntos y uno de ellos puede ser NULL.

intente lo siguiente:

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 ';
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top