Страница 1 из 1

Возможно неправильная работа IIF

Добавлено: 22 дек 2010, 12:05
Леонид
Доброго времени суток, уважаемые!

Делал отчёт и обнаружил, что команда IIF не работает, вернее работает некорректно.

В приложении сделал примитивный отчёт, который показывает ошибку:

Expression in Text property of 'Text1' can't be evaluated! startIndex cannot be larger than length of string. Parameter name: startIndex

В отчёте стоит выражение {IIF(BoolVar, Var1, Substring(Var1, 20, 5))}. При этом BoolVar = true, а Var1 = 'Тестовая строка' (15 символов).

Ошибка возникает, видимо по причине того, что IIF cначала вычисляет значение, которое выводится, если BoolVar = true, а потом сразу вычисляет (не понятно зачем, из-за этого и возникает ошибка) Substring(Var1, 20, 5), которое я поставил намеренно. То есть, если поставить туда Div или что-либо ещё, оно также будет вычисляться, что неправильно, т.к. вычисляться должна именно та часть, кот. подходит под условие (true или false), что логично.

Возможно неправильная работа IIF

Добавлено: 22 дек 2010, 18:02
Ivan
Здравствуйте.

IIF и другие команды, которые можно использовать в выражениях - это функции.
В текстовом редакторе они и представлены в дереве в разделе Functions.
При вызове функции все аргументы рассчитываются до вызова функции, а уже потом передаются в функцию.
Поэтому вам необходимо модифицировать ваше условие, чтобы не возникало исключений:

Код: Выделить всё

{IIF(BoolVar, Var1 + new string(' ', 25), Substring(Var1, 20, 5))}
или, если вы используете C#

Код: Выделить всё

{BoolVar ? Var1 : Substring(Var1, 20, 5)}
Спасибо.

Возможно неправильная работа IIF

Добавлено: 23 дек 2010, 12:46
Леонид
Да, всё работает во втором варианте, т.е. с использованием тернарной операции.

{BoolVar ? Var1 : Substring(Var1, 20, 5)}

Благодарю за помощь!


Возможно неправильная работа IIF

Добавлено: 23 дек 2010, 16:42
Andrew
Всегда рады помочь Вам.