[發明專利]基于工程造價計算描述語言BCL的報表生成裝置及生成方法有效
| 申請號: | 201611207627.X | 申請日: | 2016-12-23 |
| 公開(公告)號: | CN106648662B | 公開(公告)日: | 2020-02-21 |
| 發明(設計)人: | 朱林生;萬慧建;何賀;歐陽強;郝海風;曾江佑;王海民;廖成慧;劉國 | 申請(專利權)人: | 江西博微新技術有限公司 |
| 主分類號: | G06F8/30 | 分類號: | G06F8/30;G06F8/34;G06Q10/10 |
| 代理公司: | 南昌市平凡知識產權代理事務所 36122 | 代理人: | 夏材祥 |
| 地址: | 330096 江西省*** | 國省代碼: | 江西;36 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 基于 工程造價 計算 描述 語言 bcl 報表 生成 裝置 方法 | ||
1.一種基于工程造價計算描述語言BCL的報表生成裝置,其特征在于,所述裝置是基于工程造價計算描述語言BCL及工程造價報表生成描述語言而實現的,包括:報表BCL腳本編制裝置、報表BCL腳本編譯裝置、報表BCL腳本解析裝置、報表格式生成裝置、報表BCL腳本執行裝置及報表數據保存裝置;
所述工程造價計算描述語言BCL,其實現包括以下步驟:
(1)所述工程造價計算描述語言BCL描述具體計算算法規則的代數式及擴展運算表達式結構,即EL表達式;所述EL表達式是對計算算法規則的一個完整描述,以${和}作為起始和結束標記,在沿襲傳統代數表達式運算特點的同時,EL表達式支持用于包含多種條件選擇表達式的條件選擇運算和完成具體計算規則的函數運算,所述EL表達式包含種類多元化的操作數,支持數值、字符串和變量類型,其中,變量類型操作數是所述EL表達式支持動態數據掛接的典型體現,其值為外部對象的引用;
條件選擇表達式以#{和}作為起始和結束標記,其內部包含多個條件分支和至多一個缺省條件分支,每個分支對應一個EL表達式,整個條件選擇表達式的取值為當前被激活條件分支對應的EL表達式計算結果:
#{
->條件1:EL表達式1;
->條件2:EL表達式2;
->:EL表達式3;
}
函數運算定義了具體的計算規則,以滿足工程造價特定計算需求,其語法結構與C語言兼容,并支持BCL的擴展數據類型,除此之外,所述函數的調用還支持把EL表達式作為參數進行輸入,能夠實現指定工程數據范圍與EL表達式的動態綁定,進而減少表達式代碼冗余,語法格式為:
sum(數據源標記,數據源別名,?EL表達式);
(2)分析工程造價計算需求,確定除EL表達式以外的其他計算邏輯單元;
通過對造價工程數據及計算算法、過程的總結歸納,得出任何工程的工程造價復雜計算算法都可分解為最小的原子計算邏輯單元,即:EL表達式、宏表、變量、參數、數據源和包;其中,所述宏表能完整的表示一個具有遞歸、多字段、多記錄、有匯總關系的計算規則;所述數據源用于描述一個工程的數據及其數據范圍,它是BCL語言與工程數據的粘合劑,實現真實數據的傳遞;所述變量是包含數據源、數據過濾算法以及費用計算算法規則在內的具體費用計算結構,相較于僅包含具體數值的參數而言,變量的計算有一定的先后次序,更為復雜,但功能強大;所述包為其他原子計算邏輯單元的容器,能劃定計算邏輯單元的作用范圍,屏蔽命名沖突;
(3)分析工程造價報表輸出需求,基于工程造價計算描述語言擴展并確定工程造價報表生成描述語言,具體包括擴展EL表達式、EL表達式報表輸出函數及除EL表達式以外的報表輸出邏輯單元;
通過對造價報表輸出數據及計算算法、過程的總結歸納,在工程造價計算描述語言BCL基礎上擴展EL表達式、定義EL表達式報表函數運算及報表輸出邏輯單元;
所述的EL表達式在工程造價計算描述語言的基礎上擴展增加帶過程性質的EL表達式,用于循環執行EL表達式及函數,執行報表輸出相關函數;支持嵌套EL表達式調用,for循環語法格式為:
for(數據源標記,數據源別名,?EL表達式,?EL表達式);
所述的報表輸出函數,是工程造價計算描述語言BCL中EL表達式的擴展,其定義了添加報表行、填充單元格、獲取單元格數據、刪除行、獲取行數、添加列定義、開始合并標記和結束合并標記,可實現報表數據的填充,語法格式為:
addrow(?EL表達式);
addfield(列名稱,?EL表達式);
deleterow();
getrowcount();
addfielddef(列名稱,列類型);
beginunioncell(起始列名稱,結束列名稱,合并類型);
endunioncell(起始列名稱,結束列名稱,合并類型);
所述的報表輸出邏輯單元,參照工程造價計算描述語言;通過對造價工程報表輸出數據及計算算法、過程的總結歸納,得出任何工程的工程造價復雜工程報表輸出算法都可分解為最小的原子報表輸出邏輯單元,即:EL表達式、變量、參數、報表數據源、報表對象;
其中,所述EL表達式、變量、參數與工程造價計算語言描述一致,所述報表數據源用于描述一個工程的數據及其數據范圍,它是BCL語言與工程數據的粘合劑,實現真實數據的傳遞;所述報表對象包括報表格式對象、報表數據對象、報表生成參數對象,它是BCL語言與工程報表輸出數據的粘合劑,其中報表格式對象實現報表格式數據的傳遞、報表數據對象實現報表真實數據的傳遞、報表生成參數對象實現報表生成參數的傳遞;通過工程造價計算描述語言BCL,實現生成報表數據及格式填充到報表對象中,實現報表數據及格式的生成;
所述的報表BCL腳本編制裝置是一套可視化的報表生成腳本編制裝置,使用者通過該裝置能可視化編輯報表數據及格式生成規則,并生成符合工程造價計算描述語言語法的報表BCL腳本;
所述的報表BCL腳本編譯裝置用于解析每張報表BCL腳本中BCL元素及報表元素進行編譯處理,形成多個EL表達式集合,每個EL表達式集合都是一個BCL元素構建成的語法樹,其中的BCL元素是最小待執行單元,內部包含描述計算算法規則、報表函數運算的EL表達式集合;
所述的報表BCL腳本解析裝置包含了報表BCL腳本文件生成器和報表BCL腳本解析器,用于實現報表BCL腳本編譯裝置中報表BCL元素對象與已編譯報表BCL腳本文件之間的相互轉換;能有效記錄或者還原報表BCL元素對象,避免報表BCL腳本重復編譯,加快報表生成的效率;
所述的報表格式生成裝置,用于實現報表對象中的報表格式對象與報表格式文件之間的相互轉換及報表格式信息的編輯;報表格式對象包括報表頁面信息、報表表頭名稱、報表表頭格式,通過所述報表格式生成裝置實現記錄、獲取及編輯對應報表格式信息;
所述的報表BCL腳本執行裝置,用于解釋執行所述報表BCL腳本編譯裝置生成報表BCL對象,執行編譯出EL表達式集合并調用報表函數實現報表數據及格式保存到報表BCL對象中;所述報表BCL對象為EL表達式集合,內部過程涉及報表BCL對象解釋執行模塊、語法分析模塊、結點計算模塊、工程數據反應器模塊、報表格式參數反應器模塊、數據源模塊、運行上下文模塊、報表函數運算模塊;其中報表BCL對象解釋執行模塊用于控制BCL對象解釋執行過程,通過語法分析模塊報表BCL對象解釋成待計算BCL元素結點,利用結點計算模塊對BCL對象內部包含的BCL語法樹中的每個節點進行計算;其中數據源模塊用于對工程數據反應器模塊、報表格式參數反應器模塊提供數據進行處理,包括數據源篩選、遍歷、分組,并通過運行上下文模塊形成結點計算模塊可供使用的數據源;報表函數運算模塊包括報表添加列、添加行,填充行單元格數據、修改行單元格數據、刪除列、刪除行、添加合并標記和報表換頁操作,依據不同函數運算邏輯,用于實現將節點計算結果數據及格式保存到報表對象中;
所述的報表數據保存裝置,用于實現將報表對象保存到報表文件中。
2.一種基于工程造價計算描述語言BCL的報表生成方法,其特征在于,步驟為:
第一步:編制報表BCL腳本和格式文件;
利用報表腳本編制裝置,根據每張報表輸出需求定制輸出規則,每張報表最終生成一份報表BCL腳本;所述的報表腳本編制裝置提供可視化編輯界面,通過可視化編輯界面可實現靈活配置報表生成規則;所述的報表BCL腳本為EL表達式集合,符合工程造價計算描述語言語法規則,其語法格式為:
所述EL表達式是對計算算法規則的一個完整描述,以${和}作為起始和結束標記,在沿襲傳統代數表達式運算特點的同時,EL表達式支持用于包含多種條件選擇表達式的條件選擇運算和完成具體計算規則的函數運算,所述EL表達式包含種類多元化的操作數,支持數值、字符串和變量類型,其中,變量類型操作數是所述EL表達式支持動態數據掛接的典型體現,其值為外部對象的引用;
條件選擇表達式以#{和}作為起始和結束標記,其內部包含多個條件分支和至多一個缺省條件分支,每個分支對應一個EL表達式,整個條件選擇表達式的取值為當前被激活條件分支對應的EL表達式計算結果:
#{
->條件1:EL表達式1;
->條件2:EL表達式2;
->:EL表達式3;
}
第二步:創建報表對象,加載報表配置文件;
所述報表對象包括報表格式對象、報表數據對象、報表生成參數對象,它是BCL語言與工程報表輸出數據的粘合劑,其中報表格式對象實現報表格式數據的傳遞、報表數據對象實現報表真實數據的傳遞、報表生成參數對象實現報表生成參數傳遞;
所述報表配置文件,包括報表頁面信息、報表表頭配置信息、報表生成參數信息;
第三步:加載報表BCL腳本;
所述報表BCL腳本,是指使用工程造價計算描述語言BCL描述的有一定語法規則的腳本,內部定義了該張報表的數據生成規則;
第四步:對BCL腳本進行詞法分析,生成EL表達式;
所述EL表達式是對報表生成算法規則的一個完整描述,以${和}作為開始和結束標記;所述EL表達式包含種類多元化的操作數,支持數值、字符串和變量,其中,變量類型操作數是所述EL表達式支持動態數據掛接的典型體現,其值為外部對象的引用;
在沿襲傳統代數表達式運算特點的同時,EL表達式包含多種條件選擇表達式的條件選擇運算和完成具體計算規則的函數運算;
函數運算定義了具體的計算規則,以滿足工程造價特定計算需求,其語法結構與C語言兼容,并支持BCL的擴展數據類型,除此之外,所述函數的調用還支持把EL表達式作為參數進行輸入,能夠實現指定工程數據范圍與EL表達式的動態綁定,進而減少表達式代碼冗余,語法格式為:
sum(數據源標記,數據源別名,?EL表達式);
第五步:使用語法分析器,將所有EL表達式,生成對應的BCL語法樹結點,進而形成整個BCL語法樹;該步中若存在語法錯誤,則轉向執行第十一步;
BCL語法樹結點包含結點值屬性、結點類型屬性、當前結點引用的對象地址值以及左右結點的關聯屬性;當單詞類型為變量型操作數時,語法分析器將該單詞傳遞給當前報表上下文模塊,進行變量匹配,若匹配不成功,則生成未知變量結點;若匹配成功,則創建引用變量結點,引用變量結點代表著報表數據源的真實數據,通過引用變量結點來獲取報表數據源的實際數據進行計算;
根據結點類型匹配,分析匹配結果,若為BCL元素,則先將該BCL元素進行編譯處理,生成對應BCL對象,作為當前引用變量結點的外部引用對象,若為BCL對象,則直接將當前引用變量結點指向該BCL對象;
第六步:創建相應BCL對象,并關聯經語法分析后得到的BCL語法樹;
第七步:通過對生成的BCL對象進行分析,獲取待計算BCL語法樹對象;
第八步:解釋執行當前BCL語法樹,按照后序遍歷的方式處理語法樹中的結點,并且將第二步中創建的報表對象作為上下文提供給BCL執行,直到所有BCL語法樹執行完畢;
該步中涉及到的處理包括:
(1)若當前結點為報表函數結點,則根據操作類型和提供的參數信息,對報表對象進行操作;
上述報表函數結點語法規則如下:
addrow(?EL表達式);
添加報表行數據,參數中的EL表達式可以嵌套調用addfield字段,實現填充當前行對應的單元格數據;
addfield(列名稱,?EL表達式);
添加報表行列字段數據,參數1為當前報表行列字段名,參數2為當前報表行列字段值,支持EL表達式實現復雜數據計算;
deleterow();刪除報表行數據;
getrowcount();獲取報表行數;
beginunioncell(起始列名稱,結束列名稱,合并類型);
定義報表的開始合并單元格;
endunioncell(起始列名稱,結束列名稱合并類型);
定義報表的結束合并單元格;
(2)若當前結點為傳統代數運算符結點,則分別計算并獲取結點值,作為左右操作數,進行代數運算,并將運算結果值作為當前結點的值;
(3)若為BCL變量元素,則先將過濾表達式對應的BCL語法樹執行第八步,對原始BCL數據源進行過濾,再將值表達式對應的BCL語法樹對象執行第八步,得到當前變量對象的結果值;
(4)若當前結點為引用變量結點,則將該結點對應的外部引用對象的值作為當前結點的結果值;
(5)若當前結點為通用函數結點,則利用函數注冊器,匹配并執行相應函數;
(6)若當前結點為未知變量結點,則匹配并設置為當前運行上下文中數據源的屬性值;
第九步:判斷是否存在錯誤信息,若存在,則轉向執行第十步;反之,執行第十一步;
第十步:將報表數據持久化為文件,進而完成執行任務,流程結束;
第十一步:生成相應的錯誤信息報告,流程結束。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于江西博微新技術有限公司,未經江西博微新技術有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.17sss.com.cn/pat/books/201611207627.X/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:通知欄消息的處理方法及移動終端
- 下一篇:金融系統的兼容性處理方法及系統





