Pergunta

Há indícios de que a resposta a esta pergunta aqui e ali neste site, mas eu estou fazendo uma pergunta ligeiramente diferente.

Onde é que documento Crystal Reports que esta sintaxe não funciona?

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

Eu sei que a solução é

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

Mas como é que vamos descobrir que não podemos usar a primeira versão?

A documentação para IsNull diz

  • Avalia o campo especificado no registro e retorna true atual se o campo contém um valor nulo

e Iif dá

  • [Returns] truepart se expressão é verdadeira e falsePart se a expressão é falsa. O tipo do valor retornado é o mesmo que o tipo de truepart e falsePart.

Suponho que se você olhar para essa linha sobre o "tipo do valor de retorno", você pode obtê-lo, mas ...

Foi útil?

Solução

Eu acho CR avalia tanto IIFs partes verdadeiras e falsas. Porque você tem "Trim ({PatientProfile.Middle})" parte lá, o que será avaliado aganst valor nulo, CR fórmula avaliador parece apenas falhar.

Outras dicas

Onde é que documento Crystal Reports que esta sintaxe não funciona?

Duvido que haja qualquer lugar suficientemente grande em todo o universo de documentar tudo o que não funciona em Crystal Reports ...

Eu sei que eu sou anos de atraso em um presente, mas deparei-me com esta questão, enquanto tentando descobrir a mesma coisa. Engraçado o suficiente, eu não poderia mesmo encontrar a resposta na documentação do Crystal Reports, mas em vez de um link para IBM .

Baiscally, se você estiver usando o Crystal Reports 8.x ou 10.x, ISNULL e IIF não funcionam em conjunto. A partir do site:

Causa

Há um defeito no Crystal Reports 8.x e 10.x que impede a fórmula acima de funcionar corretamente. O 'IIF' e 'IsNull' comandos não podem funcionar em conjunto, e que inclui a tentativa de usar "Não" para modificar o comando IsNull; por exemplo, IIF (Not IsNull ()).

Resolver o problema

A solução é usar uma instrução "If-Then-Else". Por exemplo,

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

Então, se você estiver usando CR 8.x ou 10.x (que são), você está sem sorte. Isso torna mais verdadeira diversão quando você está concatenando vários campos juntos e um deles pode ser NULL.

tente o seguinte:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top