報(bào)表填報(bào)時(shí),如何實(shí)現(xiàn)多個(gè)單元格綁定一個(gè)字段?
Posted on 2015-08-21 14:55 FineReport——報(bào)表技術(shù)領(lǐng)跑者 閱讀(83) 評(píng)論(0) 編輯 收藏場(chǎng)景描述
如下圖所示報(bào)表,科目名稱欄目里面的數(shù)據(jù)不是從數(shù)據(jù)庫(kù)中拖曳擴(kuò)展得來(lái)的,而是直接在單元格中輸入,需要將每個(gè)科目的期初余額和期末余額填報(bào)入庫(kù),數(shù)據(jù)庫(kù)中有科目ID、會(huì)計(jì)科目、期初余額和期末余額幾個(gè)字段,在填報(bào)時(shí),將每一行數(shù)據(jù)都填入到一張數(shù)據(jù)表中,本來(lái)要想將所有科目都填報(bào)入庫(kù),則需要添加多個(gè)內(nèi)置SQL,會(huì)非常影響填報(bào)效率,今天我來(lái)告訴大家可以在一個(gè)內(nèi)置SQL中為單個(gè)數(shù)據(jù)表字段綁定多個(gè)單元格,即單元格組。
實(shí)現(xiàn)思路
在報(bào)表填報(bào)屬性中為某個(gè)字段綁定單元格組,如下圖,數(shù)據(jù)表中的會(huì)計(jì)科目和科目代碼字段在一個(gè)內(nèi)置SQL中分別綁定了一個(gè)單元格組,那么在執(zhí)行填報(bào)功能的時(shí)候,報(bào)表開(kāi)發(fā)工具FineReport后臺(tái)會(huì)自動(dòng)將單元格組根據(jù)位置拆分為多條內(nèi)置SQL。
如上填報(bào)屬性綁定單元格示例,在執(zhí)行填報(bào)過(guò)程的時(shí)候,就會(huì)拆分為以下4個(gè)內(nèi)置SQL分別執(zhí)行:
[uuid(),A2,B2]、[uuid(),A3,B3]、[uuid,A4,B4]、[uuid(),A5,B5]
注:拆分內(nèi)置SQL時(shí)是根據(jù)位置拆分,并且當(dāng)單元格和單元格組并存的時(shí)候,單元格的值重復(fù)根據(jù)單元格組內(nèi)單元格個(gè)數(shù)進(jìn)行復(fù)制。
和分別定義4個(gè)內(nèi)置sql一致,4個(gè)uuid的結(jié)果是不一樣的,并且其中一個(gè)失敗,其他兩個(gè)都會(huì)回滾,保持事務(wù)的一致性
注:綁定單元格組是先拆分為多個(gè)內(nèi)置sql入庫(kù)規(guī)則,然后再形成SQL語(yǔ)句提交入庫(kù),而不是直接形成sql,因?yàn)閱卧竦闹悼赡芤彩菙?shù)組。
示例
以描述中的模板樣式為例,我們?cè)趙eb端錄入幾個(gè)會(huì)計(jì)科目的期初余額和期末余額,然后通過(guò)單個(gè)內(nèi)置SQL將數(shù)據(jù)填報(bào)入庫(kù)。
1、 模板樣式設(shè)計(jì)
按照上圖所示樣式設(shè)計(jì)報(bào)表,期初余額和期末余額控件類型均設(shè)置為文本控件。
2、報(bào)表填報(bào)屬性設(shè)置
點(diǎn)擊模板>報(bào)表填報(bào)屬性,點(diǎn)擊添加按鈕,添加一個(gè)內(nèi)置SQL,為數(shù)據(jù)字段綁定單元格組,如下圖:
注:?jiǎn)卧窠M手動(dòng)編輯的時(shí)候,單元格間的分隔符支持英文的逗號(hào)、分號(hào)和空格。
另:如果單元格組內(nèi)單元格個(gè)數(shù)超過(guò)5個(gè),將不再顯示所有單元格,而是直接顯示“已經(jīng)選擇X個(gè)單元格”,如下圖:
注:綁定多個(gè)單元格時(shí),不能使用公式,因?yàn)閱卧駭?shù)組是先拆分為多個(gè)內(nèi)置SQL,然后再形成入庫(kù)sql語(yǔ)句,而公式數(shù)組則是直接形成入庫(kù)sql語(yǔ)句,不會(huì)拆分為內(nèi)置sql。
3、校驗(yàn)
如果列的值設(shè)置為單元格組,則需要保證設(shè)置的各單元格組個(gè)數(shù)相等,這樣才能夠一一匹配起來(lái),不允許如一個(gè)列是3個(gè)單元格,一個(gè)列是4個(gè)單元格,在智能添加單元格組對(duì)話框時(shí)點(diǎn)擊確定或者在填報(bào)屬性界面修改之后點(diǎn)擊確定會(huì)彈出警告框,如下圖:
4、效果查看
點(diǎn)擊填報(bào)預(yù)覽,在前面4個(gè)科目輸入對(duì)應(yīng)的期初余額和期末余額,如下圖:
注:由于在設(shè)置填報(bào)屬性的時(shí)候,單元格數(shù)組只綁定了前面4行的數(shù)據(jù),故我們這里只對(duì)前面4行操作。
點(diǎn)擊提交按鈕,將數(shù)據(jù)入庫(kù),點(diǎn)開(kāi)日志面板,可以看到如下圖所示日志信息,從日志中我們可以看出內(nèi)置sql綁定的單元格數(shù)組的確是被拆分為多個(gè)內(nèi)置sql之后,在形成sql語(yǔ)句執(zhí)行提交操作:
然后再新建通過(guò)數(shù)據(jù)集查看科目余額表數(shù)據(jù)表中的數(shù)據(jù),如下圖,可以看到更改的4個(gè)科目數(shù)據(jù)發(fā)生了變化:
具體的模板設(shè)置可參考:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Form\TypicalApp\CellsArrayForm.cpt。