Domanda

Ci sono accenni della risposta a questa domanda qui e là su questo sito, ma sto facendo una domanda leggermente diversa.

Da dove viene documenti Crystal Reports che questa sintassi non funziona?

Trim({PatientProfile.First}) + " "
    + Trim(Iif(
        IsNull({PatientProfile.Middle}) 
        , Trim({PatientProfile.Middle}) + " "
        , " "
        )
    )  
+ Trim({PatientProfile.Last})

So che la soluzione è

If IsNull({PatientProfile.Middle}) Then
    Trim({PatientProfile.First})
        + " " + Trim({PatientProfile.Last})
Else
    Trim({PatientProfile.First})
       + " " + Trim({PatientProfile.Middle})
       + " " + Trim({PatientProfile.Last})

ma come facciamo a capire che non possiamo usare la prima versione?

La documentazione per IsNull dice

  • valuta il campo specificato nel record corrente e restituisce true se il campo contiene un valore null

e Iif dà

  • [Restituisce] Truepart se l'espressione è True e falsepart se l'espressione è False. Il tipo del valore restituito è lo stesso del tipo di Truepart e falsepart.

Suppongo che se guardi quella linea di "tipo del valore di ritorno" si può ottenere, ma ...

È stato utile?

Soluzione

Credo CR valuta entrambe le parti IIFs veri e falsi. Perché avete "Trim ({} PatientProfile.Middle)" parte lì, che sarà valutato aganst valore nullo, CR formula valutatore sembra proprio sicuro.

Altri suggerimenti

  
    

Da dove viene documenti Crystal Reports che questa sintassi non funziona?

  

Dubito che ci sia ovunque abbastanza grande in tutto l'universo di documentare tutto ciò che non funziona in Crystal Reports ...

Lo so, sono anni di ritardo su questo, ma mi sono imbattuto in questa domanda durante il tentativo di capire la stessa cosa. Abbastanza divertente, non riuscivo nemmeno a trovare la risposta nella documentazione di Crystal Reports, ma invece in un collegamento a IBM .

Baiscally, se si sta utilizzando Crystal Reports 8.x o 10.x, ISNULL e IIF non funzionano insieme. Dal sito:

  

Causa

     

C'è un difetto in Crystal Reports 8.xe 10.x che impedisce la suddetta formula di funzionare correttamente. Il 'IIF' e comandi 'IsNull' non può funzionare insieme, e che comprende il tentativo di utilizzare "Not" per modificare il comando IsNull; per esempio, IIF (non IsNull ()).

     

Risolvere il problema

     

La soluzione è utilizzare un'istruzione "If-Then-Else". Ad esempio,

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

Quindi, se si sta utilizzando 8.x CR o 10.x (che ci sono), sei fuori di fortuna. Lo rende vero divertimento quando si concatenare più campi insieme e uno di essi potrebbe essere NULL.

provare questo:

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 ';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top