本發(fā)明屬于工程造價(jià)報(bào)表生成領(lǐng)域,具體涉及一種基于工程造價(jià)計(jì)算描述語言BCL的報(bào)表配置化生成執(zhí)行裝置及生成方法,具體實(shí)現(xiàn)工程造價(jià)報(bào)表數(shù)據(jù)生成并可動(dòng)態(tài)配置報(bào)表生成的數(shù)據(jù)及格式。
背景技術(shù):
隨著信息技術(shù)不斷發(fā)展及企業(yè)管理的提升,工程造價(jià)計(jì)算日益精細(xì)化,各類報(bào)表越來越多并且報(bào)表生成邏輯復(fù)雜及報(bào)表格式多樣化。傳統(tǒng)的報(bào)表生成,通常為每張報(bào)表編寫一份數(shù)據(jù)及格式生成代碼,而實(shí)際存在不少報(bào)表輸出規(guī)則相似,很容易導(dǎo)致相同邏輯重復(fù)編碼情況。而報(bào)表生成邏輯及報(bào)表格式在出現(xiàn)定制化需求時(shí),目前通常在代碼中擴(kuò)展特殊處理邏輯,一旦定制化需求過多代碼復(fù)雜度呈幾何數(shù)增長(zhǎng),不利于后期維護(hù)。
傳統(tǒng)的報(bào)表生成,報(bào)表生成規(guī)則、邏輯及樣式通常通過編碼實(shí)現(xiàn),并集成在報(bào)表生成裝置中。報(bào)表生成裝置一旦發(fā)布用戶無法更改報(bào)表生成規(guī)則,這種方式導(dǎo)致在軟件產(chǎn)品中傳統(tǒng)的報(bào)表生成裝置靈活性差。一旦業(yè)務(wù)發(fā)生變化,哪怕報(bào)表輸出數(shù)據(jù)項(xiàng)順序發(fā)生變更這種微小更改,都必須根據(jù)變化的需求修改代碼,并經(jīng)過編譯、集成、打包、測(cè)試、發(fā)布等一系列研發(fā)流程,導(dǎo)致軟件響應(yīng)速度慢及維護(hù)更新成本高。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)存在的問題,本發(fā)明提出了一種基于工程造價(jià)計(jì)算描述語言BCL的報(bào)表生成裝置及生成方法,用于定制生成報(bào)表數(shù)據(jù)及格式。
所述報(bào)表生成裝置及執(zhí)行方法基于工程造價(jià)計(jì)算語言BCL,與所述工程造價(jià)計(jì)算語言BCL一致,能夠獨(dú)立于不同的產(chǎn)品、項(xiàng)目及數(shù)據(jù)源,均具有與開發(fā)語言無關(guān)性和平臺(tái)無關(guān)性。
1.所述工程造價(jià)計(jì)算描述語言BCL,其實(shí)現(xiàn)包括:
(1)設(shè)計(jì)描述具體計(jì)算算法規(guī)則的代數(shù)式及擴(kuò)展運(yùn)算表達(dá)式結(jié)構(gòu),即EL表達(dá)式;所述EL表達(dá)式是對(duì)計(jì)算算法規(guī)則的一個(gè)完整描述,以${和}作為起始和結(jié)束標(biāo)記,在沿襲傳統(tǒng)代數(shù)表達(dá)式運(yùn)算特點(diǎn)的同時(shí),EL表達(dá)式包含多種條件選擇表達(dá)式的條件選擇運(yùn)算和完成具體計(jì)算規(guī)則的函數(shù)運(yùn)算在內(nèi)的其他高級(jí)運(yùn)算功能。與傳統(tǒng)代數(shù)運(yùn)算不同,所述EL表達(dá)式包含種類多元化的操作數(shù),支持?jǐn)?shù)值、字符串和變量等類型,其中,變量類型操作數(shù)是所述EL表達(dá)式支持動(dòng)態(tài)數(shù)據(jù)掛接的典型體現(xiàn),其值可以為外部對(duì)象的引用,也可以為執(zhí)行階段設(shè)定的具體數(shù)據(jù)值。
所述條件表達(dá)式以#{和}作為起始和結(jié)束標(biāo)記,其內(nèi)部包含多個(gè)條件分支和之多一個(gè)缺省條件分支,每個(gè)分支對(duì)應(yīng)一個(gè)EL表達(dá)式,整個(gè)條件選擇表達(dá)式的取值為當(dāng)前被激活條件分支對(duì)應(yīng)的EL表達(dá)式計(jì)算結(jié)果,如:
#{
->條件1:EL表達(dá)式1;
->條件2:EL表達(dá)式2;
->:EL表達(dá)式3;
}
所述函數(shù)運(yùn)算定義了具體的計(jì)算規(guī)則,以滿足工程造價(jià)特定計(jì)算需求,其語法結(jié)構(gòu)與C語言兼容,并支持BCL的擴(kuò)展數(shù)據(jù)類型,除此之外,所述函數(shù)的調(diào)用還支持把EL表達(dá)式作為參數(shù)進(jìn)行輸入,能夠?qū)崿F(xiàn)指定工程數(shù)據(jù)范圍與EL表達(dá)式的動(dòng)態(tài)綁定,進(jìn)而減少表達(dá)式代碼冗余,語法格式為:
sum(數(shù)據(jù)源標(biāo)記,數(shù)據(jù)源別名,?EL表達(dá)式);
(2)分析工程造價(jià)計(jì)算需求,確定除EL表達(dá)式以外的其他計(jì)算邏輯單元;
通過對(duì)造價(jià)工程數(shù)據(jù)及計(jì)算算法、過程的總結(jié)歸納,得出任何工程的工程造價(jià)復(fù)雜計(jì)算算法都可分解為最小的原子計(jì)算邏輯單元,即:EL表達(dá)式、宏表、變量、參數(shù)、數(shù)據(jù)源和包。其中,所述宏表能完整的表示一個(gè)具有遞歸、多字段、多記錄、有匯總關(guān)系的計(jì)算規(guī)則。所述數(shù)據(jù)源用于描述一個(gè)工程的數(shù)據(jù)及其數(shù)據(jù)范圍,它是BCL語言與工程數(shù)據(jù)的粘合劑,實(shí)現(xiàn)真實(shí)數(shù)據(jù)的傳遞。所述變量是包含數(shù)據(jù)源、數(shù)據(jù)過濾算法以及費(fèi)用計(jì)算算法規(guī)則在內(nèi)的具體費(fèi)用計(jì)算結(jié)構(gòu),相較于僅包含具體數(shù)值的參數(shù)而言,變量的計(jì)算有一定的先后次序,更為復(fù)雜,但功能強(qiáng)大。所述包為其他原子計(jì)算邏輯單元的容器,能劃定計(jì)算邏輯單元的作用范圍,屏蔽命名沖突。
(3)分析工程造價(jià)報(bào)表輸出需求,基于工程造價(jià)計(jì)算描述語言擴(kuò)展并確定工程造價(jià)報(bào)表生成描述語言,具體包括擴(kuò)展EL表達(dá)式、EL表達(dá)式報(bào)表輸出函數(shù)及除EL表達(dá)式以外的報(bào)表輸出邏輯單元;
通過對(duì)造價(jià)報(bào)表輸出數(shù)據(jù)及計(jì)算算法、過程的總結(jié)歸納,在工程造價(jià)計(jì)算描述語言BCL基礎(chǔ)上擴(kuò)展EL表達(dá)式、定義EL表達(dá)式報(bào)表函數(shù)運(yùn)算及報(bào)表輸出邏輯單元。
所述的EL表達(dá)式在工程造價(jià)計(jì)算描述語言的基礎(chǔ)上擴(kuò)展增加帶過程性質(zhì)的EL表達(dá)式,用于循環(huán)執(zhí)行EL表達(dá)式及函數(shù),執(zhí)行報(bào)表輸出相關(guān)函數(shù)。以for循環(huán)舉例,支持嵌套EL表達(dá)式調(diào)用,for循環(huán)語法格式為:
for(數(shù)據(jù)源標(biāo)記,數(shù)據(jù)源別名,?EL表達(dá)式,?EL表達(dá)式);
所述的報(bào)表輸出函數(shù),是工程造價(jià)計(jì)算描述語言BCL中EL表達(dá)式的擴(kuò)展,其定義了添加報(bào)表行、填充單元格、獲取單元格數(shù)據(jù)、刪除行、獲取行數(shù)、添加列定義、開始合并標(biāo)記和結(jié)束合并標(biāo)記等操作函數(shù),可實(shí)現(xiàn)報(bào)表數(shù)據(jù)的填充,語法格式為:
addrow(?EL表達(dá)式);
addfield(列名稱,?EL表達(dá)式);
deleterow();
getrowcount();
addfielddef(列名稱,列類型);
beginunioncell(起始列名稱,結(jié)束列名稱,合并類型);
endunioncell(起始列名稱,結(jié)束列名稱,合并類型);
所述的報(bào)表輸出邏輯單元,參照工程造價(jià)計(jì)算描述語言。通過對(duì)造價(jià)工程報(bào)表輸出數(shù)據(jù)及計(jì)算算法、過程的總結(jié)歸納,得出任何工程的工程造價(jià)復(fù)雜工程報(bào)表輸出算法都可分解為最小的原子報(bào)表輸出邏輯單元,即:EL表達(dá)式、變量、參數(shù)、報(bào)表數(shù)據(jù)源、報(bào)表對(duì)象。
其中,所述EL表達(dá)式、變量、參數(shù)與工程造價(jià)計(jì)算語言描述一致。所述數(shù)據(jù)源用于描述一個(gè)工程的數(shù)據(jù)及其數(shù)據(jù)范圍,它是BCL語言與工程數(shù)據(jù)的粘合劑,實(shí)現(xiàn)真實(shí)數(shù)據(jù)的傳遞。所述報(bào)表對(duì)象包括報(bào)表格式對(duì)象、報(bào)表數(shù)據(jù)對(duì)象、報(bào)表生成參數(shù)對(duì)象,它是BCL語言與工程報(bào)表輸出數(shù)據(jù)的粘合劑,其中報(bào)表格式對(duì)象實(shí)現(xiàn)報(bào)表格式數(shù)據(jù)的傳遞、報(bào)表數(shù)據(jù)對(duì)象報(bào)表真實(shí)數(shù)據(jù)的傳遞、報(bào)表生成參數(shù)對(duì)象實(shí)現(xiàn)報(bào)表生成參數(shù)的傳遞。通過工程造價(jià)計(jì)算描述語言BCL,實(shí)現(xiàn)生成報(bào)表數(shù)據(jù)及格式填充到報(bào)表對(duì)象中,實(shí)現(xiàn)報(bào)表數(shù)據(jù)及格式的生成。
2.一種基于工程造價(jià)計(jì)算描述語言BCL的報(bào)表生成裝置,該裝置是基于上述擴(kuò)展的工程造價(jià)計(jì)算描述語言BCL及工程造價(jià)報(bào)表生成描述語言而實(shí)現(xiàn)的,包括:報(bào)表BCL腳本編制裝置、報(bào)表BCL腳本編譯裝置、報(bào)表BCL腳本解析裝置、報(bào)表格式生成裝置、報(bào)表BCL腳本執(zhí)行裝置及報(bào)表數(shù)據(jù)保存裝置。
所述的報(bào)表BCL腳本編制裝置是一套可視化的報(bào)表生成腳本編制裝置,使用者通過該裝置能可視化編輯報(bào)表數(shù)據(jù)及格式生成規(guī)則,并生成符合工程造價(jià)計(jì)算描述語言語法的報(bào)表BCL腳本。
所述的報(bào)表BCL腳本編譯裝置用于解析每張報(bào)表BCL腳本中BCL元素及報(bào)表元素進(jìn)行編譯處理,形成多個(gè)EL表達(dá)式集合,每個(gè)EL表達(dá)式集合都是一個(gè)BCL元素構(gòu)建成的語法樹,其中的BCL元素是最小待執(zhí)行單元,內(nèi)部包含描述計(jì)算算法規(guī)則、報(bào)表函數(shù)運(yùn)算的EL表達(dá)式集合。
所述的報(bào)表BCL腳本解析裝置包含了報(bào)表BCL腳本文件生成器和報(bào)表BCL腳本解析器,用于實(shí)現(xiàn)報(bào)表BCL腳本編譯裝置中報(bào)表BCL元素對(duì)象與已編譯報(bào)表BCL腳本文件之間的相互轉(zhuǎn)換。能有效記錄或者還原報(bào)表BCL元素對(duì)象,避免報(bào)表BCL腳本重復(fù)編譯,加快報(bào)表生成的效率。
所述的報(bào)表格式生成裝置,用于實(shí)現(xiàn)報(bào)表對(duì)象中的報(bào)表格式對(duì)象與報(bào)表格式文件之間的相互轉(zhuǎn)換及報(bào)表格式信息的編輯。報(bào)表格式對(duì)象包括報(bào)表頁面信息、報(bào)表表頭名稱、報(bào)表表頭格式等,通過所述裝置實(shí)現(xiàn)記錄、獲取及編輯對(duì)應(yīng)報(bào)表格式信息。
所述的報(bào)表BCL腳本執(zhí)行裝置,用于解釋執(zhí)行所述報(bào)表BCL腳本編譯裝置生成報(bào)表BCL對(duì)象,執(zhí)行編譯出EL表達(dá)式集合并調(diào)用報(bào)表函數(shù)實(shí)現(xiàn)報(bào)表數(shù)據(jù)及格式保存到報(bào)表BCL對(duì)象中。所述報(bào)表BCL對(duì)象為EL表達(dá)式集合,內(nèi)部過程涉及報(bào)表BCL對(duì)象解釋執(zhí)行模塊、語法分析模塊、結(jié)點(diǎn)計(jì)算模塊、工程數(shù)據(jù)反應(yīng)器模塊、報(bào)表格式參數(shù)反應(yīng)器模塊、數(shù)據(jù)源模塊、運(yùn)行上下文模塊、報(bào)表函數(shù)運(yùn)算模塊。其中報(bào)表BCL對(duì)象解釋執(zhí)行模塊用于控制BCL對(duì)象解釋執(zhí)行過程,通過語法分析模塊報(bào)表BCL對(duì)象解釋成待計(jì)算BCL元素結(jié)點(diǎn),利用結(jié)點(diǎn)計(jì)算模塊對(duì)BCL對(duì)象內(nèi)部包含的BCL語法樹中的每個(gè)節(jié)點(diǎn)進(jìn)行計(jì)算。其中數(shù)據(jù)源模塊用于對(duì)工程數(shù)據(jù)反應(yīng)器模塊、報(bào)表格式參數(shù)反應(yīng)器模塊提供數(shù)據(jù)進(jìn)行處理,包括數(shù)據(jù)源篩選、遍歷、分組等,并通過運(yùn)行上下文模塊形成結(jié)點(diǎn)計(jì)算模塊可供使用的數(shù)據(jù)源。報(bào)表函數(shù)運(yùn)算模塊包括報(bào)表添加列、添加行,填充行單元格數(shù)據(jù)、修改行單元格數(shù)據(jù)、刪除列、刪除行、添加合并標(biāo)記、報(bào)表換頁操作等報(bào)表函數(shù),依據(jù)不同函數(shù)運(yùn)算邏輯,用于實(shí)現(xiàn)將節(jié)點(diǎn)計(jì)算結(jié)果數(shù)據(jù)及格式保存到報(bào)表對(duì)象中。
所述的報(bào)表數(shù)據(jù)保存裝置,用于實(shí)現(xiàn)將報(bào)表對(duì)象保存到報(bào)表文件中。
3.一種基于工程造價(jià)計(jì)算描述語言BCL的報(bào)表生成方法,其步驟如下:
第一步:編制報(bào)表BCL腳本和格式文件;
利用所述的報(bào)表腳本編制裝置,根據(jù)每張報(bào)表輸出需求定制輸出規(guī)則,每張報(bào)表最終生成一份報(bào)表BCL腳本。所述的報(bào)表腳本編制裝置提供可視化編輯界面,通過可視化編輯界面可實(shí)現(xiàn)靈活配置報(bào)表生成規(guī)則。所述的報(bào)表BCL腳本為EL表達(dá)式集合,符合工程造價(jià)計(jì)算描述語言語法規(guī)則,其語法格式為:
第二步:創(chuàng)建報(bào)表對(duì)象,加載報(bào)表配置文件;
所述報(bào)表對(duì)象包括報(bào)表格式對(duì)象、報(bào)表數(shù)據(jù)對(duì)象、報(bào)表生成參數(shù)對(duì)象,它是BCL語言與工程報(bào)表輸出數(shù)據(jù)的粘合劑,其中報(bào)表格式對(duì)象實(shí)現(xiàn)報(bào)表格式數(shù)據(jù)的傳遞、報(bào)表數(shù)據(jù)對(duì)象實(shí)現(xiàn)報(bào)表真實(shí)數(shù)據(jù)的傳遞、報(bào)表生成參數(shù)對(duì)象實(shí)現(xiàn)報(bào)表生成參數(shù)傳遞。
所述報(bào)表配置文件,包括報(bào)表頁面信息、報(bào)表表頭配置信息、報(bào)表生成參數(shù)信息等。
第三步:加載報(bào)表BCL腳本;
所述報(bào)表BCL腳本,是指使用工程造價(jià)計(jì)算描述語言BCL描述的有一定語法規(guī)則的腳本,內(nèi)部定義了該張報(bào)表的數(shù)據(jù)生成規(guī)則。
第四步:對(duì)BCL腳本進(jìn)行詞法分析,生成EL表達(dá)式;
所述EL表達(dá)式是對(duì)報(bào)表生成算法規(guī)則的一個(gè)完整描述,以${和}作為開始和結(jié)束標(biāo)記;所述EL表達(dá)式包含種類多元化的操作數(shù),支持?jǐn)?shù)值、字符串和變量等類型,其中,變量類型操作數(shù)是所述EL表達(dá)式支持動(dòng)態(tài)數(shù)據(jù)掛接的典型體現(xiàn),其值可以為外部對(duì)象的引用,也可以為執(zhí)行階段設(shè)定的具體數(shù)據(jù)值。
在沿襲傳統(tǒng)代數(shù)表達(dá)式運(yùn)算特點(diǎn)的同時(shí),EL表達(dá)式包含多種表達(dá)式選擇的條件選擇運(yùn)算和完成具體計(jì)算規(guī)則的函數(shù)運(yùn)算在內(nèi)的其它高級(jí)運(yùn)算功能。
所述條件表達(dá)式以#{和}作為起始和結(jié)束標(biāo)記,其內(nèi)部包含多個(gè)條件分支和之多一個(gè)缺省條件分支,每個(gè)分支對(duì)應(yīng)一個(gè)EL表達(dá)式,整個(gè)條件選擇表達(dá)式的取值為當(dāng)前被激活條件分支對(duì)應(yīng)的EL表達(dá)式計(jì)算結(jié)果,如:
#{
->條件1:EL表達(dá)式1;
->條件2:EL表達(dá)式2;
->:EL表達(dá)式3;
}
所述函數(shù)運(yùn)算定義了具體的計(jì)算規(guī)則,以滿足工程造價(jià)特定計(jì)算需求,其語法結(jié)構(gòu)與C語言兼容,并支持BCL的擴(kuò)展數(shù)據(jù)類型,除此之外,所述函數(shù)的調(diào)用還支持把EL表達(dá)式作為參數(shù)進(jìn)行輸入,能夠?qū)崿F(xiàn)指定工程數(shù)據(jù)范圍與EL表達(dá)式的動(dòng)態(tài)綁定,進(jìn)而減少表達(dá)式代碼冗余,語法格式為:
sum(數(shù)據(jù)源標(biāo)記,數(shù)據(jù)源別名,?EL表達(dá)式);
第五步:使用語法分析器,將所有EL表達(dá)式,生成對(duì)應(yīng)的BCL語法樹結(jié)點(diǎn),進(jìn)而形成整個(gè)BCL語法樹。該過程中若存在語法錯(cuò)誤,則轉(zhuǎn)向執(zhí)行第十一步;
BCL語法樹結(jié)點(diǎn)包含結(jié)點(diǎn)值屬性、結(jié)點(diǎn)類型屬性、當(dāng)前結(jié)點(diǎn)引用的對(duì)象地址值以及左右結(jié)點(diǎn)的關(guān)聯(lián)屬性。當(dāng)單詞類型為變量型操作數(shù)時(shí),語法分析器將該單詞傳遞給當(dāng)前報(bào)表上下文模塊,進(jìn)行變量匹配。若匹配不成功,則生成未知變量結(jié)點(diǎn);若匹配成功,則創(chuàng)建引用變量結(jié)點(diǎn),引用變量結(jié)點(diǎn)代表著報(bào)表數(shù)據(jù)源的真實(shí)數(shù)據(jù),通過引用變量結(jié)點(diǎn)來獲取報(bào)表數(shù)據(jù)源的實(shí)際數(shù)據(jù)進(jìn)行計(jì)算。
根據(jù)結(jié)點(diǎn)類型匹配,分析匹配結(jié)果,若為BCL元素,則先將該BCL元素進(jìn)行編譯處理,生成對(duì)應(yīng)BCL對(duì)象,作為當(dāng)前引用變量結(jié)點(diǎn)的外部引用對(duì)象。若為BCL對(duì)象,則直接將當(dāng)前引用變量結(jié)點(diǎn)指向該BCL對(duì)象。
第六步:創(chuàng)建相應(yīng)BCL對(duì)象,并關(guān)聯(lián)經(jīng)語法分析后得到的BCL語法樹;
第七步:通過對(duì)生成的BCL對(duì)象進(jìn)行分析,獲取待計(jì)算BCL語法樹對(duì)象;
第八步:解釋執(zhí)行當(dāng)前BCL語法樹,按照后序遍歷的方式處理語法樹中的結(jié)點(diǎn),并且將第二步中創(chuàng)建的報(bào)表對(duì)象作為上下文提供給BCL執(zhí)行,直到所有BCL語法樹執(zhí)行完畢;
該過程中涉及到的處理包括:
(1)若當(dāng)前結(jié)點(diǎn)為報(bào)表函數(shù)結(jié)點(diǎn),則根據(jù)操作類型和提供的參數(shù)信息,對(duì)報(bào)表對(duì)象進(jìn)行操作。上述報(bào)表函數(shù)結(jié)點(diǎn)語法規(guī)則如下:
addrow(?EL表達(dá)式);
添加報(bào)表行數(shù)據(jù),參數(shù)中的EL表達(dá)式可以嵌套調(diào)用addfield字段,實(shí)現(xiàn)填充當(dāng)前行對(duì)應(yīng)的單元格數(shù)據(jù)。
addfield(列名稱,?EL表達(dá)式);
添加報(bào)表行列字段數(shù)據(jù),參數(shù)1為當(dāng)前報(bào)表行列字段名,參數(shù)2為當(dāng)前報(bào)表行列字段值,支持EL表達(dá)式實(shí)現(xiàn)復(fù)雜數(shù)據(jù)計(jì)算。
deleterow();刪除報(bào)表行數(shù)據(jù);
getrowcount();獲取報(bào)表行數(shù);
beginunioncell(起始列名稱,結(jié)束列名稱,合并類型);
定義報(bào)表的開始合并單元格;
endunioncell(起始列名稱,結(jié)束列名稱合并類型);
定義報(bào)表的結(jié)束合并單元格。
(2)若當(dāng)前結(jié)點(diǎn)為傳統(tǒng)代數(shù)運(yùn)算符結(jié)點(diǎn),則分別計(jì)算并獲取結(jié)點(diǎn)值,作為左右操作數(shù),進(jìn)行代數(shù)運(yùn)算,并將運(yùn)算結(jié)果值作為當(dāng)前結(jié)點(diǎn)的值;
(3)若為BCL變量元素,則先將過濾表達(dá)式對(duì)應(yīng)的BCL語法樹執(zhí)行第八步,對(duì)原始BCL數(shù)據(jù)源進(jìn)行過濾,再將值表達(dá)式對(duì)應(yīng)的BCL語法樹對(duì)象執(zhí)行第八步,得到當(dāng)前變量對(duì)象的結(jié)果值;
(4)若當(dāng)前結(jié)點(diǎn)為引用變量結(jié)點(diǎn),則將該結(jié)點(diǎn)對(duì)應(yīng)的外部引用對(duì)象的值作為當(dāng)前結(jié)點(diǎn)的結(jié)果值;
(5)若當(dāng)前結(jié)點(diǎn)為通用函數(shù)結(jié)點(diǎn),則利用函數(shù)注冊(cè)器,匹配并執(zhí)行相應(yīng)函數(shù);
(6)若當(dāng)前結(jié)點(diǎn)為未知變量結(jié)點(diǎn),則匹配并設(shè)置為當(dāng)前運(yùn)行上下文中數(shù)據(jù)源的屬性值;
第九步:判斷是否存在錯(cuò)誤信息,若存在,則轉(zhuǎn)向執(zhí)行第十步;反之,執(zhí)行第十一步;
第十步:將報(bào)表數(shù)據(jù)持久化為文件,進(jìn)而完成執(zhí)行任務(wù),流程結(jié)束;
第十一步:生成相應(yīng)的錯(cuò)誤信息報(bào)告,流程結(jié)束。
本發(fā)明的有益效果:
1、本發(fā)明所述報(bào)表生成裝置及方法可實(shí)現(xiàn)將報(bào)表生成計(jì)算邏輯及生成規(guī)則形成報(bào)表BCL腳本文件,達(dá)到報(bào)表數(shù)據(jù)計(jì)算及生成規(guī)則與報(bào)表生成裝置分離的目的,實(shí)現(xiàn)報(bào)表生成過程的可配置化。通過報(bào)表BCL腳本編制裝置可靈活配置報(bào)表生成規(guī)則以獲取預(yù)期報(bào)表,而不需要重新發(fā)布報(bào)表生成裝置,能有效提升報(bào)表靈活性,滿足報(bào)表定制化需求。
2、本發(fā)明所述的報(bào)表生成裝置及方法是針對(duì)工程造價(jià)報(bào)表的特點(diǎn),基于工程造價(jià)計(jì)算描述語言擴(kuò)展設(shè)計(jì)一套適合報(bào)表生成工程造價(jià)報(bào)表描述語言,形成一套生成報(bào)表裝置。通過設(shè)計(jì)具有高級(jí)運(yùn)算功能的EL表達(dá)式、具有一定結(jié)構(gòu)和規(guī)則的多元化計(jì)算單元和報(bào)表生成操作邏輯單元,能夠滿足工程造價(jià)報(bào)表數(shù)據(jù)計(jì)算及生成多樣性的需求,具有良好的擴(kuò)展性。
3、所述報(bào)表BCL腳本執(zhí)行裝置采用解釋執(zhí)行方式,報(bào)表BCL腳本編輯裝置預(yù)編譯報(bào)表BCL腳本形成報(bào)表BCL對(duì)象,并通過BCL腳本解析裝置實(shí)現(xiàn)報(bào)表BCL對(duì)象與BCL腳本文件之間的轉(zhuǎn)換,所述報(bào)表BCL腳本執(zhí)行裝置生成報(bào)表時(shí)直接解釋執(zhí)行報(bào)表BCL對(duì)象,無需重復(fù)編譯,實(shí)現(xiàn)一次編譯多次解釋執(zhí)行,從而有效提高報(bào)表生成效率。
附圖說明
圖1是本發(fā)明實(shí)施例中報(bào)表BCL數(shù)據(jù)生成的編譯執(zhí)行機(jī)制圖;
圖2是本發(fā)明實(shí)施例給出的一種報(bào)表生成流程示意圖;
圖3是本發(fā)明實(shí)施例給出的一種數(shù)據(jù)源示意圖;
圖4是本發(fā)明實(shí)施例給出的一種報(bào)表數(shù)據(jù)填充示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例。對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例以電力工程造價(jià)報(bào)表生成為例,提供一種報(bào)表生成裝置和方法實(shí)現(xiàn)機(jī)制,如圖1所示,該實(shí)現(xiàn)機(jī)制的具體實(shí)施過程包括了以下三個(gè)步驟,參照?qǐng)D2可知:
步驟A1:編制報(bào)表數(shù)據(jù)生成規(guī)則及樣式,生成報(bào)表BCL腳本文件和格式文件
利用所述報(bào)表BCL腳本編輯裝置編制報(bào)表生成BCL腳本和格式,報(bào)表生成BCL腳本和格式一旦編制完成,可重復(fù)利用。
步驟A2:初始化報(bào)表對(duì)象、報(bào)表輸出函數(shù)、通用函數(shù)、報(bào)表數(shù)據(jù)源;
所述報(bào)表對(duì)象,為包含報(bào)表數(shù)據(jù)、格式、參數(shù)的邏輯單元,其中包括了報(bào)表頁面信息、表頭格式和報(bào)表數(shù)據(jù)。采用報(bào)表格式生成裝置加載報(bào)表格式文件,生成報(bào)表對(duì)象。
所述報(bào)表輸出函數(shù)可實(shí)現(xiàn)數(shù)據(jù)填充到報(bào)表對(duì)象。
所述通用函數(shù)用于計(jì)算及處理BCL生成報(bào)表數(shù)據(jù)。
所述報(bào)表數(shù)據(jù)源模塊用于描述一個(gè)工程的數(shù)據(jù)及其數(shù)據(jù)范圍,它是BCL語言與工程數(shù)據(jù)的粘合劑,實(shí)現(xiàn)解析工程數(shù)據(jù)轉(zhuǎn)換為報(bào)表生成所需的數(shù)據(jù)源。通過報(bào)表BCL腳本有效組織數(shù)據(jù)源及生成規(guī)則可生成各種類型的報(bào)表。實(shí)施例中的數(shù)據(jù)源如圖3所示,可實(shí)現(xiàn)構(gòu)建工程報(bào)表所需完整數(shù)據(jù)源,可保證生成工程造價(jià)所需所有報(bào)表,具有良好的靈活性及擴(kuò)展性。
步驟A3:編譯報(bào)表BCL腳本;
報(bào)表BCL腳本中定義了報(bào)表生成的數(shù)據(jù)內(nèi)容和展現(xiàn)形式,通過解析和編譯BCL腳本,獲得到可執(zhí)行的BCL語法樹,生成具有層次結(jié)構(gòu)的BCL對(duì)象存入BCL文檔中。
步驟A4:解釋執(zhí)行BCL腳本,執(zhí)行過程中計(jì)算報(bào)表數(shù)據(jù),并調(diào)用報(bào)表函數(shù)將生成數(shù)據(jù)填充到報(bào)表對(duì)象
加載步驟A3生成的BCL腳本文檔,形成待計(jì)算的BCL對(duì)象并解釋執(zhí)行。執(zhí)行過程中涉及到基礎(chǔ)數(shù)據(jù)從步驟A2報(bào)表數(shù)據(jù)源中獲取,并通過報(bào)表輸出函數(shù)填充到步驟A2創(chuàng)建的報(bào)表對(duì)象中。
BCL腳本解釋執(zhí)行邏輯流程如圖4所示:
a.步驟B1、B2實(shí)現(xiàn)在BCL執(zhí)行過程中調(diào)用報(bào)表輸出函數(shù)添加報(bào)表行、字段;
b.步驟B3通過解釋執(zhí)行EL表達(dá)式,從報(bào)表數(shù)據(jù)源獲取所需數(shù)據(jù),并按EL表達(dá)式語法規(guī)則實(shí)現(xiàn)單元格數(shù)據(jù)的計(jì)算。
c.步驟B4將計(jì)算結(jié)果數(shù)據(jù)填充到報(bào)表對(duì)象單元格中
循環(huán)執(zhí)行以上步驟,最終實(shí)現(xiàn)報(bào)表數(shù)據(jù)的輸出并得到填充好數(shù)據(jù)的報(bào)表對(duì)象。
步驟A5:報(bào)表對(duì)象持久化到文件中,獲得到結(jié)果數(shù)據(jù),完成報(bào)表生成;
將步驟A5中得到的已填充數(shù)據(jù)的報(bào)表對(duì)象持久化到文件中,作為最終的結(jié)果輸出,報(bào)表文件可作為系統(tǒng)的接口,也可以提供給報(bào)表控件展現(xiàn)。