Question

Il y a des indices de la réponse à cette question ici et là sur ce site, mais je me pose une question légèrement différente.

Où documents Crystal Reports que cette syntaxe ne fonctionne pas?

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

Je sais que la solution est

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

mais comment sommes-nous censés comprendre que nous ne pouvons pas utiliser la première version?

La documentation IsNull dit

  • Évalue le domaine spécifié dans l'enregistrement en cours et retourne TRUE si le champ contient une valeur nulle

et Iif donne

  • [retour] truepart si l'expression est vraie et si falsepart expression est fausse. Le type de la valeur retournée est le même que le type de truepart et falsepart.

Je suppose que si vous regardez à cette ligne de « type de la valeur de retour » vous pouvez l'obtenir, mais ...

Était-ce utile?

La solution

Je pense que CR évalue à la fois des pièces IIF vrai et faux. Parce que vous avez "Trim ({PatientProfile.Middle})" partie là, qui sera évalué aganst valeur null, évaluateur de formule CR semble échouerait.

Autres conseils

  
    

Où documents Crystal Reports que cette syntaxe ne fonctionne pas?

  

Je doute qu'il y ait tout lieu assez grand dans l'univers entier pour documenter tout ce qui ne fonctionne pas dans Crystal Reports ...

Je sais que je suis en retard années celui-ci, mais je suis tombé sur cette question, tout en essayant de comprendre la même chose. Assez drôle, je ne pouvais même pas trouver la réponse dans la documentation de Crystal Reports, mais plutôt dans un lien à IBM .

baiscally, si vous utilisez Crystal Reports 8.x ou 10.x, ISNULL et IIF ne fonctionnent pas ensemble. Sur le site:

  

Cause

     

Il y a un défaut dans Crystal Reports 8.x et 10.x qui empêche la formule ci-dessus de fonctionner correctement. Les commandes « IIF » et « IsNull » ne peut pas fonctionner en même temps, et qui comprend de tenter d'utiliser « Non » pour modifier la commande IsNull; par exemple, IIF (non IsNull ()).

     

Résoudre le problème

     

La solution consiste à utiliser une instruction "If-Then-Else". Par exemple,

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

Donc, si vous utilisez CR 8.x ou 10.x (que nous sommes), vous êtes hors de la chance. Il est amusant REAL lorsque vous concaténez plusieurs champs ensemble et l'un d'entre eux peut être NULL.

essayez ceci:

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 ';
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top