初探报表引擎初探报表引擎GRP4GRP4广联达软件股份有限公司周金根2010年8月目录•第一部分:报表包含数据、样式和页面•第二部分:GRP4的扩展、表达式、页面设置•第三部分:使用ReportFram进行报表集成•第四部分:课后练习第一部分:报表包含数据、样式和页面报表截图按照一定的格式展现指定的数据,并可设定页面打印出来•GRP使用的数据底层是GSP数据源•GSPReportDataSource.pas•TGRPGSPDataSource.Create(iGSPView)报表是数据GSP数据源数据加载方式:静态和动态报表列表查询条件区域报表是样式IGRPMetaData页眉区分页表达式报表是页面相关的页面设置第二部分:GRP4的扩展、表达式、页面设置•集合类型单元格默认为扩展单元格•扩展单元格默认为纵向扩展•扩展规则•下方单元格进行复制,复制时,复制出来的新单元格的所有属性都引用被复制单元格的属性•上方单元格的宽度进行延展,延展成复制后的所有单元格的宽度总和•下方的单元格如果从属于高于当前单元格级别的单元格,则该下方单元格也应该延展,而非复制扩展规则-纵向扩展•横向扩展需要通过属性面板设定•扩展规则•右边单元格进行复制,复制时,复制出来的新单元格的所有属性都引用被复制单元格的属性•左边单元格的高度进行延展,延展成复制后的所有单元格的高度总和•纵向扩展时,右边的单元格如果从属于高于当前单元格级别的单元格,则该右边单元格也应该延展,而非复制扩展规则-横向扩展支持表达式系统宏更多内容参考公共资源报表4目录下:\Help\报表4常用函数介绍.doc练习:九九乘法口诀表•掌握横向扩展和纵向扩展•掌握表达式的写法使用表和字段•集合:表.字段[过滤条件|字段排序]•记录:表.字段•数据值:一般存放实际字段内容,=@当前值•显示值:作为格式化显示用数据值、显示值系统宏名称表达式说明当前值@当前值当前单元格的值,一般用于表达式求值,例如控制显示值,示例:当单元格的值是HT(合同)的ID值,需要设置显示值为Name时,设置显示值表达式:HT.Name[HTID=@当前值][1]显示值@显示值当前单元格的显示值,一般用于表达式求值行号@行号当前单元格所在行的行号列号@列号当前单元格所在列的列号行可见@行可见当前单元格所在行是否可见,一般用于表达式求值,例如求C9单元格的所有可见行的汇总值:SUM(C9[@行可见])列可见@列可见当前单元格所在列是否可见,一般用于表达式求值,用法与行可见类似设计行@设计行当前单元格在设计期时所属的行。一般用于求纵向扩展的格子的所属设计行。报表分为设计期和预览期,预览时的报表对设计时的报表进行了扩展,例如B2上扩展所有HT(合同)的HTID(合同编号),设置为HT.HTID[],纵向扩展,如果共有5个合同,那么预览时B2,B3…B6将显示这5个合同的HTID,但是B2~B6的设计期单元格都是B2,所以设计行是2设计列@设计列当前单元格在设计期所属的列。一般用于求横向扩展的格子的所属设计列。上面的例子中,如果B2是横向扩展,则B2,C2…F2将显示这5个合同,但是它们的设计列都是2(也就是B)自动行级别@自动行级别当前单元格所属行的层次,常用于树形数据。在树形数据中,根节点的行级别是0,根节点的子节点的行级别是1,以此类推。对于非树形结构,所有的行级别都是0主格行级别@主格行级别当前单元格的直接主格所属行的层次,常用于树形数据。在树形数据中,如果当前单元格的行级别是3,那么它的直接主格的行级别是2序号@序号当前单元格在其所有兄弟节点中的顺序。对于非树形数据,其序号随着行号是一直递增的。但是在树形结构中,序号是在具有相同父节点的所有节点中排列的,如下图所示:列表序号@列表序号@行号-固定行,其实现是行号减去报表的固定行,一般固定行就是表头的行数,所以列表序号一般是数据区的行号是最后单元格@是最后单元格必须用在扩展格上,用于判断当前扩展是否到达最后一格。例如A2的扩展是1to9,纵向扩展,那么A2~A9的@是最后单元格的值为False,而最后一格A10的@是最后单元格值是True。树形汇总@树形汇总_C4,IsRecursive树形汇总必须加上参数,例如@树形汇总_C4,其中C4是单元格,必需参数,IsRecursive是可选参数,有效值是True/False,True表示...