Возвращаемое значение в iReport - PullRequest
3 голосов
/ 19 сентября 2011

Я использую iReport 4.0.2 и хочу показать результат в своем основном отчете. Например, в моем основном отчете у нас есть два столбца, и я хочу получить сумму этих двух столбцов, как этот формат:

A      B     sum
10     5      15

Где A - это одно поле в основном отчете, а B - возвращаемое значение моего подотчета. Это хорошо работает. Но ключевой момент заключается в том, что иногда подотчет не возвращает никакого значения, что является проблемой. В этом случае результат суммирования выглядит так:

A       B      sum
10             NULL

Как мы видим здесь, B - это возвращаемое значение подотчета, но оно не имеет значения NULL и 0. Вот почему у нас есть эта проблема.

Я пытаюсь найти, как я могу получить возвращаемое значение из подотчета, когда SQL не возвращает результатов. Я знаю, что в iReport есть свойство «Когда данных нет», но это не помогает. Поэтому я хочу знать, есть ли у нас другой способ решить проблему в iReport или использовать некоторые навыки SQL.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Я думаю, что во втором примере B на самом деле имеет значение null, но, возможно, в вашем текстовом поле установлено свойство «Blank When Null».Я смог воспроизвести ваши результаты, за исключением бланка B.

Реальная проблема в том, что вы не можете складывать или вычитать с нулевым значением.JasperReports будет просто печатать ноль.Вы должны добавить некоторую логику, чтобы обеспечить значение по умолчанию, если одна из переменных в выражении равна нулю.Например,

$F{MAIN_REPORT_FIELD} - ($V{SUB_RESULT} == null ? 0 : $V{SUB_RESULT})

К сожалению, это не работает для отчетов, которые используют Groovy для выражений в JasperReports 4.0.2 ( Case 0005138 ) и всегда возвращают ноль.

У вас есть несколько вариантов:

  1. Вы можете перейти на JasperReports / iReport 4.1.1, который решает эту проблему.
  2. Вы можете переключиться на использование Java для выражений.

    В зависимости от вашего отчета это либо будет безболезненно, либо будет рутиной.Любые поля, которые не имеют корректного класса выражений, должны быть исправлены, и вам, вероятно, придется быть более явным в любом выражении, которое выполняет операции с не примитивными / упаковочными типами.

0 голосов
/ 05 января 2012
  1. , если вы делаете сумму основного поля и поля подотчета в основном отчете, то в выражении суммы (поле основного отчета + (поле подотчета == ноль? 0: поле подотчета).

  2. возврат значений подотчета в основную переменную отчета.

Затем выполните суммирование основного поля отчета и возвращаемой переменной bareport.

Сделайте то же самоеусловие, указанное выше.

...