EBS Form界面行上字段变化后,头上的汇总字段自动更新

需求背景:当行上的金额、数量、单价变化时,头上的汇总数量、金额字段随之实时变化

即:头信息的【调整数量】 = 行信息的【调整数量】汇总

头信息的【调整金额】 = 行信息的【调整金额】汇总

行信息的【调整金额】 = 行信息的【调整数量】*行信息的【调整单价】

处理方式:

步骤1:头数据块ADJ_HEADERS_V新增2组数量、金额汇总的各3个的非数据库字段(合计字段、<合计字段>_RTOT_DB、<合计字段>_RTOT_OLD),Subclass Information属性为TEXT_ITEM_DISPLAY_ONLY;Database item属性为No;Data Type属性为Number;

如:合计字段为:ADJ_QTY_TOTAL(需界面画布展示);则需同步新增两个用于计算的字段ADJ_QTY_TOTAL_RTOT_DB、ADJ_QTY_TOTAL_RTOT_OLD(界面画布无需展示)

步骤2:行数据块ADJ_LINES_V上新增2组数量、金额的各3个字段(行字段、<行字段>_RTOT_DB、<行字段>_RTOT_OLD),行字段的Subclass Information属性为TEXT_ITEM,Database item属性为No,属于界面录入字段;<行字段>_RTOT_DB、<字段>_RTOT_OLD的Subclass Information属性为TEXT_ITEM_DISPLAY_ONLY,Database item属性为No,属于只展示字段;以上字段的Data Type属性为Number;

如:行字段为:ADJ_QTY(需界面画布展示);则需同步新增两个用于计算的字段ADJ_QTY_RTOT_DB、ADJ_QTY_RTOT_OLD(界面画布无需展示)

步骤3:Program Units新增CUX_ADJ_PUB包,增加过程l_adj_amount对行上的金额进行计算

  PROCEDURE l_adj_amount(event in VARCHAR2) IS
  BEGIN
    IF event = 'INIT' THEN
      copy(name_in('ADJ_LINES_V.adj_price') *
           name_in('ADJ_LINES_V.adj_qty'),
           'ADJ_LINES_V.adj_amt');
    END IF;
    END;

步骤4:程序包CUX_ADJ_PUB新增过程running_total,包装EBS form自带的app_calculate.running_total方法,用于将行上的字段汇总到头字段上

  PROCEDURE running_total(event in VARCHAR2) IS
  BEGIN
     app_calculate.running_total(event,
                                'ADJ_LINES_V.ADJ_AMT',
                                'ADJ_HEADERS_V.ADJ_AMT_TOTAL'); 
      app_calculate.running_total(event,
                                'ADJ_LINES_V.ADJ_QTY',
                                'ADJ_HEADERS_V.ADJ_QTY_TOTAL'); 
  END;

步骤5:程序包CUX_ADJ_PUB新增过程h_query,用于获取头上汇总金额的初始值,并进行汇总值赋值处理,如下:

	PROCEDURE h_query(event IN VARCHAR2) IS
	  l_amt_sum NUMBER;
	  l_qty_sum NUMBER;
	BEGIN
	  SELECT nvl(SUM(adj_amt), 0),nvl(sum(adj_qty),0)
	  INTO   l_amt_sum,l_qty_sum
	  FROM   cux_0_ar_acc_adj_lines_v
	  WHERE  adj_header_id = :adj_headers_v.adj_header_id;
	  :adj_headers_v.adj_amt_total         := l_amt_sum;
	  :adj_headers_v.adj_amt_total_rtot_db := l_amt_sum;
	  :adj_headers_v.adj_qty_total         := l_qty_sum;
	  :adj_headers_v.adj_qty_total_rtot_db := l_qty_sum;
	END;  

步骤6:程序包CUX_ADJ_PUB新增过程cal_amt_total,用于行上的数量、单价字段变化时触发,在触发器WHEN-VALIDATE-ITEM下调用:

  PROCEDURE cal_amt_total(event in VARCHAR2) IS
  BEGIN
    IF event = 'WHEN-VALIDATE-ITEM' THEN
      cux_adj_pub.l_adj_amount('INIT'); --先计算行上面的LINES.AMOUNT  
      cux_adj_pub.running_total('WHEN-VALIDATE-ITEM'); --然后在计算HEADERS.AMOUNT_TOTAL里面的数值  
    END IF;
    END;

步骤7:修改数据块行上ADJ_LINES_V.ADJ_PRICE的触发器WHEN-VALIDATE-ITEM

cux_adj_pub.cal_amt_total('WHEN-VALIDATE-ITEM');

步骤8:修改数据块行上ADJ_LINES_V.ADJ_QTY的触发器WHEN-VALIDATE-ITEM

cux_adj_pub.cal_amt_total('WHEN-VALIDATE-ITEM');

步骤9:修改数据块头上ADJ_HEADERS_V的POST_QUERY触发器

用于打开界面时,头上的金额、数量汇总字段有初始值

app_folder.event('POST-QUERY');
fnd_flex.event('POST-QUERY');
cux_adj_pub.h_query('POST-QUERY');

步骤10:修改数据块行上ADJ_LINES_V的KEY-DELREC触发器

cux_adj_pub.running_total('KEY-DELREC');  
Delete_Record;  

步骤11:修改数据块行上ADJ_LINES_V的KEY-DUPREC触发器

cux_adj_pub.running_total('KEY-DUPREC'); 
duplicate_record; 

步骤12:修改数据块行上ADJ_LINES_V的KEY-CLRREC触发器

cux_adj_pub.running_total('KEY-CLRREC'); 
app_folder.event('KEY-CLRREC');

步骤13:修改数据块行上ADJ_LINES_V的WHEN-CLEAR-BLOCK  ​​​​触发器

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

步骤14:修改数据块行上ADJ_LINES_V的POST-QUERY ​​​​​​​​​​​​​​触发器

cux_adj_pub.running_total('POST-QUERY'); 
app_folder.event('POST-QUERY');
app_globe.event('POST-QUERY');

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值