技术开发 频道

ORACLE ERP开发基础之Oracle Report基础

  【IT168 技术文档】
ORACLEERP开发基础之前言
                         http://tech.it168.com/a2009/0427/274/000000274048.shtml
ORACLE ERP开发之OracleForms基础(一)Forms设置部分
                          http://tech.it168.com/a2009/0428/274/000000274178.shtml
ORACLEERP开发基础之OracleForms基础(二)FORMS代码部份
                         http://tech.it168.com/a2009/0428/274/000000274236.shtml
  
        前言

  Oracle的东西总是要“标新立异”,report也不列外,非得搞个什么循环框、固定框之类专有概念。外面大多数报表工具,如crystal report、Java Birt、VB ActiveReport等报表工具,其基本概念是一致的。而Oracle Report就不一样了。什么循环框、固定框,不就是几group么?好像换个概念,技术含量就比较高似得?还有Report的撤销重做功能,居然只能有一次。Faint!

  Report页面设置

  数据模型、固定框、循环框

  1.0数据模型与循环框的层次

  1.1布局原则 一般布局方法是先画固定框,然后在其内套入:1.表头固定框,2.表数据源循环框。

  最外层的固定框属性设置:

  注:最外层固定框的“打印对象在”必须设置为“第一页”。

  表头固定框属性设置:

  注:表头的“打印对象在”必须设置为“全部页”。

  表数据源属性设置:

  1.2实现自动分页。

  当记录总数不只一页时,要实现自动分页,必须将最外层的固定框或循环框“打印对象在”设置为“第一页”。

  实现记录汇总行动态伸缩

  查询视图无数据

  如果确认SQL语句确有数据,则有可能是OU的设置的问题。

  在报表的Before Parameter Form触发器加入初始化条件。

  function BeforePForm return boolean is

  begin

  APPS.FND_GLOBAL.apps_initialize(

  user_id =>APPS.FND_GLOBAL.

  user_id, resp_id =>APPS.FND_GLOBAL.resp_id,

  resp_appl_id =>APPS.FND_GLOBAL.resp_appl_id );

  return (TRUE);

  end;

  Report数据域

  Oracle Report引用数据模型的数据源,有二种方式。 1.较常规的做法。直接使用工具栏上的“域”标签,然后设置相应数据源 2.使用“文本”标签,然后用“&”进行引用。 3.在PL/SQL中引用报表域文本的值,只需在PL/SQL直接引用域对应源字段名称即可(无须加组名)。

  Report汇总项

  Report的汇总项比较灵活,在不同的组其汇总规则是可以多变的。这也会隐藏一些不易发现的问题。 比如,下面这个数据源分为三个组。

  这个数据源大量使用了汇总项,但汇总项的默认汇总规则是基于整个数据源的,也是就说汇总项是基于整个REPORT的。如图所示:

  这也是会造成错误的原因,因为我们在使用汇总项,会自以认为REPROT会帮我们处理好这个汇总规则。可事实却相反。这个汇总项的“重设于”属性就是汇总规则。显然处于分组的汇总“重设于”应该基于相应的组。


 

  Report动态条件查询

  如果一条SQL的查询条件是动态的,SQL语句本身是无法做到这个功能。在JAVA中常见的做法进行这字符串拼接来达到这一功能。在Report也差不多,在触发器事件中进行字符串拼接。

  1、 增加一个报表用户参数p_batch_id_char 、p_batch_id_temp

  2、 在报表After Parameter Form触发器,加入字符串拼接条件

  function AfterPForm return boolean is

  begin

  if nvl(:p_batch_id_char,'A')='A' then –通过条件,来进行字符串拼接。

  :p_batch_id_temp := 'and 1=1' ;

  else

  :p_batch_id_temp := 'and to_char(m.fee_batch_id) in ('|| :p_batch_id_char ||')' ;

  end if;

  return (TRUE);

  end;

  3、 在数据模型的SQL语句中加入刚才拼接的字符串。

  Select * from table_name where &p_batch_id_temp

  注:是用“&”,不是PL/SQL中的“||”。

  矩阵报表

  矩阵报表,不要被Oracle的概念给忽悠了。其实就是crystalreport中是交叉报表。

2
相关文章