Деление на ноль в формуле кросс-таблицы - PullRequest
1 голос
/ 20 января 2011

У меня есть кросс-таблица с полем формулы. Запрос возвращает что-то вроде

 CategoryID   Company       MarketValue   PaymentMode
  1            ABC             1000         H
  1            xyz             2000         H
  3            efg             9800         H

Режим оплаты - полугодовой, обозначенный как 'H' Я сделал поле формулы, чтобы оценить режим оплаты по

WhileReadingRecords;
numberVar mode;  
         if({PaymentMode}='H') then mode:=2 else mode:=12

Затем я сделал еще одно поле формулы

WhileReadingRecords;
numberVar mode;
numberVar result:={MarketValue}/mod;
result

Однако он возвращает деление на ноль ошибок. Почему моя формула для режима оплаты не оценивается должным образом. Я попытался поместить формулу режима оплаты в заголовок отчета, а кросс-таблица - это 2-й заголовок, но он все равно выдает ту же ошибку.

Ответы [ 2 ]

2 голосов
/ 20 января 2011

Я рад, что вы уже нашли ответ Арво, но у меня есть несколько предложений по упрощению вашего кода:

  1. Режим - это встроенная функция Crystal(см. справочные файлы Crystal).Поэтому, когда я увидел, что вы используете это слово в качестве имени для пользовательской переменной, мой мозг сделал сальто назад.Как насчет того, чтобы называть его «numPayPeriods»?

  2. Поскольку в вашей формуле-примере значения полей включены, Crystal по умолчанию реализует WhileReadingRecords (снова, см. Файлы справки Crystal).Таким образом, добавление его в этом случае является излишним.Вы можете полностью исключить это.

  3. Нет необходимости в двух отдельных формулах в вашем примере.Кроме того, ваша переменная Result не требуется в синтаксисе Crystal.Вы можете упростить все это до одной формулы:

    if({PaymentMode}='H') then<br> {MarketValue}/2<br> else<br> {MarketValue}/12;

2 голосов
/ 20 января 2011

Две проблемы.

Первая синтаксическая ошибка - или, скорее, здесь опечатка, последний 'e' отсутствует:)

numberVar result:={MarketValue}/mode;

Второе - вам нужно оценить формулы в указанном порядке. Скажем, ваша первая формула имеет имя calc_mode, а вторая должна начинаться со следующего оператора:

EvaluateAfter({@calc_mode});
...