【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中是交叉报表。