下面就通過表格製作軟體FineReport來介紹。
工具/原料
表格製作軟體FineReport7.1.1
大小:148.2M 適用平臺:windows/linux
方法/步驟
問題描述
如下圖通過單個報表實現主子表的業務邏輯,上面為訂單資訊,資料來自訂單表;下面是該訂單的明細,資料來自於訂單明細表,通過訂單id進行關聯。
修改上方訂單資訊及明細資料時,資料將分別回填至對應的資料表中。
像這樣資料來自於多個數據源,填報時資料回填到多個表中的報表,我們稱之為多源填報表。
實現思路
首先通過設定過濾條件,將子表與主表關聯起來,然後通過定義多個內建sql將資料回填到不同的資料表中。
增加資料集
新建工作簿,增加資料集ds1,SQL語句為:SELECT * FROM [訂單]。
再增加一個數據集ds2,SQL語句為:SELECT * FROM [訂單明細]。
表樣設計
按照下圖所示設定表樣,並將對應的資料列拖入到對應的單元格中:
在D8單元格中填入公式:=round(sum(H12) + B6,2)。
注:公式的意義在於應付金額為數量*進價*(1-折扣),為什麼要使用round函式可檢視Round函式章節。
在H12單元格中填入公式:=C12 * D12 * (1 - E12)。
給B4,D4,F4以及A12單元格增加資料字典設定。
引數設定
點選模板>報表引數,增加一個引數名為ID的報表引數,預設值為10001。
過濾條件設定
給A3設定過濾條件,過濾為訂單ID等於引數$ID。
行高列寬設定
將A3的行高與H12的列寬隱藏。
單元格編輯屬性設定
下拉框
設定B4,D4,F4,A12為下拉框,其資料字典都選擇資料庫表,選擇對應的實際值與顯示值。
數字
設定B6,B12,C12,D12,E12的控制元件型別為數字型。
文字型
設定D6和F6的控制元件型別為文字型。
按鈕
設定F12和G12的控制元件型別分別為插入行以及刪除行按鈕,其指定單元格都為A12。
報表填報屬性設定
按照下圖所示給報表增加兩個內建SQL。
內建SQL1:
內建SQL2
效果檢視
點選填報預覽,查詢訂單號為10001的資料,效果如下:
修改子表,修改數量與進價,點選提交,提示成功。重新整理瀏覽器,再選擇10001,可以看到資料已經改變,如下圖:
多個內建SQL的執行順序
若一個填報模板中定義了多個內建SQL,其執行順序會按照定義的順序執行,若在執行其中一個內建SQL時出錯,會停止下面內建SQL的執行並對已執行的內建SQL進行回滾,回滾具體請檢視報表填報屬性。