实现主从关系Form中汇总行金额/数量
2010-08-15 01:59
204 查看
在Oracle EBS的二次开发中,常有在主从关系的主块中需要显示明细块中金额或数量的汇总,在Oracle Form Builder中实际上提供了汇总的功能,但它的这个汇总功能的前提是汇总的明细块需要一次性查询出所有的数据,这对于基于B/S架构的EBS应用来说显然是不合适的,因此Oracle专门包装了一个汇总计算的方法app_calculate.running_total 来解决这个问题。
下面以实际的例子来描述如何实现汇总计算,效果图如下:
背景说明:
头块中的Total字段(HEADERS.AMOUNT_TOTAL)汇总行上面Amount(LINES.AMOUNT)
行中的Amount是Unit Price(lines.unit_price)和Quantity(lines.quantity)的乘积
Unit Price和Quantity的任何更改会导致Amount发生改变,最终影响Total值
实现步骤:
1,创建合计显示字段,即HEADERS.AMOUNT_TOTAL,设置其子类属性为:TEXT_ITEM_DISPLAY_ONLY
2,在合计显示的数据块中,创建合计项目的汇总临时项目,命名规则为:<合计项目名称>_RTOT_DB,NUMBER(38)/DISPLAY_ITEM,即AMOUNT_RTOT_DB/NUMBER(38)/DISPLAY_ITEM
3,在明细块中创建两个统计使用的item,一个<被统计项>_RTOT_OLD,另一个<被统计项>_RTOT_DB,类型 CHAR(61) DISPLAY_ITEM,即AMOUNT_RTOT_OLD/CHAR(61)/DISPLAY_ITEM 和 AMOUNT_RTOT_DB/CHAR(61)/DISPLAY_ITEM
4,包装一下app_calculate.running_total方法,让其对明细块中的Amount进行汇总计算
6,创建Amount的Handler代码
7,在汇总显示项目所在块中的POST-QUERY触发器中从数据库中计算出明细的初始汇总值
procedure post_query is
begin
select nvl(sum(unit_price*quantity),0)
into :headers.amount_total
from xhu_order_lines
where header_id = :headers.header_id ;
end post_query;
[/code]
8,在明细块的以下触发器中添加相应的代码
--KEY-DELREC
lines.running_total('KEY-DELREC');
Delete_Record;
--KEY-DUPREC
lines.running_total('KEY-DUPREC');
duplicate_record;
--KEY-CLRREC
lines.running_total('KEY-CLRREC');
app_folder.event('KEY-CLRREC');
--WHEN-CLEAR-BLOCK
lines.running_total('WHEN-CLEAR-BLOCK');
--POST-QUERY
lines.running_total( 'POST-QUERY' );
转载自:http://oracleseeker.com/2009/08/19/calculate_detail_amount_or_quantity_for_master_block/
我自己的做法:
行块增加一个total项,项的计算模式设置为“概要”,汇总函数选择“和”
假如是统计行数-计数
行块属性:预计算汇总设置为“是”。
头块的total项copy行块total值。
行块block属性查询所有记录:是
下面以实际的例子来描述如何实现汇总计算,效果图如下:
背景说明:
头块中的Total字段(HEADERS.AMOUNT_TOTAL)汇总行上面Amount(LINES.AMOUNT)
行中的Amount是Unit Price(lines.unit_price)和Quantity(lines.quantity)的乘积
Unit Price和Quantity的任何更改会导致Amount发生改变,最终影响Total值
实现步骤:
1,创建合计显示字段,即HEADERS.AMOUNT_TOTAL,设置其子类属性为:TEXT_ITEM_DISPLAY_ONLY
2,在合计显示的数据块中,创建合计项目的汇总临时项目,命名规则为:<合计项目名称>_RTOT_DB,NUMBER(38)/DISPLAY_ITEM,即AMOUNT_RTOT_DB/NUMBER(38)/DISPLAY_ITEM
3,在明细块中创建两个统计使用的item,一个<被统计项>_RTOT_OLD,另一个<被统计项>_RTOT_DB,类型 CHAR(61) DISPLAY_ITEM,即AMOUNT_RTOT_OLD/CHAR(61)/DISPLAY_ITEM 和 AMOUNT_RTOT_DB/CHAR(61)/DISPLAY_ITEM
4,包装一下app_calculate.running_total方法,让其对明细块中的Amount进行汇总计算
procedure unit_price (event varchar2) is begin if event = 'WHEN-VALIDATE-ITEM' then lines.amount('INIT'); lines.running_total('WHEN-VALIDATE-ITEM'); end if; end unit_price; procedure quantity (event varchar2) is begin if event = 'WHEN-VALIDATE-ITEM' then lines.amount('INIT'); lines.running_total('WHEN-VALIDATE-ITEM'); end if; end quantity;
6,创建Amount的Handler代码
1 2 3 4 5 6
[code]
7,在汇总显示项目所在块中的POST-QUERY触发器中从数据库中计算出明细的初始汇总值
procedure post_query is
begin
select nvl(sum(unit_price*quantity),0)
into :headers.amount_total
from xhu_order_lines
where header_id = :headers.header_id ;
end post_query;
[/code]
8,在明细块的以下触发器中添加相应的代码
--KEY-DELREC
lines.running_total('KEY-DELREC');
Delete_Record;
--KEY-DUPREC
lines.running_total('KEY-DUPREC');
duplicate_record;
--KEY-CLRREC
lines.running_total('KEY-CLRREC');
app_folder.event('KEY-CLRREC');
--WHEN-CLEAR-BLOCK
lines.running_total('WHEN-CLEAR-BLOCK');
--POST-QUERY
lines.running_total( 'POST-QUERY' );
转载自:http://oracleseeker.com/2009/08/19/calculate_detail_amount_or_quantity_for_master_block/
我自己的做法:
行块增加一个total项,项的计算模式设置为“概要”,汇总函数选择“和”
假如是统计行数-计数
行块属性:预计算汇总设置为“是”。
头块的total项copy行块total值。
行块block属性查询所有记录:是
相关文章推荐
- 实现主从关系Form中汇总行金额/数量
- 实现主从关系Form中汇总行金额/数量
- 实现主从关系Form中汇总行金额/数量
- 10.2 NSOperation/NSOperationQueue:提供了一些在GCD中不容易实现的特性,如:限制最大并发数量,操作之间的依赖关系.
- scala实现YARN中ResourceManager与NodeManager的主从关系模型
- 用GridView实现简单的主从关系
- 用触发器实现主从表关系(主表更改从表更改 )
- GridControl 控件-----List<T>数据源 实现主从表关系绑定
- kbmMW—实现主从关系表的方法
- DataGrid中实现输入数量和金额自动计算出总金额
- JS 实现简单的操作(数量,单价,金额)
- ASP.NET2.0利用Gridview实现主从关系
- ASP.NET2.0利用Gridview实现主从关系
- ASP.NET2.0利用Gridview实现主从关系
- ASP.NET2.0利用Gridview实现主从关系
- DataGrid中实现输入数量和金额自动计算出总金额
- FORM主从块头行金额汇总
- Form实现主从块金额汇总
- ASP.NET2.0利用Gridview实现主从关系
- JQuery实现的主从表关系