NC报表开发手册.pdf





《NC报表开发手册.pdf》由会员分享,可在线阅读,更多相关《NC报表开发手册.pdf(139页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、报表模式化开发手册(V1.0,for NC-V3)朱俊彬、赖宏伟、李媛媛NC-UAP目录第一章总体介绍.21.开发概述.21.1技术型报表与业务型报表.21.2一般报表开发存在的问题.21.3模式化报表开发思路.22.应用模型.32.1数据模型与展现模型.32.2数据字典.42.3业务系统集成.5第二章低开发难度报表.61.概述.62.查询类报表.82.1明细报表.82.2汇总报表.172.3列结构依赖于查询条件的报表(动态SQL).233.交叉类报表.303.1列向拼接查询型报表(复合查询).313.2列向分支统计型报表(CASE-WHEN).363.3动态行列交叉型报表(旋转交叉).404
2、.投影类报表.454.1单元格依赖于行列条件的报表(投影交叉).454.2半录入半嵌入型报表(合并查询).515.算法类报表.555.1数据加工预备知识.555.2非投影类占比报表(普通占比).605.3投影类占比报表(投影占比).655.4程序送数型报表.696.高级应用.736.1支持穿透的非投影交叉类报表(普通穿透).736.2支持穿透的投影交叉类报表(投影穿透).796.3支持主从连动的报表.846.4支持统计图表的报表.88第三章高开发难度报表.921.基于行业报表工具开发的报表.921.1标准报表.921.2分块填充报表.1042.基于CELLREPORT工具开发的报表.1112.
3、1CELLREPORT工具介绍.1112.2CELLREPORT报表.113附录.1241模式一览表.1242查询引擎FAQ之参数篇.1251.1.开发概述1.1 技术型报表与业务型报表第一章 总体介绍我们将报表应用划分为两种类型,一类应用的侧重点在于出报表所蕴涵的技术,开发者(程序员或实施人员)通常凭借一定的数据库和编程知识,基于库里的业务数据,做出符合用户需求的报表展现和输出,此类应用称为技术型报表;另一类应用则着眼于整个报表生命周期中各环节的管理(包括出表、上报、审核、汇总、发布等流程),即把做报表的行为当成一项业务,对直接开发者的主要要求在于业务熟悉程度而非技术,此类应用称为业务型报表
4、。前者通常由专业程序员、二次开发人员或技术型实施顾问承担开发工作,早期工具如报表模板、自定义查询等均面向此类应用,IUFO则是后者的代表性产品。本文档作为集团平台技术部对外发布的开发手册,主要针对对象为技术型报表。1.2 一般报表开发存在的问题报表属于ERP项目中的关键应用,通常被用户的高层领导用于企业业绩评估、辅助决策或对外发布。据统计,在很多交付压力较大的项目当中,报表开发占有相当的比重。就目前开发现状而言,影响报表快速交付的主要问题有以下几点:1、报表开发本身的复杂性高。中国式报表由于政策以及长期人工填报的原因具有极强的个性化特点,根据业务逻辑进行数据查询、数据组织、表样展现和界面处理的
5、每个步骤都耗费了很高的开发代价;2、报表开发的复用性低。开发人员投入巨大努力完成第一批报表后,发现第二批报表依然要从头做起,或者另一名开发人员遇到类似于第一批报表的需求,无法借鉴(甚至根本不知道)前人的开发成果;3、报表开发对专业技能要求偏高。很多二次开发人员虽然不是专门搞技术的,但通常具有一定的开发基础,而目前的二次开发平台限制了他们发挥应有的作用。1.3 模式化报表开发思路所谓模式化开发,包含两方面的工作:专职人员将有代表性的应用进行归纳抽象,提取出共性的部分形成代码框架和方案,并以手册的形式对外发布;报表开发人员拿到项目需求后,从手册上找到匹配的模式,通过编写一些低技术含量的子类代码或进
6、行一些机械性的工具操作,就能够快速地完成开发工作。以往大部分的重复性劳动已经在模式的基类或者缺省实现第2页中处理,当开发人员需要体现个性化的时候,则可以通过自己对接口的特殊实现完成。随着模式的逐步丰富,开发人员开发各类模式报表的工作量都会明显降低,同时也实现了代码复用和知识共享,另一方面,由于开发者的工作趋于简单和机械,他们的角色就可以由低专业技能人员所取代。从这个角度上说,模式化是解决上节所述三个问题从而真正实现报表快速开发的有效方案。本手册介绍了两大类NC报表开发模式,一类是基于查询引擎的低开发难度报表,其编码量小,操作简单,适合于开发数据和格式比较规律的报表;另一类是基于行业报表工具的高
7、开发难度报表,主要工作是编写子类代码,自由度高,适合于开发复杂报表。2.2.应用模型2.1 数据模型与展现模型一般来说,报表是由数据和格式组成的整体。报表的数据模型通常包含以下信息:1、数据结构;2、待定参数描述;3、取数规则描述;4、数据加工算法描述;5、多个数据集合之间的数据关联描述;可作为数据载体的常用NC数据结构包括:1、nc.vo.pub.CircularlyAccessibleValueObject循环访问VO,是由属性和取值成对组成的集合,提供了根据属性获得/设置值的方法,是单据和报表模板采用的主要结构;2、nc.vo.pub.ValueObject普通VO,包含多个属性及每个属
8、性的getter和setter方法,是业务组主要数据结构的父类;3、comset.StorageDataSet存储数据集,由元数据和内容数据两部分组成,元数据(Column)描述了各列的信息,内容数据描述了一个二维的数据集合,当游标指向内容数据的某行时,可以获得该行指定列的数据,用于查询引擎;4、nc.vo.pub.rs.MemoryResultSet内存结果集,同样由元数据和内容数据组成,其中元数据(MemoryResultSetMetaData)描述各列信息,内容数据(ArrayList)描述了一个二维数据集合,可以直接访问其任何元素,目前被一些业务算法使用;5、Object,Vector
9、,ArrayList这些都是JDK的常用结构,均可存储二维数据。报表的展现模型通常包含以下信息:1、控件(核心控件是表格)属性和布局;2、控件显示内容与显示规则(绑定数据、参数、行列格式、界面资源等);3、控件连动规则;4、数据处理规则(定位、排序、过滤、统计、公式、交叉、钻取等);5、动态扩展规则;6、输入输出控制(待定参数设置,打印,导出等)第3页2.2 数据字典NC数据字典提供了统一的数据建模平台,支持对各种数据库对象进行管理,维护这些物理对象的逻辑属性,并向外系统提供访问数据库逻辑信息的接口。以查询引擎为例,查询对象的定义是基于数据字典进行的,而这份数据字典来自查询对象所指定的数据源。
10、由于多数报表的列与业务数据库的字段存在某种对应关系,因此数据字典的存在有助于提高查询定义的直观性和易用性。NC数据字典通常在安装产品时候由系统生成,如果想自己为某些数据库对象生成字典,可以采用数据字典管理界面提供的导入方法。导入方式包括三种(详细操作可参见 数据字典导入说明):1、解析PDM文件(xml格式);2、解析NC标准建库脚本;3、提取数据库元数据;如果需要给非 NC数据库(比如用户采用的第三 方数据库)生成数据字典,可以利用PowerDesigner提供的逆向工程功能将库里的物理表生成PDM文件,修改其中表和字段的中文名称,然后以xml文件格式存储,再使用上述第一种方法导入。第4页2
11、.3 业务系统集成对于直接使用查询引擎开发出的报表,可以使用以下两种方式挂接到业务组的功能节点。强烈建议把准备挂接节点的查询对象和格式对象的编码设为与业务系统相关的有意义字符串,以避免不同业务系统预置对象互相覆盖的危险性。报表管理节点挂接法:1、注册功能节点,类名为ymodel.QueryMainUI_N;2、下挂一个参数,参数名为folderId,参数值为客户化下查询引擎管理中相关报表目录的ID(可从数据库表pub_formatmodeldef的id字段查出)。独立报表节点挂接法:1、注册功能节点,类名为:ymodel.QueryNodeUI:2、下挂两个参数:pkQryNode界面模型对应
12、的编码(可从查询引擎管理界面读取),dsName查询定义所在数据源。对于高开发难度模式的报表,则与普通功能节点一样挂接ToftPanel的子类即可。第5页1.1.概述第二章低开发难度报表本手册列举的低开发难度报表模式统一由查询引擎(V3版本)提供解决方案。查询引擎是一个面向高级实施人员和普通开发人员的查询建模产品,延续并完善了自定义查询体系的技术路线,在全面支持复杂查询的设计和个性化的报表展现的同时,大幅度降低了报表开发人员的编码工作量和专业技能要求。我们再来看一下查询引擎的适用性和不适用性。查询引擎长期作为一个查询工具发展,因此尤其适用于与数据库查询分析或数据挖掘关系密切的报表开发,同时也支
13、持程序员调用服务器端代码对数据进行业务处理。另一方面,自定义查询体系与模板体系存在一个很大的不同,模板体系在发布产品之前已经由程序员录入了大量初始化数据,因此不同用户能够分配到不同的查询模板、报表模板和打印模板,而自定义查询体系是完全自定义的实时开发,没有模板的预制数据,因此在一个时刻只支持一种参数控制样式、一种报表界面样式和一种打印样式(或直接打印),但这些样式均可在设计态修改。在展现上,由于查询引擎使用的是 SWING的表格控件,因此对一些 EXCEL风格的需求支持不够,这个薄弱环节将在 V31得到加强。总体来说,V3版本的查询引擎暂不适用于以下两类报表开发:1、有多模板分配需求的报表,或
14、对打印有高度要求的报表;2、存在表体合并单元格的报表。查询引擎的查询模型(数据模型)设计如下:查询模型流程如下所示(设计态/运行态):第6页界面模型(展现模型)设计如下:第7页界面模型流程如下所示:本章共介绍了五大类报表的十五种开发模式。尽管这些模式之间存在相当差异,但是针对以前我们发现的一些用例杂乱导致的培训效果问题,本章的所有范例集中面向两个业务应用(单位费用统计和部门人事统计),即用不同方案解决相似问题,以便于读者从中领会和比较这些模式的原理、特点和适用性。希望这种做法不会给读者造成一个误导:查询引擎只能解决这两类报表的应用。2.2.查询类报表查询类报表指通过一个或多个 SQL查询结果形
15、成的二维数据展现出来的报表,由于SQL的语法特点,此类报表通常具有固定的列结构和动态的行结构,但模式2.3也探讨了一种根据参数动态改变查询列结构的方案。2.1 明细报表【概述】明细报表用于展现最基本维度上的数据,即最细粒度的数据。通常明细总是相对于汇总而言的,如果我们把某商品每个月的总销售额列表视为汇总数据,那么该商品每天的详细销售情况就可视为明细数据;如果我们把某部门当年的总薪资情况做成汇总表,那么该部门每位员工当年的薪资情况就可以做成明细表。查询类报表中的明细表通常是指一些不含聚合函数的 SQL语句直接能够查询出的数据形成的报表。【应用场景】第8页开发人员需要通过多表联查 SQL或者复合查
16、询获得表体数据,同时为报表展现提供待定条件设置、栏位设置、排序、过滤、定位、小计合计及输出等功能。当明细表与汇总表一起出现时,用户通常还会有从汇总数据联查明细数据的需求(又称穿透或钻取),此类应用将在模式6.1中介绍。【适用性和不适用性】适用于:明细数据的取数规则可用SQL描述;不适用于:通过行列条件统计单元取值的明细表。此类报表应遵循模式4.1解决;通过程序算法构造明细数据的报表。此类报表应遵循算法类报表模式解决;【解决方案】取数由向导式SQL设计描述,查询条件由参数控制机制解决,栏目在格式设计态设定,排序、过滤、定位、小计合计、输出等功能均内置于报表浏览态。【开发步骤】第一步:在查询引擎管
17、理中建立查询对象Q1,做向导式SQL设计(通常不含聚合函数sum、avg、count、max、min)。对于一个SQL无法描述的查询,比如指定单位在指定期间内不同科目的发生额,可以利用复合查询(基于查询对象的查询,可参考模式 3.1)进行描述。Q1中待定的信息由参数定义描述,普通参数可以在向导式设计的筛选条件处引用,替换型参数可以在向导式和手工式设计的任意位置引用(参见FAQ文档);第二步:创建格式对象F1,引用查询对象Q1并嵌入表格,做相关的栏位、列格式和列表头设计。表头表尾可放置绑定参数的控件;第三步:浏览F1(或挂功能节点),设置参数,检查数据与格式是否正确;【FAQ】1、如何充分发挥查
18、询模型中参数的功能?答:参见附录提供的查询引擎FAQ之参数篇。2、格式设计中的16种控件各有何种用途?答:表格、图表是核心控件,用于绑定数据集;面板、拆分窗格(分割面板)、多页签作为界面容器;标签、文本框、下拉框(组合框)、参照、文本域、复选框、单选框是表头表尾控件,需要放在容器上面,用于绑定参数;下拉框、列表绑定枚举型参数,参照绑定参照型参数;主子表是已经不推荐使用的连动展现控件;按钮、树暂无实际用处。3、如何控制报表的输出格式?答:打印输出利用格式设计中的打印设置功能控制,EXCEL输出由界面表格的样式控制。【范例】单位费用明细表各单位在指定期间范围内的费用明细情况。报表中要求包括公司、期
19、间、制单日期、科目、分录摘要、发生额等信息,用户可以根据年度和期间范围进行查询。第9页公司期间制单日期科目摘要借发生额 贷发生额1、查询引擎管理主界面创建查询对象,编码为gldetail,名称为费用明细;2、进行参数定义,增加三个字符型参数:年,起始期间,终止期间;3、进行SQL向导设计:从数据字典添加凭证表(gl_voucher)、凭证分录(gl_detail)、科目表(bd_accsubj)和公司目录(bd_corp),指定表间连接关系、查询字段、筛选条件(先定义确定条件)和排序字段;第10页第11页4、在筛选条件页签增加待定条件,在右操作数框中按F12引用参数;5、创建格式对象,编码为g
20、ldetail,名称为“费用明细表”;第12页6、引用查询“费用明细”;7、进行格式设计:添加表格和面板控件,表格停靠于中部,双击控件设置属性,绑定数据集费用明细,面板停靠于北部(作为表头容器),采用流式布局(FlowLayout),在面板上放三个文本框控件,分别绑定费用明细的三个参数;第13页第14页8、(可选)定义一种列格式,用于显示两位小数,在表格属性框的列格式分栏中由两个金额列引用此列格式;第15页9、浏览费用明细表(先设置参数);第16页2.2 汇总报表【概述】汇总数据通常与明细数据相对,是指在明细数据基础上指定若干个有分类意义的字符型列进行分组,并对另外若干个有统计意义的数值型列进
21、行求和(或求平均、最值、计数等)获得的数据。展现汇总数据的报表称为汇总报表。【应用场景】我们再细分为两种应用:1静态汇总设置:查询数据的SQL中指定了分组列和汇总列,此设置在报表浏览状态不再改变。要求提供待定条件设置、栏位设置、排序、过滤、定位、小计合计及输出等功能。2动态汇总设置:事先对数据设定某种缺省的汇总设置,此设置在浏览态可做更改,并重新计算汇总数据。同时具备上述功能需求。【适用性和不适用性】适用于:汇总数据的取数规则可用SQL描述;不适用于:通过行列条件统计单元取值的汇总表。此类报表应遵循模式4.1解决;通过程序算法构造汇总数据的报表。此类报表应遵循算法类报表模式解决;【解决方案】取
22、数由向导式SQL设计描述,查询条件由参数控制机制解决,栏目在格式设计态设定,动态汇总由旋转交叉机制解决,排序、过滤、定位、小计、输出等功能均内置于报表浏览态。【开发步骤】1、静态汇总设置第一步:在查询引擎管理中建立查询对象 Q2,做向导式SQL设计,定义带有聚合函数的SQL语句。单个SQL无法描述的查询利用复合查询描述。在Q2的查询模型中创建参数和引用参数,用来描述待定的信息;第二步:创建格式对象F2,引用查询对象Q2并嵌入表格,做相关的栏位、列格式和列表头设计。表头表尾可放置绑定参数的控件;第三步:浏览F2(或挂功能节点),设置参数,检查数据与格式是否正确;2、动态汇总设置第一步:同上述第一
23、步(但也可以不设置聚合函数,而是在旋转交叉设置中把缺省的分组列放到行列表中,把缺省的汇总列放到值列表中);第二步:同上述第二步,因交叉表的列结构不能在设计态确定,因此只能指定非汇总列的列格式等信息;第17页第三步:同上述第三步,需要改变汇总设置的时候,利用表头右键菜单的交叉功能把新的汇总列移到交叉行列表,确定即可;(关于交叉的详细说明参见下一节)【FAQ】1、行SQL向导设计时如何指定groupby字段?答:无需指定,系统自动把不含聚合函数的查询字段作为groupby字段。2、行SQL手工设计时为何orderby字段无效?答:需要显式指定排序字段的排序方式(升序asc,降序desc)。【范例】
24、单位费用汇总表各单位在指定期间范围内的费用汇总情况。报表中要求包括公司、期间、科目、汇总发生额等信息,用户可以根据年度和期间范围进行查询。公期科借发生额贷发生额司间目1、创建查询对象,编码为glsum,名称为费用汇总;2、进行参数定义,增加三个字符型参数:年,起始期间,终止期间;3、进行SQL向导设计:从数据字典添加凭证表、凭证分录、科目表和公司目录,指定表间连接关系、查询字段、筛选条件和排序字段(除查询字段外均与模式2.1的范例相同);第18页4、在筛选条件页签增加待定条件,在右操作数框中按F12引用参数;5、创建格式对象,编码为glsum,名称为“费用汇总表”。引用查询“费用汇总”;6、进
25、行格式设计:添加表格和面板控件,表格停靠于中部,绑定数据集费用汇总,面板停靠于北部(作为表头容器),采用流式布局,在面板上放三个文本框控件,分别绑定费用汇总的三个参数;第19页7、浏览费用汇总表(先设置参数);第20页8、当前汇总设置是对公司、期间、科目分组统计发生额,如果需要动态改变汇总依据,则可以使用表头右键菜单中的交叉功能。比如我们需要按照公司、期间重新汇总,则把公司和期间移至交叉行列表,发生额移至交叉值列表,确定即可;第21页9、如果我们把科目移至交叉行,期间移至交叉列,发生额移至交叉值,那么就实现了带有数据旋转的动态汇总,即展现各科目在不同期间下汇总出来的发生额。关于旋转交叉的详细应
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NC 报表 开发 手册

限制150内