前面示範的報表,其後端的資料來源都剛好有現成的Server端模組(InfoCommand)可以使用,本例將示範"採購明細表",報表中的資料來源有兩個實體資料表,一個為採購單主表,另一個為採購單明細表(一對多的關係),因為隸屬兩個獨立的資料表要同時輸出到本例的採購明細表中,所以,Server端就不須額外使用Left
Join的方式將兩個表合併成一個表。在眾多的報表實例中,通常很難有直接寫好現成可以用的資料來源(InfoCommand),必須在後端先建立好報表相對應的View或SQL語句。
Step1> ChatCoder右鍵新增一個ChatCoder的節點,並輸入"採購明細表",同上,切換到"報表截圖"的頁簽,並按下來上傳一個報表截圖,這裡我們選擇"採購明細表"的這個截圖檔案。
這是採購明細表的截圖內容,報表中以採購單為單位列出其採購單下的所有採購項目明細等資料,並進行加總,為了節省報表的寬度空間,會將採購單主表的欄位列印於GroupHeader中。
Step2>
上傳完畢,接著按下"送出",即可透過GPT來分析報表格式,如下的Layout格式:
其中,GroupHeader有解析到採購單主表的欄位,Detail除了前面兩個欄位也是採購單主表外,其餘都是採購明細表的欄位。因為報表的"資料表來源"必須使用以上兩個表的合併內容,所以我們必須透過Server端InfoCommand來重新設計。
Step3> 打開現有的Server端"採購單"模組,透過"工具箱"拖拉一個新的InfoCommand組件:
點一下InfoCommand的CommandText屬性,打開"SQL Command
Text Editor"來編輯新的SQL語法,如下:
先勾選採購單的所有欄位,然後取消沒有要印出的欄位,按下下方的"新增"按鈕即可產生採購單的SQL語法。接著持續勾選"採購單明細"的欄位:
勾選採購單明細欄位,然後將重複的"採購單號"與"進貨單號"取消,按下"新增"時,因為Command
Text內已經有SQL語法了,所以會彈出關聯的Join選項,此時系統會自動建議為Left Join與關聯欄位,如果沒有問題按下確定即可,此時採購單就會自動Left
Join明細資料進來,按下"查詢"即可驗證SQL的執行結果:
然後我們將InfoCommand更名為"採購單明細查詢",方便識別,最後按下"存檔"儲存此Server端模組。
Step4> 接著回到ChatCoder的報表Layout設定,將"資料表來源"選擇剛剛新增上去的"採購單明細查詢",如下:
再來,因為Header上的訂購日期需要一個區間查詢,所以我們將"採購日期"拖到"訂購日期"下,另外再拖一個放在右邊,並將"訂購日期"統一改成"採購日期"。GroupFooter中的"合計"我們將其移動到"金額"的下方。並在最下方的Footer拖入一個"金額"代表總計(因為GPT沒有識別出來)。
接著設定GroupFooter的"合計"與Footer的"金額"屬性(右鍵),如下:
類型都設定為"加總",欄位名稱為"金額"代表針對此欄位加總,欄位型別為"數值"即可。
Step5> 接著進行"匯出iTable"的動作,因為報表很多欄位標題與資料來源的欄位名稱不同,所以經過檢查有三個欄位不同,如下,透過"新增欄位"的拖拉功能即可進行更新正確的欄位名稱(標題不更新,只更新欄位名稱/類型/欄位寬度)。
Step6> 匯出iTable時,同時選擇要產生Excel套表,如下圖將產生iTable的畫面,同樣按下上方的"存檔"來產生RWD表單。
Step7> 最後按下預覽,如下的頁面:
可以透過日期範圍按下"查詢"再按下"印表",將產生如下的Excel報表:
明細(Detail)中如果要"日期"與"廠商名稱"重複只印第一筆,則可以設定這兩個欄位為"群組"即可達成。
Related Topics