report开发.docx
- 文档编号:3306608
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:38
- 大小:1.68MB
report开发.docx
《report开发.docx》由会员分享,可在线阅读,更多相关《report开发.docx(38页珍藏版)》请在冰豆网上搜索。
report开发
OracleERP二次开发实用技术系列之一
OracleERP二次开发:
Report开发方法
2005年12月1日V1.0
OracleERP二次开发实用技术系列:
之一:
Report开发方法
之二:
Form开发方法
之三:
ConcurrentProgram及Interface转档开发方法
之四:
Alert开发方法
OracleERP二次开发项目管理系列:
之一:
知识管理方法
之二:
范围管理方法
之三:
时间管理方法
之四:
需求管理方法
之五:
质量管理方法
之六:
沟通管理方法
之七:
风险管理方法
之八:
配置管理方法
之九:
外包管理方法
OracleERP二次开发系统流程系列:
之一:
库存
之二:
采购应付
之三:
销售应收
之四:
固定资产
之五:
成本结帐
之六:
现金管理
论文:
OracleERP二次开发方法论
[摘要]Report是OracleERP展示数据最重要的方式,也是二次开发中,工作量最多的一个部分。
对于OracleERP的二次开发来说,Report的开发与一般CS结构的Report开发,是有区别的,市面上有很多关于Report的书籍,但是相信看过任何一本的人都知道,在你实际开发ERPReport的过程中,还是问题不断,而且这些问题通常是书本上无法解决的。
就算是Oracle的标准培训文档,也只能给你一个大概的蓝图。
本篇文章,就是将一些实际开发过程中的步骤、策略、技巧、疑难杂症展现出来。
本文通过步骤、安装、策略、疑难四个方面讲解Report的开发,通过最通俗的语言讲解,其中一些技巧,是公司同事经验积累的成果,只是由我将它记录下来,其中难免有一些错误,或者疑难问题上不够准确的地方,但是只要能给你的开发和学习一些帮助,就是作者最大的欣慰了。
[关键字]Oracle;二次开发;Report。
[目录]
1.ReportBuilder的简介
2.Report的基本开发步骤
3.Report的布局研究,特殊报表的布局开发方法
4.Report的安装上线方法
5.Report的检查、测试策略
6.Report的疑问问题应付方法
第一部份:
ReportBuilder的简介
Report,报表,就是将数据库的数据合理、清晰、汇总的展示出来。
输入一定条件的参数,得到一定的数据的展示的结果,其实就是一个select查询的过程。
查询,就是说,不要对有任何的增加原数据,修改原数据的功能。
Report虽然能够轻易的实现改变原数据,但是这样的需求是不合理的,报表的就是一个展示的功能,不管多复杂的报表,不能改变原数据,不能影响流程。
ReportBuilder,简单的说,就是一个资料模型,就是你的报表数据查询来源,一个布局模型,你要的报表的展示格式。
使用Report之前,你需要的基本能力就是会使用SQL/PLSQL语句,语法是其次,关键是数据之间的逻辑关系,起码能将左外联接,迪卡尔积等几个名词说的清楚,那么,OK,继续往下看。
第二部份:
Report的基本开发步骤
1.先进行ERP环境下的REPORT的格式属性设定.
1.1请采用手工方式,并不使用report使用的精灵来制作报表,将出现在画面中的module原始文件另存为你的目的地址,并使用你的项目报表名称。
1.2建立报表后,选中报表名称段,按F4打开属性,字符模式->用字符单位设计->选择”是”。
1.3在布局模型中,选择主要节段,按F4打开属性,字符模式->报表高度和报表宽度按照设计书填写,节段->宽度和高度,这个设置直接影响布局模型字符模式下的点距。
小技巧:
节段的高度和宽度,与报表高度和报表宽度最好对应成比例,并且,这个比例的倍数最好是整数,由于将来可能出现的报表长宽发生变化,报表高度和报表宽度调整后,节段的高度和宽度就要按比例调整,这样每个格子的形状、大小不变,同时你报表中的内容不会拉长、压扁;
同时建议将表头节段,表尾节段也设置来同主要节段相同。
例如:
表头,表尾,主要节段三个的属性,请将节段高度和报表高度按比列设置(如1:
10),节段宽度和报表宽度,按比例设置(如1:
6),而且三个节段的属性要设置相同.
这样做的好处是将来一旦调整报表大小,只需按比例不变的情况下调整,框架中每格大小不变,表格也就不会混乱.
1.4在布局模型中拉框架前,选择格式->布局选项->标尺设定,画面中点选,单位->字符单位,网格线间隔->1,对齐点数目->1,字符单位大小不要改动。
.
这样设置的目的在于拉动框架时,间距都是1个字符,符合ERP报表的定位方式。
这样,你的前期工作就算完成了。
2.定义你的使用者参数
将详细设计文件中,ERP环境传入的参数和你自己定义的参数,一一设置好,提醒注意数据类型和大小,传入参数和自定义参数要区分开,请按照规范文档来。
注意,自定义参数对报表的开发灵活性作用巨大,要使用有含义的名称。
ParameterName自定义参数命名参考
1“PI_”+XXXXX传入值用的参数,如果parameter的用途是真正作为传入参数用时,名称一律以”PI_”开头;不可使用系统默认值。
2“GLB_”+XXXXX报表中使用的变量参数,如果parameter的用途是作为共享变量时,名称一律以”GLB_”开头;不可使用系统默认值。
3有起迄的参数需要在后面XXXXX+”_F”表示FROM,XXXXX+”_T”表示TO;不可使用系统默认值。
小技巧:
date类型的传入参数,有时根据valueset设置的不同要使用格式遮罩,固定它的时间格式,不然会出现错误。
同时建议在设置大小时要适当放大一些,避免有多国语言文字时出现错误。
3.Report执行过程的说明
从画面上触发器的摆放次序,是从上到下的。
为参数前,参数后,报表前,翻页中,报表后。
其中参数后和报表前为最常使用的两个触发器,一般情况下,使用报表前(beforereport)来编写在报表运行前需要处理的数据,比如给自定义参数赋值,运行一段存储过程,定义一段动态sql,插入临时表格数据等。
当报表前插入临时表格数据,那么afterreport就是执行删除临时表格数据的动作。
4.建立资料模型
一般来说,除了矩阵,布局无非就是固定框架和循环框架的组合,每一个循环框架就对应一个资源模型中的一级。
当然,这么一句话并没有什么实质意义,而要把这个讲清楚,就通过图形和实例来讲解。
下一部份重点讲解该注意一些技巧和特点。
4.1最一般的单循环普通报表
按“sql”按钮,点入画布中,再导入事先写好的sqlscript。
导入sql后,这个报表的资料模型非常之简单。
(注此报表并非模范,请按照规范命名。
)
5,建立布局模型
5.1先拖1个固定框,再在固定框内画1个循环框
5.2,将固定框和循环框拖拉到合适的大小,再内部填充上数据栏位和文字栏位
5.3属性的设定
固定框
上下设为浮动的,左右为固定的,显示为“第一页”“包含模式”。
循环框
上下设为浮动的,左右为固定的,显示为“第一页”“包含物件”,每页最多显示多少,这里为1,当然根据需要而定。
内部栏位
上下设为固定的,左右为固定的,显示为“第一页”“包含模式”
6报表完成
这里的第3,4,5小节只是一点简单的步骤介绍,详细方法和技巧并没有呈现出来。
下面这个部分,将就资料模型和布局模型的关系作详细的探讨。
7参数规范参考
框架Layout中,字段名称命名
“F_”+XXXXXX:
XXXXX为可表达其意义的名字,最好能与抓取值名称对应上;不可使用系统默认值。
查询主体名称命名
“Q_”+XXXXXX:
XXXXX为可表达其意义的名字;不可使用系统默认值。
固定框名称命名
“M_”+XXXXXX:
XXXXX为可表达其意义的名字;不可使用系统默认值。
循环框名称命名
“R_”+XXXXXX:
XXXXX为可表达其意义的名字;不可使用系统默认值。
文字框名称命名
“B_”+XXXXXX:
XXXXX为可表达其意义的名字;不可使用系统默认值。
FormulaColumnName公式直栏命名:
“CF_”+XXXXXX:
XXXXX为可表达其意义的名字;不可使用系统默认值。
PlaceholderName占位符命名:
“CP_”+XXXXXX:
XXXXX为可表达其意义的名字;不可使用系统默认值。
第三部分Report的布局研究,特殊报表的布局开发方法
1.布局框架风格
1.1在布局模型栏位中字符\时间左靠齐,数字右靠齐.
小技巧:
对于字符型数据的栏位,注意中文和日文的宽度,是占用2个字符;对于时间栏位,注意格式遮罩,比如DD-MON-YY,还有小时是12小时制,还是24小时制,有时会遗忘这一点;对于数字栏位,注意保留位数,NN0.00与NN0.NN是不一样的,前者是恒保留2位,后者是超过2位小数保留2位,但是不足2位就不会补0,还有一些是货币格式,注意选择合适的格式遮罩,还有特殊情况,如负数要用括号括起来,-100为(100),这种情况,建议使用公式栏中处理出来后显示,先to_char转换,再判断是否两边连接括号。
1.2繁体报表要求用细明体,10号字.
小技巧:
不要设置任何斜体、下划线、粗体,因为ERP报表就是纯字符报表,有一次我设置了粗体,试验下来的结果就是报表会报错,这样的错误,很难找到原因。
有时你看见明明显示的是细明体10号,但是一运行却不是,建议在作完报表布局后,CTRL+A全选,然后先选择另一个字体,再选回细明体,先选另一个大小字号,再选回10号字。
1.3请将框架和栏位的颜色设为无色,填充也设为无.
小技巧:
在画完报表之后,CTRL+A全选,选择无填充,无颜色,这样报表保证不会出错。
1.4报表标题,设在主要节段内,表头,表尾尽量不要输入内容,同时在“显示报表的表为节段”模式下,将黑框顶满画面.
小技巧:
任何报表形式,都能够在不利用表头模式、表尾模式的情况下实现表头表尾格式的实现。
因为在表头模式、表尾模式下,非常容易出现报表出错,关键是错误很难找出,有时把整个画面全部删除了,才想到是表头表尾出错了。
将下面这个黑框,上下左右全部顶满。
2.资料模式风格
2.1充分利用报表的汇总、公式列功能。
小技巧:
汇总,与此类似的平均值之类的,为我们的报表编写提供了相当大的辅助,但是要注意层级关系,你这个汇总是放在哪一个层级上的。
一般来说,汇总列总是比你要处理的列高层级,而公式列是与处理的列平行的。
公式列的功能,常用在字符处理上,或者数字转字符,或者返回一个yes/no。
2.2连接线的使用
对于图中Q_1,Q_2之间的这条连接线,意味着,将这两个查询通过某一个栏位而统一起来了,从上图中就可以看出,Q_1是主查询,使Q_1与Q_2同一级,就是连接的栏位列之间是对应关系。
但是,假如右边第一级不是1个栏位是很多个栏位,并且其他栏位并不与主查询有连接线,这是,右边的第一层,就比左边低一级了,就不是平等关系了,这时需要一个循环框。
可能有人会被我这个高级、低级给将糊涂了,为了清晰的表达这个层级关系,通过几个实例来阐述资料模型的结构与框架结构的关系。
3.资料模型与布局模型的关系。
3.1资料模型一个层级就对应布局模型一个循环框
上面这句话,是我对report的总结,下面,我就通过画面来说明这个关系是如何对应的。
例一:
红色部分就是第一层,第一层意味着可以不被任何循环框套起来,可以直接使用到报表之中,本例中第一层没有数据。
第二层,意味着需要一层循环框。
第三层,意味着使用这样的栏位,需要有两层循环框。
第四层,意味着使用这样的栏位,需要有三层循环框。
在下面图中,三层循环框就对应资料模型中的三个层级。
布局模型中,不用任何循环框包围的部分,就是资料模型中的第一层。
小技巧:
每个循环框的外面,请加上一个固定框。
不加可以吗,可以!
但是,这就降低了报表的应付变更的可变化性,比如:
有个报表的循环里面要求固定5条数据,在固定的5条数据下面固定一行高一层数据,这行数据不随这个循环框浮动,那么就可以设置外面这个固定框的上下属性为“固定的”,不是浮动的。
例二
有连接线时的层级关系,同时在第一层也有数据,这个算是比较难的报表了。
你可以看到这个报表,我用颜色将层级划分开,还是一个层级划分代表一个循环框。
第一层,不需要循环框,第四层,它的栏位从内往外数,一定会有三个循环框包围它。
下面这种情况的连接线,就是一对一的关系,是放在同一层的。
例三,再来一个更复杂的,表明层级的关系。
上面这个图很夸张,不过可以看出:
第一层,无循环层,没有数据,第二层,就是中心查询,Q_1,其他Q_2,Q_3,Q_4,Q_5,都是并立的,他们各自的前4个栏位,都是与Q_1一对多,因此Q_2,Q_3,Q_4,Q_5的最上层,是与Q_1并列第二层的。
其他的依次增加层数即可。
这就明确了循环框的个数和画法。
下面这个图,与上图实际上是类似的,只是更清晰一些,道理是一样的。
第一层无数据,第二层,G_SHIP_DATE,以及与它连接的G_1,G_2,G_3.
3.2定锚物件的使用
前面的报表,不管它多复杂,无非就是以循环框为核心的报表。
对于固定框的属性,一般调整的,就是上下是变动的,还是固定的,然后使用包含物件,第一页或者所有的页。
这里一定是包含物件,定锚物件不要乱用,否则会出错。
对于循环框更是,一般都是上下设为浮动的,左右为固定的,显示为“第一页”“包含物件”,每页最多显示多少。
栏位更不必说,除了偶尔上下栏位浮动的,一般都是固定的,显示为“第一页”“包含物件”。
小技巧:
当一些栏位需要所有的页显示时,请在外面加上一个固定框,栏位设置为“第一页”“包含物件”,固定框设置为“所有的页”“包含物件”。
定锚物件什么时候用呢?
布局模型中还有一个强制定锚,这个在什么时候用呢?
举一个例子,你是否遇到过一个普通的报表,分表头,表身,表尾三部分,表头要求每页都显示,这个好办,所有的页即可。
表身是循环显示,表尾却要求是在最后一页的最下面显示,注意哦,是最下面,如果你紧跟报表画,就错了。
这里就要用到定锚物件。
我们来看上图中这个案例,这里中间是个循环,要求每页显示6条,那么在外面加一个固定框,来保持报表的形状不变,实际上是保持下面部分的相对位置不变。
这时有个难题,就是固定框右下部,红框框起来的几个栏位。
按需要,必须在最后一页显示。
这时设置“最后一页”就可以了吗?
不行。
要设置为最后一页,定锚物件,这时还需要使用强制定锚,将这个栏位与上面固定框连接起来,这时就有一个小黑点,就OK了。
3.3矩阵的对应关系
现介绍两个要求:
矩阵和群组矩阵要使用报表精灵来实现,利用的是矩阵的框架,手工无法画;
有矩阵又有其他内容的报表,先做矩阵,再手工画其他的;
例一,用个实例讲解矩阵。
由上面的图示,可以看到,我将矩阵分为5个区域,这5个区域会分别与图形中的区域相对应。
在上图中,是由精灵产生的布局格式,从上到下分成5个维度:
1)横竖循环框,不要动这里;
2)横向栏位,对应横层
3)中心栏位,对应中心层
4)竖向栏位,对应竖层
5)无维度,对应第一层。
那么交叉层在哪里?
在横向一个,是横向的统计,竖向一个,是竖向的栏位,这两个栏位是精灵自动产生的,即使用不到,也让这两个数据出来,在画面上删除就可以了,万一以后要增加也方便。
让我们来分析上面这幅布局:
1)最必要的三个框架:
最外层大框,横向循环框,竖向循环框。
最外层大框
横向循环框
竖向循环框
2)横向栏位,对应横层。
在图中F_HENG_ZUO,F_HENG_YOU所在的地方就是横层的所放位置,只按要注意一点,精灵产生的全在左边,但是根据需要,你可以拉宽横层循环框,并且将栏位用左右键移到右边去。
同时这个区域存放,交叉层的横向汇总。
3)中心栏位,对应中心层。
在图中F_AMOUNT所在的地方,就是中心栏位,就是你想要显示的明细数据,由精灵产生时,这里有1个循环框,再包含1个栏位,或多个。
4)竖向栏位,对应竖层。
在图中F_TITLEU所在的地方就是竖层的所放位置,只按要注意一点,精灵产生的全在上边,但是根据需要,你可以拉高竖层循环框,并且将栏位用上下键移到下边去。
同时这个区域存放,交叉层的竖向汇总。
5)无维度,对应第一层。
注意,四个角的四个固定框,这里就是无维度层,你可以设置固定字符和栏位,都可以。
。
小技巧:
交叉层不可以新增公式例,肯定会报错。
在矩阵精灵出来的布局结构中,出来外面的大框,横框,竖框,三个框绝对不能删除之外,其他都可以删除,并且可以任意手工添加栏位。
注意属性哦,不然会出错。
3.4对于群组矩阵,其实只要你理解了矩阵。
就是在矩阵外面加一个循环框,将整个矩阵包括起来,矩阵循环显示,就是群组矩阵。
注意:
不管是矩阵,还是群组矩阵,由精灵产生的时候,麻烦你把“边界”那里产生栏位删除掉,不然你会出错。
边界里面放置的是布局模型中,在黑框外的栏位,在我倡导的report做法里面,不建议使用黑框外的做法,因此,边界也请删除掉。
研究话题:
以上方法,几乎对付所有的矩阵报表,都没有问题。
但是不采用矩阵精灵做矩阵,从我的角度来看,还没有办法完全手工做矩阵。
4.文字档报表
4.1什么是文字档报表
就是直接将报表的内容写进服务器的文件夹下面的以文件形式存在的报表。
4.2如何做
大家知道,做报表本来就比较难做,要直接写进服务器端就更难了。
有时是既要显示的报表,又要写文字档。
这里我主要介绍做文字档报表的主要方法步骤。
4.2.1SQL语句的写法跟一般时候不大一样,要将你所有要显示的栏位,通过“||”,rpad,lpad等连接成一个长的字符串,这样的感觉就好像是一个栏位,特点是非常长,当然,这个连接过程,就是报表排版的过程。
4.2.2然后丰富你的SQL查询,加上跳页规则,排序规则所需要的栏位,当然,这些栏位以后并不显示。
4.2.3开一个合适的临时表,通过一个procedure将你的查询存入你的临时表中。
这样,你的这个临时表就相当于一个报表的数据来源了。
方法一,当然,要在beforereport运行这个procedure,先将这个报表数据啊,运行入这个临时表中。
然后,在资料模型中,布局模型中正常设置,数据来源为临时表。
在展示结束后,afterreport调用文字档处理程序(下面讲)。
方法二,写concurrent来将数据处理入临时表,然后调用单纯只展示数据的报表,然后继续写文字档。
4.2.4文字档如何写?
其实就是将临时表,通过一个cursor,按顺序一行一行的写进文件中。
换行加上换行符chr(10),跳页加上跳页符chr(13)。
举个例子:
定义:
V_HANDLEUTL_FILE.FILE_TYPE;
V_BUFFERVARCHAR2(32767);
V_RETURN_STATUSBOOLEAN:
=TRUE;
先打开文件,下面的函数。
V_HANDLE:
=UTL_FILE.FOPEN(PI_LOCATION--ftp文件目錄
PI_FILE_NAME--文件名字
PI_OPEN_MODE—打开方式,W,新写入,把以前覆盖,A,接着写,
32767);
V_BUFFER:
=CONVERT(PI_BUFFER—你传入的内容是什么?
写入的内容
'ZHT16BIG5','UTF8');--打开的语言设置,这里是繁体中文。
打开之后就是写入的动作了
UTL_FILE.PUT_LINE(V_HANDLE,V_BUFFER);
写入完别忘了关闭文件。
UTL_FILE.FCLOSE(V_HANDLE);
当然,你可以写成函数来调用。
4.2.5有一个问题注意一下,矩阵报表尽量不要去设计来写文字档,由于没有办法在完全在sql中拼接矩阵报表,因此只能采用模拟矩阵的办法。
模拟矩阵是就是假设矩阵横向栏位不会超过100(比如是100),那么在SQL中强行给它排上100个栏位来处理。
这种方法,只是一个近似,不是真实的矩阵,如果横向真超过100,那么这个报表结果就是错误的。
目前还没有更好的办法来解决矩阵文字档的问题。
做需求和设计的要明白这一点,不然报表难产。
4.2.6写文字档是TXT挡,有时需要写成EXCEL档,当然,这是没有办法的直接写EXCEL的,在TXT报表中,格式不变的情况下,在每个列的间隔加上“;”作为区隔。
然后用EXCEL方式打开TXT文档,区隔符号用“;”,就是EXCEL报表啦。
EXCEL默认是“,”不是“;”,需要设置一下EXCEL。
第四部份:
Report的安装上线方法
简单实例一:
步骤如下,复杂报表,步骤雷同。
信封套印報表(FHOMR014)
1.程式安裝:
1.1將FUHSING-標準客製報表解壓縮到c:
\erp\work(簡稱$WRK)
1.2FTPprogramstoServer
$WRK\reports\FHOMR014.rdf到$ONT_TOP/reports/US/目錄下
1.3UseSQL*PlustoCreate/CompileDatabaseObjects
(假設文件VIEW_SCRIPT.SQL存放於C盤)
Loginas:
APPS/APPS@”yourdbconnectstring”
SQL>@C:
\VIEW_SCRIPT.SQL--是否有使用自己写的Table,View等的代码
1.4Packagescript
(假設文件XXOM_API.PKG存放於C盤)
Loginas:
APPS/APPS@”yourdbconnectstring”
SQL>@C:
\XXOM_API.PKG--是否有Procedure、Function等程式代码
1.5Databaseparametersetup
2.ERP設定:
(連線ERP,進入systemadministrator)
2.1 DefineExecutable:
Concurrent->Program->Executable
Program:
FHOMR014.rdf
2.3 Defineprogram:
Concurrent->Program->Define
Program:
FHOMR014.rdf
2.4 DefineRequestGroup:
Security->Responsibility->Request
Program:
FHOMR014.rdf
小技巧:
1.在DefineExecutable的时候,一般的report程式ExecutableMethod请使用oraclereports,在filename那里使用报表文件的名称,注意不要后缀名“.rdf”如果是procedure请使用pl/sqlstoredprocedure,filename请使用“包名.procedure名”
2.valuesets如何设置?
一般来说,常用的valuesets,分为两种,一种是基于table的数据来源,一种不基于table的。
对于基于table的数据来源,如图设置:
图上名字自己定,只要不冲突就行,当然要符合公司规范。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- report 开发