oracle form 头行合计,FORM主从块头行金额汇总

“实现主从关系Form中汇总行金额/数量”,这句话在百度一搜,你就会看到N多篇文章专门讲这个东西,出处基本都是张老大提供的技术文档

想当初俺也意识到这是个不错的东西收藏了一下,这不,现在实际的用上了!

但是按照该文章讲的方法做,出现了几个问题。

1.       头在post_query之后total_amount虽有赋值动作,但是又马上变成0了!

2.       行BLOCK如果设置为不能删除,点击删除按钮会不停地扣减合计金额。

3.       行上单独查询出一行进行更改,保存,之后再次查询,合计金额显示错误。

之后继续搜了下,通过以下文章头2个问题得到了解决:

1.       Post_query设置total_amount之后,还需设置total_amount_rtot_db

2.       Key-delerec加上CUX_PO_LINES_PKG.running_total('UNDELETE');

至于第三个问题,我的作法是这样的:

在行的POST_QUERY之后继续做一遍头的POST_QUERY赋值TOTAL_AMOUNT

这里整理一下暂时看着还没有bug的主从金额汇总方法:

说明:

主块CUX_OM_HEADER.TOTAL_AMOUNT需要汇总从块CUX_OM_LINE.LINE_AMOUNT,LINE_AMOUNT根据CUX_OM_LINE.ORDER_QUANTITY* CUX_OM_LINE.UNIT_SELLING_PRICE计算得到

步骤:

1.       在主块CUX_OM_HEADER创建零时汇总项目,:_RTOT_DB,NUMBER(38)/DISPLAY_ITEM,TOTAL_AMOUNT_RTOT_DB,非数据库项,不显示

2.       在从块创建2个零时统计项目,一个_RTOT_OLD,另一个_RTOT_DB,类型CHAR(61) DISPLAY_ITEM,LINE_AMOUNT_RTOT_DB、LINE_AMOUNT_RTOT_OLD,非数据库项,不显示

3.       计算汇总调用的方法:

--计算汇总金额

PROCEDURE running_total(p_event VARCHAR2) IS

BEGIN

app_calculate.running_total(p_event, 'CUX_OM_LINE.LINE_AMOUNT', 'CUX_OM_HEADER.TOTAL_AMOUNT');

END running_total;

4.       数量或者单价更改,WHEN-VALIDATE-ITEM

CUX_OM_LINE_PKG.event('AMOUNT_INIT');

CUX_OM_LINE_PKG.running_total('WHEN-VALIDATE-ITEM');

包计算行金额

ELSIF p_event = 'AMOUNT_INIT' THEN

:CUX_OM_LINE.LINE_AMOUNT := :CUX_OM_LINE.ORDER_QUANTITY * :CUX_OM_LINE.UNIT_SELLING_PRICE;

5.       主块POST_QUERY

cux_om_header_pkg.event('POST-QUERY');

SELECT nvl(SUM(cola.order_quantity* cola.unit_selling_price),0)

INTO :cux_om_header.total_amount

FROM cux_order_lines_all cola

WHERE cola.cux_order_header_id =:cux_om_header.cux_order_header_id;

:cux_om_header.total_amount_rtot_db :=:cux_om_header.total_amount;

6.       从快触发器

KEY-DELREC

CUX_OM_LINE_PKG.running_total('KEY-DELREC');

delete_record;

CUX_OM_LINE_PKG.running_total('UNDELETE');

KEY-DUPREC

CUX_OM_LINE_PKG.running_total('KEY-DUPREC');

duplicate_record;

KEY-CLRREC

CUX_OM_LINE_PKG.running_total('KEY-CLRREC');

app_folder.event('KEY-CLRREC');

WHEN-CLEAR-BLOCK

CUX_OM_LINE_PKG.running_total('WHEN-CLEAR-BLOCK');

POST-QUERY

app_folder.event('POST-QUERY');

app_globe.event('POSET-QUERY');

CUX_OM_LINE_PKG.event('AMOUNT_INIT');

CUX_OM_LINE_PKG.running_total('POST-QUERY');

if :system.trigger_record =1 then

SELECT nvl(SUM(cola.order_quantity * cola.unit_selling_price),0)

INTO :CUX_OM_HEADER.total_amount

FROM cux_order_lines_all cola

WHERE cola.cux_order_header_id = :CUX_OM_HEADER.cux_order_header_id;

:CUX_OM_HEADER.TOTAL_AMOUNT_RTOT_DB:=:CUX_OM_HEADER.total_amount;

end if;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值