вторник, 25 ноября 2014 г.

ireport return value from subreport to master

Возвращаем значение переменой из подотчета в главный отчет, в JasperReport используя iReport.

Задача - отобразить значение(в моем случае итоговое), которое получилось в подотчете (subreport) в главном отчете (master report).

В главном отчете создадим переменную (Variables), назовем ее NET_MARGIN_RETURNED.
Откроем подотчет, правой кнопкой щелкаем по нему на форме и выбираем Open subreport.
В нем есть переменная, которую я добавил ранее NET_MARGIN

Так как у меня тип значений везде BigDecimal, то и Variable Class выбран в обеих java.math.BigDecimal. Если нужно передать текст и исходные данные текстовые, то и выбираем для обеих java.lang.String

У переменной в подотчете NET_MARGIN параметры следующие:
У переменной в главном отчете NET_MARGIN_RETURNED куда будем передавать значение, такие:
обращаю внимание на Calculation, сначала я поставил System, так как везде где читал, ставят именно так. Но на самом деле этот параметр для передачи значения не важен (я (п)оставил Nothing), хотя многие ставят именно System, скорее всего в специфических ситуациях.

И так есть у нас отчет с подотчетом, выбираем в списке слева наш подотчет, ну или напрямую щелкаем по нему в "Дизайнере". Смотрим на Subreport properties, видим Return Values.


Щелкаем по троеточию и добавляем нашу переменную.

В списке Subreport variables переменной NET_MARGIN почему-то не оказалось, видимо косяк iReport, поэтому вписываем вручную.
Local distanation variable выбираем, если она не единственная и уже не выбрана, нашу переменную в мастер-отчете.
Если хотим передать только значение без изменений, то выбираем в пункте Calculation type значение Nothing.

С переменными все. Теперь надо отобразить значение нашей переменной в отчете.
Создаем Text Field. В его свойствах указываем нашу переменную в Text Field Expression.
Есть у него такой проперти как Evalution Time. Пока искал как передать переменную, наткнулся на то, что многие видят проблему именно в этом параметре. Кто-то пишет, что надо поставить там не Now, а Auto. Кто-то ставит Band.
Не заморачиваясь на том, что значит то или другое и вообще что за такой Evalution Time, я оставил Now, хотя работает и если поставить Band. Просто хотел обратить внимание, что при другой структуре отчета может возникнуть проблема в этом месте.

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