Разделение по ноль в формуле Crossab
-
13-10-2019 - |
Вопрос
У меня есть кроссовка с полем формулы. Запрос возвращает что -то вроде
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});
Другие советы
Я рад, что вы уже нашли ответ Арво, но у меня есть несколько предложений, чтобы упростить ваш код:
Режим это кристаллическая функция (см. Файлы справки Crystal). Поэтому, когда я увидел, что вы используете это слово в качестве имени для пользовательской переменной, мой мозг сделал обратный флип. Как насчет того, чтобы называть это «Numpayperiods» вместо этого?
Поскольку ваша образца формула включает значения поля, кристаллические орудия В то время как рекордс По умолчанию (опять же, см. Файлы справки Crystal). Таким образом, добавление его избыточно в этом случае. Вы можете выбрать это полностью.
В вашем примере нет необходимости в 2 отдельных формулах. Также ваш Результат Переменная не нужна в кристаллическом синтаксисе. Вы можете упростить все это только на 1 формулу:
if({PaymentMode}='H') then
{MarketValue}/2
else
{MarketValue}/12;