首页 / 专利库 / 电脑编程 / 别名 / 基于工程造价计算描述语言BCL的报表生成装置及生成方法

基于工程造价计算描述语言BCL的报表生成装置及生成方法

阅读:764发布:2020-05-14

专利汇可以提供基于工程造价计算描述语言BCL的报表生成装置及生成方法专利检索,专利查询,专利分析的服务。并且一种基于工程造价计算描述语言BCL的报表生成装置及生成方法,包括编制报表BCL脚本和格式文件;创建报表对象,加载报表配置文件;加载报表BCL脚本;对BCL脚本进行词法分析,生成EL表达式;使用语法分析器,将所有EL表达式,生成对应的BCL语法树结点,进而形成整个BCL语法树;创建相应BCL对象,并关联经语法分析后得到的BCL语法树;通过对生成的BCL对象进行分析,获取待计算BCL语法树对象;解释执行当前BCL语法树,按照后序遍历的方式处理语法树中的结点,将创建的报表对象作为上下文提供给BCL执行,直到所有BCL语法树执行完毕;将报表数据持久化为文件,完成任务。本方法实现一次编译多次解释执行,从而有效提高报表生成效率。,下面是基于工程造价计算描述语言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)若当前结点为未知变量结点,则匹配并设置为当前运行上下文中数据源的属性值;
第九步:判断是否存在错误信息,若存在,则转向执行第十步;反之,执行第十一步;
第十步:将报表数据持久化为文件,进而完成执行任务,流程结束;
第十一步:生成相应的错误信息报告,流程结束。

说明书全文

基于工程造价计算描述语言BCL的报表生成装置及生成方法

技术领域

[0001] 本发明属于工程造价报表生成领域,具体涉及一种基于工程造价计算描述语言BCL的报表配置化生成执行装置及生成方法,具体实现工程造价报表数据生成并可动态配置报表生成的数据及格式。

背景技术

[0002] 随着信息技术不断发展及企业管理的提升,工程造价计算日益精细化,各类报表越来越多并且报表生成逻辑复杂及报表格式多样化。传统的报表生成,通常为每张报表编写一份数据及格式生成代码,而实际存在不少报表输出规则相似,很容易导致相同逻辑重复编码情况。而报表生成逻辑及报表格式在出现定制化需求时,目前通常在代码中扩展特殊处理逻辑,一旦定制化需求过多代码复杂度呈几何数增长,不利于后期维护。
[0003] 传统的报表生成,报表生成规则、逻辑及样式通常通过编码实现,并集成在报表生成装置中。报表生成装置一旦发布用户无法更改报表生成规则,这种方式导致在软件产品中传统的报表生成装置灵活性差。一旦业务发生变化,哪怕报表输出数据项顺序发生变更这种微小更改,都必须根据变化的需求修改代码,并经过编译、集成、打包、测试、发布等一系列研发流程,导致软件响应速度慢及维护更新成本高。

发明内容

[0004] 为了解决现有技术存在的问题,本发明提出了一种基于工程造价计算描述语言BCL的报表生成装置及生成方法,用于定制生成报表数据及格式。
[0005] 所述报表生成装置及执行方法基于工程造价计算语言BCL,与所述工程造价计算语言BCL一致,能够独立于不同的产品、项目及数据源,均具有与开发语言无关性和平台无关性。
[0006] 1.所述工程造价计算描述语言BCL,其实现包括:
[0007] (1)设计描述具体计算算法规则的代数式及扩展运算表达式结构,即EL表达式;所述EL表达式是对计算算法规则的一个完整描述,以${和}作为起始和结束标记,在沿袭传统代数表达式运算特点的同时,EL表达式包含多种条件选择表达式的条件选择运算和完成具体计算规则的函数运算在内的其他高级运算功能。与传统代数运算不同,所述EL表达式包含种类多元化的操作数,支持数值、字符串和变量等类型,其中,变量类型操作数是所述EL表达式支持动态数据挂接的典型体现,其值可以为外部对象的引用,也可以为执行阶段设定的具体数据值。
[0008] 所述条件表达式以#{和}作为起始和结束标记,其内部包含多个条件分支和之多一个缺省条件分支,每个分支对应一个EL表达式,整个条件选择表达式的取值为当前被激活条件分支对应的EL表达式计算结果,如:
[0009] #{
[0010] ->条件1:EL表达式1;
[0011] ->条件2:EL表达式2;
[0012] ->:EL表达式3;
[0013] }
[0014] 所述函数运算定义了具体的计算规则,以满足工程造价特定计算需求,其语法结构与C语言兼容,并支持BCL的扩展数据类型,除此之外,所述函数的调用还支持把EL表达式作为参数进行输入,能够实现指定工程数据范围与EL表达式的动态绑定,进而减少表达式代码冗余,语法格式为:
[0015] sum(数据源标记,数据源别名,?EL表达式);
[0016] (2)分析工程造价计算需求,确定除EL表达式以外的其他计算逻辑单元;
[0017] 通过对造价工程数据及计算算法、过程的总结归纳,得出任何工程的工程造价复杂计算算法都可分解为最小的原子计算逻辑单元,即:EL表达式、宏表、变量、参数、数据源和包。其中,所述宏表能完整的表示一个具有递归、多字段、多记录、有汇总关系的计算规则。所述数据源用于描述一个工程的数据及其数据范围,它是BCL语言与工程数据的粘合剂,实现真实数据的传递。所述变量是包含数据源、数据过滤算法以及费用计算算法规则在内的具体费用计算结构,相较于仅包含具体数值的参数而言,变量的计算有一定的先后次序,更为复杂,但功能强大。所述包为其他原子计算逻辑单元的容器,能划定计算逻辑单元的作用范围,屏蔽命名冲突。
[0018] (3)分析工程造价报表输出需求,基于工程造价计算描述语言扩展并确定工程造价报表生成描述语言,具体包括扩展EL表达式、EL表达式报表输出函数及除EL表达式以外的报表输出逻辑单元;
[0019] 通过对造价报表输出数据及计算算法、过程的总结归纳,在工程造价计算描述语言BCL基础上扩展EL表达式、定义EL表达式报表函数运算及报表输出逻辑单元。
[0020] 所述的EL表达式在工程造价计算描述语言的基础上扩展增加带过程性质的EL表达式,用于循环执行EL表达式及函数,执行报表输出相关函数。以for循环举例,支持嵌套EL表达式调用,for循环语法格式为:
[0021] for(数据源标记,数据源别名,?EL表达式,?EL表达式);
[0022] 所述的报表输出函数,是工程造价计算描述语言BCL中EL表达式的扩展,其定义了添加报表行、填充单元格、获取单元格数据、删除行、获取行数、添加列定义、开始合并标记和结束合并标记等操作函数,可实现报表数据的填充,语法格式为:
[0023] addrow(?EL表达式);
[0024] addfield(列名称,?EL表达式);
[0025] deleterow();
[0026] getrowcount();
[0027] addfielddef(列名称,列类型);
[0028] beginunioncell(起始列名称,结束列名称,合并类型);
[0029] endunioncell(起始列名称,结束列名称,合并类型);
[0030] 所述的报表输出逻辑单元,参照工程造价计算描述语言。通过对造价工程报表输出数据及计算算法、过程的总结归纳,得出任何工程的工程造价复杂工程报表输出算法都可分解为最小的原子报表输出逻辑单元,即:EL表达式、变量、参数、报表数据源、报表对象。
[0031] 其中,所述EL表达式、变量、参数与工程造价计算语言描述一致。所述数据源用于描述一个工程的数据及其数据范围,它是BCL语言与工程数据的粘合剂,实现真实数据的传递。所述报表对象包括报表格式对象、报表数据对象、报表生成参数对象,它是BCL语言与工程报表输出数据的粘合剂,其中报表格式对象实现报表格式数据的传递、报表数据对象报表真实数据的传递、报表生成参数对象实现报表生成参数的传递。通过工程造价计算描述语言BCL,实现生成报表数据及格式填充到报表对象中,实现报表数据及格式的生成。
[0032] 2.一种基于工程造价计算描述语言BCL的报表生成装置,该装置是基于上述扩展的工程造价计算描述语言BCL及工程造价报表生成描述语言而实现的,包括:报表BCL脚本编制装置、报表BCL脚本编译装置、报表BCL脚本解析装置、报表格式生成装置、报表BCL脚本执行装置及报表数据保存装置。
[0033] 所述的报表BCL脚本编制装置是一套可视化的报表生成脚本编制装置,使用者通过该装置能可视化编辑报表数据及格式生成规则,并生成符合工程造价计算描述语言语法的报表BCL脚本。
[0034] 所述的报表BCL脚本编译装置用于解析每张报表BCL脚本中BCL元素及报表元素进行编译处理,形成多个EL表达式集合,每个EL表达式集合都是一个BCL元素构建成的语法树,其中的BCL元素是最小待执行单元,内部包含描述计算算法规则、报表函数运算的EL表达式集合。
[0035] 所述的报表BCL脚本解析装置包含了报表BCL脚本文件生成器和报表BCL脚本解析器,用于实现报表BCL脚本编译装置中报表BCL元素对象与已编译报表BCL脚本文件之间的相互转换。能有效记录或者还原报表BCL元素对象,避免报表BCL脚本重复编译,加快报表生成的效率。
[0036] 所述的报表格式生成装置,用于实现报表对象中的报表格式对象与报表格式文件之间的相互转换及报表格式信息的编辑。报表格式对象包括报表页面信息、报表表头名称、报表表头格式等,通过所述装置实现记录、获取及编辑对应报表格式信息。
[0037] 所述的报表BCL脚本执行装置,用于解释执行所述报表BCL脚本编译装置生成报表BCL对象,执行编译出EL表达式集合并调用报表函数实现报表数据及格式保存到报表BCL对象中。所述报表BCL对象为EL表达式集合,内部过程涉及报表BCL对象解释执行模、语法分析模块、结点计算模块、工程数据反应器模块、报表格式参数反应器模块、数据源模块、运行上下文模块、报表函数运算模块。其中报表BCL对象解释执行模块用于控制BCL对象解释执行过程,通过语法分析模块报表BCL对象解释成待计算BCL元素结点,利用结点计算模块对BCL对象内部包含的BCL语法树中的每个节点进行计算。其中数据源模块用于对工程数据反应器模块、报表格式参数反应器模块提供数据进行处理,包括数据源筛选、遍历、分组等,并通过运行上下文模块形成结点计算模块可供使用的数据源。报表函数运算模块包括报表添加列、添加行,填充行单元格数据、修改行单元格数据、删除列、删除行、添加合并标记、报表换页操作等报表函数,依据不同函数运算逻辑,用于实现将节点计算结果数据及格式保存到报表对象中。
[0038] 所述的报表数据保存装置,用于实现将报表对象保存到报表文件中。
[0039] 3.一种基于工程造价计算描述语言BCL的报表生成方法,其步骤如下:
[0040] 第一步:编制报表BCL脚本和格式文件;
[0041] 利用所述的报表脚本编制装置,根据每张报表输出需求定制输出规则,每张报表最终生成一份报表BCL脚本。所述的报表脚本编制装置提供可视化编辑界面,通过可视化编辑界面可实现灵活配置报表生成规则。所述的报表BCL脚本为EL表达式集合,符合工程造价计算描述语言语法规则,其语法格式为:
[0042]
[0043]
[0044] 第二步:创建报表对象,加载报表配置文件;
[0045] 所述报表对象包括报表格式对象、报表数据对象、报表生成参数对象,它是BCL语言与工程报表输出数据的粘合剂,其中报表格式对象实现报表格式数据的传递、报表数据对象实现报表真实数据的传递、报表生成参数对象实现报表生成参数传递。
[0046] 所述报表配置文件,包括报表页面信息、报表表头配置信息、报表生成参数信息等。
[0047] 第三步:加载报表BCL脚本;
[0048] 所述报表BCL脚本,是指使用工程造价计算描述语言BCL描述的有一定语法规则的脚本,内部定义了该张报表的数据生成规则。
[0049] 第四步:对BCL脚本进行词法分析,生成EL表达式;
[0050] 所述EL表达式是对报表生成算法规则的一个完整描述,以${和}作为开始和结束标记;所述EL表达式包含种类多元化的操作数,支持数值、字符串和变量等类型,其中,变量类型操作数是所述EL表达式支持动态数据挂接的典型体现,其值可以为外部对象的引用,也可以为执行阶段设定的具体数据值。
[0051] 在沿袭传统代数表达式运算特点的同时,EL表达式包含多种表达式选择的条件选择运算和完成具体计算规则的函数运算在内的其它高级运算功能。
[0052] 所述条件表达式以#{和}作为起始和结束标记,其内部包含多个条件分支和之多一个缺省条件分支,每个分支对应一个EL表达式,整个条件选择表达式的取值为当前被激活条件分支对应的EL表达式计算结果,如:
[0053] #{
[0054] ->条件1:EL表达式1;
[0055] ->条件2:EL表达式2;
[0056] ->:EL表达式3;
[0057] }
[0058] 所述函数运算定义了具体的计算规则,以满足工程造价特定计算需求,其语法结构与C语言兼容,并支持BCL的扩展数据类型,除此之外,所述函数的调用还支持把EL表达式作为参数进行输入,能够实现指定工程数据范围与EL表达式的动态绑定,进而减少表达式代码冗余,语法格式为:
[0059] sum(数据源标记,数据源别名,?EL表达式);
[0060] 第五步:使用语法分析器,将所有EL表达式,生成对应的BCL语法树结点,进而形成整个BCL语法树。该过程中若存在语法错误,则转向执行第十一步;
[0061] BCL语法树结点包含结点值属性、结点类型属性、当前结点引用的对象地址值以及左右结点的关联属性。当单词类型为变量型操作数时,语法分析器将该单词传递给当前报表上下文模块,进行变量匹配。若匹配不成功,则生成未知变量结点;若匹配成功,则创建引用变量结点,引用变量结点代表着报表数据源的真实数据,通过引用变量结点来获取报表数据源的实际数据进行计算。
[0062] 根据结点类型匹配,分析匹配结果,若为BCL元素,则先将该BCL元素进行编译处理,生成对应BCL对象,作为当前引用变量结点的外部引用对象。若为BCL对象,则直接将当前引用变量结点指向该BCL对象。
[0063] 第六步:创建相应BCL对象,并关联经语法分析后得到的BCL语法树;
[0064] 第七步:通过对生成的BCL对象进行分析,获取待计算BCL语法树对象;
[0065] 第八步:解释执行当前BCL语法树,按照后序遍历的方式处理语法树中的结点,并且将第二步中创建的报表对象作为上下文提供给BCL执行,直到所有BCL语法树执行完毕;
[0066] 该过程中涉及到的处理包括:
[0067] (1)若当前结点为报表函数结点,则根据操作类型和提供的参数信息,对报表对象进行操作。上述报表函数结点语法规则如下:
[0068] addrow(?EL表达式);
[0069] 添加报表行数据,参数中的EL表达式可以嵌套调用addfield字段,实现填充当前行对应的单元格数据。
[0070] addfield(列名称,?EL表达式);
[0071] 添加报表行列字段数据,参数1为当前报表行列字段名,参数2为当前报表行列字段值,支持EL表达式实现复杂数据计算。
[0072] deleterow();删除报表行数据;
[0073] getrowcount();获取报表行数;
[0074] beginunioncell(起始列名称,结束列名称,合并类型);
[0075] 定义报表的开始合并单元格;
[0076] endunioncell(起始列名称,结束列名称合并类型);
[0077] 定义报表的结束合并单元格。
[0078] (2)若当前结点为传统代数运算符结点,则分别计算并获取结点值,作为左右操作数,进行代数运算,并将运算结果值作为当前结点的值;
[0079] (3)若为BCL变量元素,则先将过滤表达式对应的BCL语法树执行第八步,对原始BCL数据源进行过滤,再将值表达式对应的BCL语法树对象执行第八步,得到当前变量对象的结果值;
[0080] (4)若当前结点为引用变量结点,则将该结点对应的外部引用对象的值作为当前结点的结果值;
[0081] (5)若当前结点为通用函数结点,则利用函数注册器,匹配并执行相应函数;
[0082] (6)若当前结点为未知变量结点,则匹配并设置为当前运行上下文中数据源的属性值;
[0083] 第九步:判断是否存在错误信息,若存在,则转向执行第十步;反之,执行第十一步;
[0084] 第十步:将报表数据持久化为文件,进而完成执行任务,流程结束;
[0085] 第十一步:生成相应的错误信息报告,流程结束。
[0086] 本发明的有益效果:
[0087] 1、本发明所述报表生成装置及方法可实现将报表生成计算逻辑及生成规则形成报表BCL脚本文件,达到报表数据计算及生成规则与报表生成装置分离的目的,实现报表生成过程的可配置化。通过报表BCL脚本编制装置可灵活配置报表生成规则以获取预期报表,而不需要重新发布报表生成装置,能有效提升报表灵活性,满足报表定制化需求。
[0088] 2、本发明所述的报表生成装置及方法是针对工程造价报表的特点,基于工程造价计算描述语言扩展设计一套适合报表生成工程造价报表描述语言,形成一套生成报表装置。通过设计具有高级运算功能的EL表达式、具有一定结构和规则的多元化计算单元和报表生成操作逻辑单元,能够满足工程造价报表数据计算及生成多样性的需求,具有良好的扩展性。
[0089] 3、所述报表BCL脚本执行装置采用解释执行方式,报表BCL脚本编辑装置预编译报表BCL脚本形成报表BCL对象,并通过BCL脚本解析装置实现报表BCL对象与BCL脚本文件之间的转换,所述报表BCL脚本执行装置生成报表时直接解释执行报表BCL对象,无需重复编译,实现一次编译多次解释执行,从而有效提高报表生成效率。附图说明
[0090] 图1是本发明实施例中报表BCL数据生成的编译执行机制图;
[0091] 图2是本发明实施例给出的一种报表生成流程示意图;
[0092] 图3是本发明实施例给出的一种数据源示意图;
[0093] 图4是本发明实施例给出的一种报表数据填充示意图。

具体实施方式

[0094] 下面将结合本发明实施例。对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0095] 本发明实施例以电工程造价报表生成为例,提供一种报表生成装置和方法实现机制,如图1所示,该实现机制的具体实施过程包括了以下三个步骤,参照图2可知:
[0096] 步骤A1:编制报表数据生成规则及样式,生成报表BCL脚本文件和格式文件[0097] 利用所述报表BCL脚本编辑装置编制报表生成BCL脚本和格式,报表生成BCL脚本和格式一旦编制完成,可重复利用。
[0098] 步骤A2:初始化报表对象、报表输出函数、通用函数、报表数据源;
[0099] 所述报表对象,为包含报表数据、格式、参数的逻辑单元,其中包括了报表页面信息、表头格式和报表数据。采用报表格式生成装置加载报表格式文件,生成报表对象。
[0100] 所述报表输出函数可实现数据填充到报表对象。
[0101] 所述通用函数用于计算及处理BCL生成报表数据。
[0102] 所述报表数据源模块用于描述一个工程的数据及其数据范围,它是BCL语言与工程数据的粘合剂,实现解析工程数据转换为报表生成所需的数据源。通过报表BCL脚本有效组织数据源及生成规则可生成各种类型的报表。实施例中的数据源如图3所示,可实现构建工程报表所需完整数据源,可保证生成工程造价所需所有报表,具有良好的灵活性及扩展性。
[0103] 步骤A3:编译报表BCL脚本;
[0104] 报表BCL脚本中定义了报表生成的数据内容和展现形式,通过解析和编译BCL脚本,获得到可执行的BCL语法树,生成具有层次结构的BCL对象存入BCL文档中。
[0105] 步骤A4:解释执行BCL脚本,执行过程中计算报表数据,并调用报表函数将生成数据填充到报表对象
[0106] 加载步骤A3生成的BCL脚本文档,形成待计算的BCL对象并解释执行。执行过程中涉及到基础数据从步骤A2报表数据源中获取,并通过报表输出函数填充到步骤A2创建的报表对象中。
[0107] BCL脚本解释执行逻辑流程如图4所示:
[0108] a.步骤B1、B2实现在BCL执行过程中调用报表输出函数添加报表行、字段;
[0109] b.步骤B3通过解释执行EL表达式,从报表数据源获取所需数据,并按EL表达式语法规则实现单元格数据的计算。
[0110] c.步骤B4将计算结果数据填充到报表对象单元格中
[0111] 循环执行以上步骤,最终实现报表数据的输出并得到填充好数据的报表对象。
[0112] 步骤A5:报表对象持久化到文件中,获得到结果数据,完成报表生成;
[0113] 将步骤A5中得到的已填充数据的报表对象持久化到文件中,作为最终的结果输出,报表文件可作为系统的接口,也可以提供给报表控件展现。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈