博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
实现主从关系Form中汇总行金额/数量
阅读量:6716 次
发布时间:2019-06-25

本文共 2445 字,大约阅读时间需要 8 分钟。

在Oracle EBS的二次开发中,常有在主从关系的主块中需要显示明细块中金额或数量的汇总,在Oracle Form Builder中实际上提供了汇总的功能,但它的这个汇总功能的前提是汇总的明细块需要一次性查询出所有的数据,这对于基于B/S架构的EBS应用来说显然是不合适的,因此Oracle专门包装了一个汇总计算的方法 app_calculate.running_total 来解决这个问题。

下面以实际的例子来描述如何实现汇总计算,效果图如下:

 

 

 

背景说明:

  1. 头块中的Total字段(HEADERS.AMOUNT_TOTAL)汇总行上面Amount(LINES.AMOUNT)
  2. 行中的Amount是Unit Price(lines.unit_price)和Quantity(lines.quantity)的乘积
  3. 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进行汇总计算

[Copy to clipboard] View Code PLSQL
1 2 3 4
running_total (event )   app_calculate.running_total(event,'LINES.AMOUNT','HEADERS.AMOUNT_TOTAL');  running_total;

5,在引发Amount变化的两个Item的WHEN-VALIDATE-ITEM触发器中调用app_calculate.running_total运算汇总值,Item的Handler代码如下:

[Copy to clipboard] View Code PLSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
unit_price (event )  event = 'WHEN-VALIDATE-ITEM'     lines.amount('INIT');     lines.running_total('WHEN-VALIDATE-ITEM');  ;	  unit_price;    quantity (event )  event = 'WHEN-VALIDATE-ITEM'     lines.amount('INIT');     lines.running_total('WHEN-VALIDATE-ITEM');  ;  quantity;

6,创建Amount的Handler代码

[Copy to clipboard] View Code PLSQL
1 2 3 4 5 6
amount (event )  event = 'INIT'     copy(name_in('lines.unit_price') * name_in('lines.quantity'),'lines.amount');  ;	  amount;

7,在汇总显示项目所在块中的POST-QUERY触发器中从数据库中计算出明细的初始汇总值

[Copy to clipboard] View Code PLSQL
1 2 3 4 5 6 7
post_query  ((unit_price*quantity),0)  :headers.amount_total  xhu_order_lines  header_id = :headers.header_id ;  post_query;

8,在明细块的以下触发器中添加相应的代码

[Copy to clipboard] View Code PLSQL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
--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' );

 

转:

 

我自己的做法:

行块增加一个total项,项的计算模式设置为“概要”,汇总函数选择“和”

假如是统计行数-计数

行块属性:预计算汇总设置为“是”。

头块的total项copy行块total值。

行块block属性查询所有记录:是

转载于:https://www.cnblogs.com/liuweicong39/archive/2012/06/01/2530675.html

你可能感兴趣的文章
【spring boot2】第4篇:spring boot对静态资源的管理
查看>>
python3 使用argparse更好的组织输入参数
查看>>
Flutter 环境搭建以及创建第一个APP遇到的坑
查看>>
mybatis连表查询
查看>>
【跃迁之路】【694天】程序员高效学习方法论探索系列(实验阶段451-2019.1.14)...
查看>>
[中级] Func() 和 ObjBindMethod() 的关系
查看>>
垃圾回收机制
查看>>
C语言实现一个简易的Hash table(6)
查看>>
【javascript】实现模板生成大量数据
查看>>
win32拖拽编程
查看>>
使用 LineBasedFrameDecoder 和 StringDecoder 解决半包粘包问题
查看>>
分布式缓存Redis使用心得
查看>>
【修真院“善良”系列之三】技术面试的时候该怎么样介绍自己?
查看>>
聊聊flink的EventTime
查看>>
TypeScript 类
查看>>
React 的几种条件渲染以及选择
查看>>
MongoDB查看执行计划
查看>>
Redis学习笔记二:使用Jedis简单操作reids数据库
查看>>
Netty NioEventLoop 启动过程源码分析
查看>>
机器学习在客户管理场景中的应用
查看>>