在財務報表開發中,根據存取金額計算期初餘額(Opening Balance)屬於典型的跨行運算場景。雖然 JasperReports 內建表達式也能實現,但邏輯複雜、維護困難,開發效率低。引入 esProc(集算器)作為計算引擎,能夠輕鬆解決此類問題,大幅降低報表開發難度。本文將以簡化案例演示完整實現流程。
假設 data.csv 存儲某賬戶各期的資金存取明細,需要根據該文件計算出期初餘額。源數據結構如下圖所示:

編寫 esProc 腳本讀取 CSV 並計算期初餘額,核心代碼如下:


esProc 對外提供標準 JDBC 接口,JasperReports 將其識別為普通數據庫,整合極其簡單。以下設計最基礎的 List 表模板:

在報表查詢中直接調用 esProc 腳本(如 call calcOpeningBalance()),即可獲取計算好的期初餘額字段,拖放至詳情帶即可完成報表輸出。整個過程無需在 JasperReports 中編寫複雜的變量、腳本或跨行表達式,業務邏輯完全下沉至 esProc,實現了計算與展現的徹底分離。
通過「JasperReports 負責展現,esProc 負責計算」的架構模式,開發者可輕鬆應對各類複雜的跨行、跨組、跨報表計算需求,顯著提升報表開發效率與系統穩定性。