17.9. 開發報表

PostERP的用戶可以無限制地自行開發更多報表,讓終端用戶以之預覽與列印報表,或把SQL回應的資料存成檔案。資料庫裡的table都可以拿來自行編製報表,立即整合到指定畫面的選單中。

17.9.1. 設計報表的SQL

Figure 17-7. 設計報表的SQL

如果要在SQL中嵌入參數供終端使用人輸入,請在參數之前加冒號:。例如:

	SELECT f1,f2 FROM t52 WHERE f2 BETWEEN :bd AND :ed
			

其中,bded分別為兩個參數。然後在參數頁指定個參數的作用,自此,這些參數即等後終端使用人輸入數值。

Note

如果必須cast PostgreSQL的資料型態,不要這樣cast:f1::TEXT。因為::會混淆PostERP瘦客戶。請這樣cast:CAST(f1 AS TEXT)

Tip

請善用PostERP提供的月初、月底函數:MonthBegin()MonthEnd()。詳見Chapter 8

Note

PostERPSQL injection攻擊有防衛。因為終端用戶只能輸入參數,PostERP再嵌入這些參數進去SQL text。PostgreSQL遇到無效的SQL參數時,會以執行失敗告終。

17.9.2. 設計報表樣板

Note

開發系統的工作可以選擇在雲端版桌面版PostERP上面進行。但是有一個例外 – 設計報表樣板,只能在桌面版PostERP上面進行。

所以,兆筆的開發夥伴必須從GitLab下載瘦客戶軟體tc.exe,執行它,接入你的開發主機。其IP地址於您以夥伴開發人身份登入後,在這個網頁顯示。

Note

PostERP目前版本只能列印Bitmap以及JPEG圖案。

Figure 17-8. 設計報表樣板

固定式財務報表樣板的主要DataSet name必須設定成mds

17.9.2.1. 標題代碼

多利用PostERP的國際化功能,以設計多國語言的報表樣板。

Tip

關於片語的設定,請參考Section 17.1

假設報表樣板有一個欄位標題,是員工姓名。因為這份報表將提供給全球操不同語言的用戶使用,所以,把員工姓名這幾個中文字直接設計在報表樣板裏,並不可行。

正確的作法是:設置標題代碼欄位,也就是C245。這裏的C是常數,不可以更換。緊跟在C常數的數字245片語#。如此一來,各國終端用戶於出報表時,PostERP會自動把員工姓名以該用戶所使用的語言呈現。

17.9.2.2. 樣板裡面的ReportTitle變數

終端用戶於出報表時,此變數(注意大、小寫)會被該報表名稱取代。這個名稱通常用在報表的表頭。

17.9.2.3. 內嵌在SQL語句裏的變數

PostERP 自動把內嵌在SQL語句(參見Section 17.9.1)裏的變數轉成報表變數(注意大、小寫)。終端用戶於出報表時,這些變數會被使用人輸入的值取代。

17.9.2.4. 樣板裡面的COMPANY變數

終端用戶於出報表時,此變數(注意大、小寫)會被該用戶正在操作的公司名取代。

17.9.2.5. 公司logo

如果樣板有Image元件且符合下列全部條件,則PostERP自動在該元件打印公司的logo。

  • Image source:選用Database field:

  • Database field:的右側框填入DataSetCompanyLogo.logo(注意大、小寫)。

Logo自資料庫裡面的t45.f5table與column讀取。

17.9.3. 授權報表

PostERP用戶授權,令其擁有出這份報表的權限:

Figure 17-9. 授權報表給使用人

17.9.4. 報表預覽

Figure 17-10. 報表預覽

Tip

報表的輸出,可以轉存成Excel檔案。

17.9.5. 進階報表樣板設計

17.9.5.1. 子報表

有些報表並非只用一道SQL指令就能取得資料。

例如PostERP的分錄裏的輔助標記:如果把一道SELECT指令選出的金額輔助標記資料放在報表樣板的detail band中,然後小計金額欄位,則此金額小計是錯的!因為:每一筆金額是附屬於序號,而且每一筆序號附掛多筆輔助標記記錄。金額小計所得到的結果是錯誤的重複多次輔助標記金額加總。

此例,正確的作法是採用子報表技術。

Tip

請參考附掛於[MzF5]畫面報表#『3』子報表範例

17.9.5.2. Cross Table報表

請參考附掛於[MzF5]畫面報表#『1』報表#『2』Cross Table範例報表