Logical Tests Using OR in Crystal Reports
Consider these two formulas in Crystal Reports:
1 |
if isnull({Table.Value}) or tonumber(Table.Value}) = 0 then "Rusult 1" else "Result 2" |
1 |
if tonumber(Table.Value}) = 0 or isnull({Table.Value}) then "Rusult 1" else "Result 2" |
One would think that these two should behave the same, right?
In fact, the results are different if Table.Value is null.
In the first case, “if isnull({Table.Value}) gets evaluated first. Since that’s true, and the other condition is connected with an OR, the system (apparently) doesn’t evaluate the other condition. You get “Result 1”, which is what I would want and expect.
In the second case, tonumber({Table.Value}) gets evaluated first. The tonumber() function on a null value returns neither true nor false. That makes sense, I guess, but you can’t evaluate a null in an OR and get a true or false either. So for this formula, neither result is presented.
Admittedly, I hit this using an embarassingly old version of Crystal Reports. I’ll have to test to see if the same thing happens on something more modern.
But for now, the lesson is to put isnull() parts at the beginning of logical tests.