標籤:
情境描述
如所示報表,科目名稱欄目裡面的資料不是從資料庫中拖曳擴充得來的,而是直接在儲存格中輸入,需要將每個科目的期初餘額和期末餘額填報入庫,資料庫中有科目ID、會計科目、期初餘額和期末餘額幾個欄位,在填報時,將每一行資料都填入到一張資料表中,本來要想將所有科目都填報入庫,則需要添加多個內建SQL,會非常影響填報效率,今天我來告訴大家可以在一個內建SQL中為單個資料表欄位綁定多個儲存格,即儲存格組。
實現思路
在報表填報屬性中為某個欄位綁定儲存格組,如,資料表中的會計科目和科目代碼欄位在一個內建SQL中分別綁定了一個儲存格組,那麼在執行填報功能的時候,報表開發工具FineReport後台會自動將儲存格組根據位置拆分為多條內建SQL。
如上填報屬性綁定儲存格樣本,在執行填報過程的時候,就會拆分為以下4個內建SQL分別執行:
[uuid(),A2,B2]、[uuid(),A3,B3]、[uuid,A4,B4]、[uuid(),A5,B5]
註:拆分內建SQL時是根據位置拆分,並且當儲存格和儲存格組並存的時候,儲存格的值重複根據儲存格組內儲存格個數進行複製。
和分別定義4個內建sql一致,4個uuid的結果是不一樣的,並且其中一個失敗,其他兩個都會復原,保持事務的一致性
註:綁定儲存格組是先拆分為多個內建sql入庫規則,然後再形成SQL語句提交入庫,而不是直接形成sql,因為儲存格的值可能也是數組。
樣本
以描述中的模板樣式為例,我們在web端錄入幾個會計科目的期初餘額和期末餘額,然後通過單個內建SQL將資料填報入庫。
1、 模板樣式設計
按照所示樣式設計報表,期初餘額和期末餘額控制項類型均設定為文本控制項。
2、報表填報屬性設定
點擊模板>報表填報屬性,點擊添加按鈕,添加一個內建SQL,為資料欄位綁定儲存格組,如:
註:儲存格組手動編輯的時候,儲存格間的分隔字元支援英文的逗號、分號和空格。
另:如果儲存格組內儲存格個數超過5個,將不再顯示所有儲存格,而是直接顯示“已經選擇X個儲存格”,如:
註:綁定多個儲存格時,不能使用公式,因為儲存格數組是先拆分為多個內建SQL,然後再形成入庫sql語句,而公式數組則是直接形成入庫sql語句,不會拆分為內建sql。
3、校正
如果列的值設定為儲存格組,則需要保證設定的各儲存格組個數相等,這樣才能夠一一匹配起來,不允許如一個列是3個儲存格,一個列是4個儲存格,在智能添加儲存格組對話方塊時點擊確定或者在填報屬性介面修改之後點擊確定會彈出警告框,如:
4、效果查看
點擊填報預覽,在前面4個科目輸入對應的期初餘額和期末餘額,如:
註:由於在設定填報屬性的時候,儲存格數組只綁定了前面4行的資料,故我們這裡只對前面4行操作。
點擊提交按鈕,將資料入庫,點開日誌面板,可以看到如所示日誌資訊,從日誌中我們可以看出內建sql綁定的儲存格數組的確是被拆分為多個內建sql之後,在形成sql語句執行提交操作:
然後再建立通過資料集查看帳戶餘額表資料表中的資料,如,可以看到更改的4個科目資料發生了變化:
具體的模板設定可參考:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\TypicalApp\CellsArrayForm.cpt。
報表填報時,如何?多個儲存格綁定一個欄位?