Dbcrosstab и Expressions

отредактировано January 2015 Раздел: FastReport 4.0
Здравствуйте.

Пишу отчет.

В отчете использую DBCrossTab - заполняю данными из запроса, в "списке полей, которые образуют ячейки таблицы" вывожу три строки:

Сумма прибыли (из запроса, <CDSQuery3."SUM_CJ">)
"Маржа" (прибыль-расходы, расходы по двум статьям, берутся тоже из запроса: SUM_CJ - SUM_RJ - SUM_EJ)
% (Маржа / Прибыль *100)

Третья строка вываливает ошибку 'invalid floating point operation' (подозреваю, что при делении на 0)

Кода не использую никакого, только стандартные компоненты.

Попробовал обработать вывод прямо в DBCrossTab,
Для всех ячеек DBCrossTab включил проперти AllowExpressions (после каждого выполнения запроса они почему-то сбрасываются на False),
вписал в третью строку условие:

IIF((<CDSQuery3."SUM_CJ">==0),0,((<CDSQuery3."SUM_CJ">-<CDSQuery3."SUM_RJ">-<CDSQuery3."SUM_EJ">))/<CDSQuery3."SUM_CJ">*100)

Это выражение выдает ошибку "')' expected". Я пересчитал скобки, не вижу, в каком месте не хватает закрывающей. Похоже, дело не в количестве скобок.


Понимаю, что описание довольно сумбурное, но объяснить точнее, не приводя запроса и базы, боюсь, не смогу, а привести его - довольно проблематично.


Собственно, вопросов несколько:

- Можно ли использовать "сложные" expressions (с функциями, операторами, а не только арифметику) в выводе DBCrossTab без кода? Как?
- Если нет, как обработать нелегальные операции, например, деление на ноль?
- Почему сбрасывается значение AllowExpressions?


Спасибо.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.