2011年9月9日 星期五

ireport的subreport使用心得(二)

總表一式X份的做法

在主報表的SQL串類式下面的SQL出來



select 1 report_num,'第一聯' report_name,'會計留存' report_belong from dual
union
select 2 report_num,'第二聯' report_name,'出納留存' report_belong from dual
union
select 3 report_num,'第三聯' report_name,'單位自存' report_belong from dual
order by report_num



SQL查詢結果如圖



主表在Detail Band放入SubReport Element

真正資料要呈現的SQL是放在SubReport的<querystring>中

加在一起的執行結果就會跑出一式X份了!





附加贈送,簽核欄位放在頁面最下方的寫法

要在jrxml手動加入一個自訂的Group Band

重點是在這個setting:footerposition="ForceAtBottom"

<group footerposition="ForceAtBottom" name="Bottom">
  <groupfooter>
    <band height="40">
      <statictext>
        ....
      </statictext>
   </band>
  </groupfooter>
</group>

2011年9月8日 星期四

Blogger的 Code Block 和 Quote Block

Code Block Demo

使用方法:

<code>要顯示的程式碼1
要顯示的程式碼2
要顯示的程式碼3
要顯示的程式碼4</code>

使用效果:

要顯示的程式碼1
要顯示的程式碼2
要顯示的程式碼3
要顯示的程式碼4


Quote Block Demo

使用方法:

<div id="quote">引述的內容</div>區塊中即可

使用效果:

要引述的內容

2011年9月7日 星期三

ireport的subreport使用心得(一)

客戶給的報表設計規範如圖(A4,中一刀)



主報表的版面配置如圖


SubReport配置如下

(子報表一和子報表二格式格同,可設計好一個再Copy,只要再改第X聯的呈現文字即可)



Main Report的SQL是呈現Master的資料

再透過設定Parameter的方式把Field值傳入SubReport



子報表的Header此時使用此方法抓Main Report設定好的參數

$P{REPORT_PARAMETERS_MAP}.get("my_main_report_param")



此報表有一個特殊需求:每十筆要換頁

 在這裡我是使用Group Footer的方式來解決

(Column Footer試了好久都會跑到頁面最下面,不是Below Detail >,<)

Step 1.設定Group Expression (為了每十筆做一個Group,我用 $V{COLUMN_COUNT} / 11 )

Step 2.把Group Band的Start On New Page 設定為True,確保每一個Group都在新的一頁

Step 3.其他設定,如圖第二個藍框 (不確定效用 XDDD)



ireport設計好後就可以用Servlet套程式了

我是參考此網頁的說明把程式套出來的:How to load subreport resources with Jasper?

Step 1. 加入新的參數


<parameter name="SubReportParam_1"
      class="net.sf.jasperreports.engine.JasperReport"
      isForPrompting="false"/>

<parameter name="SubReportParam_2"
      class="net.sf.jasperreports.engine.JasperReport"
isForPrompting="false"/>



Step 2.選擇Main Report的SubReport Element,在屬性中找到Subreport Expression,

設定其值為 $P{SubReportParam_1}

Step 3.選擇Main Report的SubReport Element,在屬性中找到Expression Class,

設定其值為 net.sf.jasperreports.engine.JasperReport

Step 2 和 3 的設定如圖



以上ireport設計完成,接下來開始套程式

關鍵程式碼就是要把編譯好的Subrepot Jasper Class

使用參數設定的方式塞給Main Report去使用

String sr1FilePath=getServletContext().getRealPath("/supplier/order/ShipDetailSub_1.jrxml");
JasperReport jasperReportSR1 = JasperCompileManager.compileReport(sr1FilePath);
parameters.put("SubReportParam_1", jasperReportSR1);



做完~收工!!!