Вопрос

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

 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

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

Это было полезно?

Решение

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

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

numberVar result:={MarketValue}/mode;

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

EvaluateAfter({@calc_mode});

Другие советы

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

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

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

  3. В вашем примере нет необходимости в 2 отдельных формулах. Также ваш Результат Переменная не нужна в кристаллическом синтаксисе. Вы можете упростить все это только на 1 формулу:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top