報表填報時,如何實現多個單元格綁定一個字段?

場景描述web

以下圖所示報表,科目名稱欄目裏面的數據不是從數據庫中拖曳擴展得來的,而是直接在單元格中輸入,須要將每一個科目的期初餘額和期末餘額填報入庫,數據庫中有科目ID、會計科目、期初餘額和期末餘額幾個字段,在填報時,將每一行數據都填入到一張數據表中,原本要想將全部科目都填報入庫,則須要添加多個內置SQL,會很是影響填報效率,今天我來告訴你們能夠在一個內置SQL中爲單個數據表字段綁定多個單元格,即單元格組。sql


實現思路數據庫

在報表填報屬性中爲某個字段綁定單元格組,以下圖,數據表中的會計科目和科目代碼字段在一個內置SQL中分別綁定了一個單元格組,那麼在執行填報功能的時候,報表開發工具FineReport後臺會自動將單元格組根據位置拆分爲多條內置SQL。數組


如上填報屬性綁定單元格示例,在執行填報過程的時候,就會拆分爲如下4個內置SQL分別執行:工具

[uuid(),A2,B2]、[uuid(),A3,B3]、[uuid,A4,B4]、[uuid(),A5,B5]開發工具

注:拆份內置SQL時是根據位置拆分,而且當單元格和單元格組並存的時候,單元格的值重複根據單元格組內單元格個數進行復制。ui

和分別定義4個內置sql一致,4個uuid的結果是不同的,而且其中一個失敗,其餘兩個都會回滾,保持事務的一致性spa

注:綁定單元格組是先拆分爲多個內置sql入庫規則,而後再造成SQL語句提交入庫,而不是直接造成sql,由於單元格的值可能也是數組。設計

示例日誌

以描述中的模板樣式爲例,咱們在web端錄入幾個會計科目的期初餘額和期末餘額,而後經過單個內置SQL將數據填報入庫。

一、 模板樣式設計

按照上圖所示樣式設計報表,期初餘額和期末餘額控件類型均設置爲文本控件。

二、報表填報屬性設置

點擊模板>報表填報屬性,點擊添加按鈕,添加一個內置SQL,爲數據字段綁定單元格組,以下圖:


注:單元格組手動編輯的時候,單元格間的分隔符支持英文的逗號、分號和空格。

另:若是單元格組內單元格個數超過5個,將再也不顯示全部單元格,而是直接顯示「已經選擇X個單元格」,以下圖:


注:綁定多個單元格時,不能使用公式,由於單元格數組是先拆分爲多個內置SQL,而後再造成入庫sql語句,而公式數組則是直接造成入庫sql語句,不會拆分爲內置sql。

三、校驗

若是列的值設置爲單元格組,則須要保證設置的各單元格組個數相等,這樣纔可以一一匹配起來,不容許如一個列是3個單元格,一個列是4個單元格,在智能添加單元格組對話框時點擊肯定或者在填報屬性界面修改以後點擊肯定會彈出警告框,以下圖:


四、效果查看

點擊填報預覽,在前面4個科目輸入對應的期初餘額和期末餘額,以下圖:


注:因爲在設置填報屬性的時候,單元格數組只綁定了前面4行的數據,故咱們這裏只對前面4行操做。

點擊提交按鈕,將數據入庫,點開日誌面板,能夠看到以下圖所示日誌信息,從日誌中咱們能夠看出內置sql綁定的單元格數組的確是被拆分爲多個內置sql以後,在造成sql語句執行提交操做:


而後再新建經過數據集查看科目餘額表數據表中的數據,以下圖,能夠看到更改的4個科目數據發生了變化:

 

具體的模板設置可參考:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\TypicalApp\CellsArrayForm.cpt。

相關文章
相關標籤/搜索