EBS中报表使用总结.doc_第1页
EBS中报表使用总结.doc_第2页
EBS中报表使用总结.doc_第3页
EBS中报表使用总结.doc_第4页
EBS中报表使用总结.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle EBS中报表使用总结作者:曾燕创建日期:2008年12月21日最近修改日期: 文档编号: 版本: 1.0 审批人:审批人1审批人2拷贝数_文档控制更改记录日期作者版本说明2008-12-21Rosa Zeng1.0Creation浏览者姓名职位分发拷贝数姓名职位(9-Dec-96)目录综述4系统标准报表4Oracle FSG报表5定义行集5定义列集7定义报表11二次开发报表12报表数据源12报表模板19小结31结束语32Page iii of 32(9-Dec-96) 32大家hand仅限于内部使用 (v. 1.0 )综述EBS中运用到的报表,通常有三类:一是系统标准的报表,二是FSG生成报表,即根据客户需求在系统中定义的报表,三是二次开发的报表。下面就结合我在项目中遇到的情况,谈谈这三种报表。系统标准报表顾名思义,不需要我们干涉的,使用的时候直接提交请求就可以,如下面这个总账模块的科目表 明细列表。运行效果:Oracle FSG报表在系统标准报表的基础上,我们可以根据客户化需求,利用报表生成器生成报表,在项目中使用了总帐模块的FSG,此类报表有三个步骤,即定义行集,列集,最后定义报表,关联之前定义的行集和列集。现在以松下GPSC项目一个客户化的多步式损益表为例进行说明。定义行集(N)总账超级用户报表定义行集,如下图,选择定义行勾上显示行与显示零,那么当这行的数值为零的时候也会显示。对该行需要显示数据的操作主要有两种:账户分配与计算。点击账户分配。账户分配是把指定账户(通常由客户指定)的金额以明细或汇总的方式显示出来,取决于显示的选项,E为展开,则明细显示账户金额,T为合计,则只显示账户汇总的金额,B为E,T二者兼有。另外,标志一栏,正号表示包含,负号表示排除。在此,销售收入是收入类账户,属于贷方,其在账户中记录的金额为负数,所以活动一栏需选择贷项,这样得到的才是正数。反之,借方账户就选择借项或者净。如下图:除了账户分配之外,更简洁的行定义就是计算,如毛利(Gross Profit)为销售收入减去销售成本,即之前定义的10-20。以此类推,定义完损益表要求的行,包括运费,管理费用各项,其他费用,非主营收入,税前利润,税以及税后利润等等。定义列集(N)总账超级用户 报表 定义 列集,如下图,选择定义列根据实际需要定义显示的位置,之后在建立列集的时候可以调整。根据实际需要选择金额类型,比如PTD-实际为期初至今实际余额,YTD-年初至今差异百分比等。另外,和定义行集一样,可以对列进行账户分配和计算。但是,注意行与列账户的匹配。如果要突出显示报表中需要立即引起注意的信息,我们可以定义“列例外”。例如,我们可以定义一个例外,“标记”报表中实际支出超过预算RMB 1,000 或更多的行。在请求报表时,我们也可以选择只显示“例外”行(勾选“例外”复选框即可):定义“例外”条件;符合例外条件的行将会在行的开头以我们输入的“标志”显示出来。输出报表如下图所示:在列定义中,我们同样可以进列计算(如果勾上改写行计算,那么如果列与行用到相同的数据进行计算时,以列计算为准),系统提供了一些标准的运算,下图为实际的该行金额与销售收入进行百分比运算。还可以进行其他一些简单计算,在列表中可以选择。最后,我们回到列集定义form界面,点击建立列集。根据界面中的标尺调整显示的位置,显示的名称,格式等。疑惑:当在列定义中分配特定账户的时候,如销售收入,照理说应该和定义常数一样,应该每一行都显示相同的数据,为什么显示出来的跟费用有关的行对应的账户金额为0呢?定义此行: 报表结果,收入类账户正常,其中为零的行为费用类账户。经功能顾问讨论,认为这是由于行与列的账户没有交集造成的,在后来的使用中发现,其实在列计算中使用百分比运算可以达到相同的效果,只是不知道分配账户是否也能实现,还需进一步验证。定义报表(N)总账超级用户报表定义报表,如下图把刚才定义的行集GPSC FM PL Detailed Report_ROW和列集GPSC FM PL Detailed Report_COL关联起来。最后点击运行报表,如下图。二次开发报表由于系统报表生成器功能的局限,因而项目中很多客户化的报表需要借助二次开发的手段完成。报表结构分为两部分,即数据源和模板。报表数据源一、不需要生成XML的数据源。通常适用于html格式报表,直接在PL/SQL Procedure中写SQL就OK了。二、输出XML格式的数据源。我所做过的报表中,基本用两类方法输出XML数据,一是通过Report Builder,二是在PL/SQL Procedure中调用标准包生成XML数据。1. Report Builder在项目中学习到的其中一点,就是在数据模型中,写多个查询。如上图所示,这是一个AR发票报表,三个查询分别对应发票头,行,付款条件折扣行,因为发票头与行,付款条件折扣行均为一对多的关系,为了防止发票行以及付款条件折扣行造成发票头的冗余,因此创建三个查询,通过一定的条件关联起来。点击工具栏中的数据链接,从Q_HEADERS块中的header_id指向Q_LINES将自动创建关系,如上图,同理创建Q_HEADERS与Q_TERMS之间的数据链接(payment_term_id与term_id)。如果数据库编码与XML输出编码方式不一致,为了避免输出中文报错,需要在在报表属性面板中指定XML Prolog的encoding(指定为数据库的字符集)。使用公式:当一些计算在SQL中很难实现的时候,可以借助公式列,如在付款折扣中计算预付款折后金额。点击工具栏中的公式列,点击G_TERMS分组的空白位置。 光标移到CF_1上,按下F11,进入公式编辑的程序单元和form一样,程序中对项的引用直接使用“: + 项名”,把计算的结果返回。打开并修改公式列的属性面板:数据模型处理完成之后,可以在本地生成XML文件进行测试,连接数据库,在报表触发器的BEFORE REPORT和AFTER REPORT中初始化环境。注意:上传至EBS生成XML和在本地生成XML初始化方法不一样。上传EBS服务器:本地初始化,和PL/SQL Developer一样:点击文件 生成到文件 XML,输入设置的用户参数就可以了。2. PL/SQL Procedure在PL/SQL Procedure中,通过调用标准包输出XML,下面以佳通美国分公司项目中一个PO订单明细报表为例。首先从数据库获得数据,把SQL写在字符串中,使用常量需要用两个单引号,如:在Procedure中不能像Report Builder一样自动分组,为了避免订单行字段对头字段造成冗余,需把订单行字段SQL写在CURSOR中,把这个CURSOR作为整个查询的一个字段,可以把它当作一个复合的子查询,如下图。调用package生成XML文件:下图为生成XML文件的Procedure:dbms_xmlquery.newcontext(p_stmt)的作用是对参数(字符串中的SQL)进行查询,dbms_xmlquery.setrowsettag(ctx, p_rs_tag)为设置分组的外部XML标记,dbms_xmlquery.setrowtag(ctx, p_r_tag)为设置分组的XML标记。执行输出XML的操作:若需要对字符串中的SQL语句进行检测,可以在输出XML之前执行下面的语句(注释掉输出XML的语句):在该Procedure上点击右键进入test窗口,执行完毕后在DBMS Output中可以看到正常的SQL语句:PS:svf报表中输出XML比较特殊一点,将在下一节介绍svf的时候详解。报表模板在项目中总共接触过三中模板:html、rtf以及svf。一、 html模板首先在package声明中定义一系列的html代码,主要是样式的定义,如下图:然后把查询出来的数据循环替换到报表主体中的表格B_1X_2再输出就可以了,注意需要显示的字段个数与报表主体中表格定义的列数相等,如下图:二、 svf模板开发(松下客户化报表开发使用)svf模板相对而言,也比较简单,但是功能局限,比如不能实现分组循环输出,按条件输出,不能在模板中实现相对复杂的计算等等。首先安装Super Visual Formade工具,新建一个svf模板,选择NOImage上图中蓝色的是常量,红色的为变量。(1)常量(2)变量在松下客户化报表开发中,可以生成PDF和CSV格式的文件,通过提交请求传入的参数p_csv_pdf决定(1为PDF,2为CSV)。svf报表大部分的功能是在PL/SQL代码中实现的,这里谈一下其关键点。首先是创建文件,根据p_csv_pdf编辑XML开始标签。在程序中,调用的是事先由日本程序员根据自己的需求创建好的pakage(zz打头):在zz_file_io_pkg中的函数file_open其实调用了标准的utl_file.fopen,获得一个文件的访问权限并打开这个文件。接下来需要通过SQL获取数据,并把临时的数据(Record中)转化为XML数据。当数据转换完成之后,需要定义一个XML结尾的标签,关闭之前打开的ufile文件,执行下面的语句生成PDF或者CSV文件:PS. 需要把svf模板传至服务器,松下自定义的svf模板生成的.frm文件存放路径:报表试运行:三、 rtf模板(XML Publisher)rtf模板的是利用XML Publisher工具进行开发,XML Publisher是EBS的11.5.10之后主要的报表解决方案。当上传RTF文件到XML Publisher模版管理器时,将被自动转换为XSL-FO,所以在rtf中,也可以直接写XSL-FO。现以佳通项目的AR报表开发为例,谈谈我的一些心得。因为需要对发票行固定行数输出,而下面的部分(发票头信息,公司信息等)是每一页都需要显示的,因而写在页眉页脚中。页眉:页脚:固定行数输出,定义一个该页输出最大行数的xsl变量lpp(假设6行)设置循环分页和变量(分页:;设置循环变量(发票行):)在循环开始的时候设定一个position(实际就是当前行数),每一次循环要递增一次。PS:引用xsl变量“$+变量名”。如果当前行大于起始行以及小于最大行数,那么就输出发票行;如果为最后一页,还未满最大行数,要以空行补齐,否则就分页。count($allLines)指当前页中循环发票行的总数。指从当前行开始,直到该页最大行数为止进行循环。当该页行数达到最大行数的时候,执行以下代码进行判断及分页报表运行之后的分页效果,下图为第一页,第二页以及最后一页:如果需要在每一页显示一些固定的汇总信息等,可以在分页之前定义一个模板,如下图: 定义一个叫page_brake的模板,这两个标签之间为模板的内容。表示调用这个名为page_brake的模板。但是这种模板一些局限,模板里面使用的标签必须是绝对路径,之前试过如果不这样的话就显示不出值。因为是绝对路径,如果循环输出多个报表,就只能显示第一个报表的相应字段,所以这种方法不适用于连续输出多个报表。另外,根据上面一节输出XML数据提到的发票中付款条件的问题,假设我们在报表中需要循环输出折扣行,但是在折扣行循环中需要调用循环外的汇总金额计算折扣金额,如下图在XML中,内层循环不能取循环外的值,必须要通过一个中间变量才能取到值,在循环外定义变量TEST,把TEST1的值赋给循环内变量TEST:,在内层循环中取这个变量TEST的值 四则运算问题:涉及到变量的数据不能直接加减乘除,而且只能两两进行运算。比如说A=B*C,那就要先定义一个变量V1,把B赋给它,再定义一个变量V2,把C赋给它,把getV1*getV2的结果设置为另一个变量V3,最后把V3的值取出来作为A的值。需要使用到subtotal,在循环开始

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论