TIPTOP 客製紀錄 (三):Crystal Report 報表開發基礎

TIPTOP 客製紀錄 (三):Crystal Report 報表開發基礎

TIPTOP 客製開發進階:Crystal Report 報表開發。紀錄報表引擎的運作原理與中繼架構,將資料庫數據轉換為格式化的報表產出。


在完成 單檔表單單檔明細 的開發後,下一個重要的課題是報表開發。報表在 ERP 系統中負責將資料精準呈現給使用者。本篇筆記將重點紀錄 TIPTOP 與 Crystal Report 協同運作的報表開發流程。


標準程式架構

TIPTOP 報表架構

在開發報表程式時,同樣建議尋找邏輯清晰的標準報表程式(例如 aapr106)進行複製。移除所有註解後,即可取得乾淨的報表骨架。

報表程式與一般維護程式最大的不同在於,報表程式包含處理暫存檔案的架構,其儲存的內容主要為 XML 資料,用以傳送給 Crystal Report 報表主機。

以下是修改為 capr901 的標準報表程式架構說明:

報表程式的底層邏輯,主要圍繞著資料的 ForeachEXECUTE 進行處理。

開發執行順序

在 TIPTOP 中新增 Crystal Report 報表程式的標準流程如下:

  1. 需求定義:確認資料來源(例如沿用 tc_apx_file)。
  2. SQL 撰寫:在資料庫中先行測試 SQL 語法,確認產出的資料結果正確無誤。
  3. 程式編譯:編譯 capr901.4gl
  4. 複製畫面:複製 4FD 檔案並進行 QBE(Query By Example)條件確認。
  5. 權限註冊:到 p_zz 新增報表程式代號。
  6. 連結設定:運行 r.l2 capr901
  7. 權限放行:在 p_zz 點選給予權限。
  8. 樣板設定:在 p_zaw 進行樣板的複製與修改設定。
  9. CR主機設定:在 Crystal Report 主機上複製樣板 (.rpt),並修改欄位對應與 XML 定義。

完成上述 9 個步驟後,即可在系統前端(如 Edge 瀏覽器)檢視報表產出結果。


Crystal Report 實作練習

在報表開發實務中,重點在於:在 Crystal Report (CR) 主機上製作一個完整的報表樣板 (capr901)。

這項練習的目的在於理解「兩台主機協作」的運作機制。在 TIPTOP 的報表架構中,資料的產出是透過跨主機的資料拋轉,最終呈現在使用者的瀏覽器上。

重點機制包含:

  • 跨主機的資料傳遞:區分「TIPTOP 主機(負責邏輯與資料處理)」與「CR 報表主機(負責畫面渲染)」的角色。TIPTOP 負責將資料整理成 XML 格式,傳送給 CR 主機進行排版渲染。
  • XML 標籤的對應 (Mapping):在 Crystal Report 設計器中,必須精確地將 XML 中的欄位標籤對應到報表的版面上。若命名不一致,數據將無法正確顯示。
  • 樣板 (Template) 權限連結:透過 p_zaw 讓 TIPTOP 系統與 CR 主機上的樣板建立連結,使數據能順利轉換並於瀏覽器上呈現。
CR 報表樣板

TIPTOP 的 Crystal Report 列印機制採用了高度解耦的「中繼架構」。其核心在於: 4GL 程式不直接處理報表排版,而是先透過複雜的運算,將最終數據寫入動態生成的暫存表 (l_table),並由 cl_prt_cs3 底層函式將 SQL 指令與參數封裝成 XML 格式的描述檔,發送至 CR 主機。CR 主機端則透過預先設計好的樣板 (.rpt),根據 XML 提供的 Metadata 進行欄位對應 (Field Mapping),並向資料庫撈取暫存表內的數據。這種機制能確保即便在處理巨量資料時,也能精確控制數據邏輯,同時保有 Crystal Report 在報表美化與輸出格式上的極致靈活性。

Loading Diagram...

補充:主機間通訊協定與 Port(ISO 27001 稽核實錄)

導入 ISO 27001 時,稽核方問了一個開發時很少被問到的問題:「TIPTOP 主機是怎麼跟 CR 主機溝通的?使用什麼 Port?」。趁這個機會,把上面架構圖的網路層實際查證了一遍,紀錄如下。

跨主機的連線一共三條:

連線方向協定與 Port傳輸內容
TIPTOP 主機 → CR 主機HTTP / TCP 80(IIS)僅傳報表憑證編號(certid),無業務資料
CR 主機 → 資料庫主機Oracle SQL*Net / TCP 1521憑 certid 取回 SQL 指令與報表資料
使用者瀏覽器 → CR 主機HTTP / TCP 80(IIS)檢視與下載渲染完成的報表

實地查證的方式有三個檢查點:

  1. CR 主機位址與 Port:在 TIPTOP 主機上執行 echo $CRIP,會印出類似 http://192.168.x.x/topprod/ 的 URL——這就是 cl_prt_cs3 發送 HTTP 請求的目的地。URL 未帶 port,依 HTTP 標準即為 TCP 80。此環境變數定義於 .profiletopprod.sh
  2. Oracle Listener Port:檢視 $ORACLE_HOME/network/admin/listener.ora,可看到 (PROTOCOL = TCP)(PORT = 1521) 的設定。
  3. 實際流量:在 CR 主機(Windows)上執行 netstat -an | findstr 1521,可觀察到 CR 主機對資料庫 1521 的多條 ESTABLISHED 連線——這是 CR 引擎維持的資料庫連線池。TIPTOP 到 CR 的 port 80 連線僅在報表產生的瞬間存在,需在列印當下用 netstat -an | findstr :80 才抓得到。

這個中繼架構在資安上有一個特點:TIPTOP 與 CR 之間的 HTTP 通道上只有 certid 這組取件編號,機敏的業務資料並不經過這條線,實際資料存取全部收斂在資料庫的 1521 連線上,回覆稽核時是個加分點。不過也要誠實面對它的弱點:三條連線都是明文傳輸,port 80 因全體使用者檢視報表所需無法鎖來源,這部分防火牆規則(1521 僅允許 CR 主機連入)與 HTTPS 的導入評估,是走 ISO 27001 遲早要面對的課題。


開發規範:報表種類與應用

在 ERP 系統中,報表的應用型態決定了其服務對象與設計重點,主要分為以下三類:

  1. 明細表 (Detail Reports):提供最詳盡的底層數據紀錄。強調資料的完整性與檢索的便利性。
  2. 憑證 (Vouchers/Documents):系統對外的正式單據(如採購單、出貨單)。代表著交易依據,排版的嚴謹度與精確性為第一優先。
  3. 管理報表 (Management Reports):高度濃縮的數據分析。主要提供給管理層級作為決策參考,需具備高度的資料摘要與視覺化呈現。

核心觀念:報表是與使用者溝通的橋樑 報表是使用者最常接觸到的系統產出,針對不同人員的需求提供正確、清晰的查詢結果,是報表客製化最重要的環節。


結語

完成 單檔表單單檔明細 到本篇「Crystal Report 報表」的開發紀錄後,已涵蓋 TIPTOP 系統客製化最核心的三大技術領域。

熟練掌握基本功後,後續面對更複雜的業務邏輯,便能以這些基礎架構為基礎進行「組合應用」。在了解系統架構與限制的前提下,靈活運用這些開發技巧,即可有效應對各類客製化需求。