首页 > 代码库 > 订单头与订单行金额汇总

订单头与订单行金额汇总

  订单头有非数据库项 总金额(汇总行金额)

  订单行有非数据库项 金额,是由行块的数据库项 数量与单价的乘积得到

技术分享

  头块:order_headers,总金额项:amount,行块:order_lines,金额项:amount

刚开始我准备在quantity和unit_price的when-validate-item中加入如下代码

  if :order_lines.unit_price is not null and :order_lines.quantity is not null then
       :order_lines.amount:=:order_lines.unit_price*:order_lines.quantity;
       :order_headers.amount:=:order_headers.amount+:order_lines.amount;
      end if;

当数量和单价不为空时,就计算出这一行的金额,再将原来的头总金额加上当前行金额。

但是经过测试发现很大问题,在第一次输入数量和单价之后,如果要对它们进行改动,总金额会一直增加。

  参考资料后找到app_calculate.running_total方法来实现需求,这是oracle自带的汇总计算方法。

首先在头块中添加AMOUNT_RTOT_DB项(命名规则为汇总项_RTOT_DB,类型为显示项,数据类型number(38)),

行块中再添加AMOUNT_RTOT_DB,AMOUNT_RTOT_OLD都为显示项,char(61),这三项都是必须的。然后将代码改为

  if :order_lines.unit_price is not null and :order_lines.quantity is not null then
       :order_lines.amount:=:order_lines.unit_price*:order_lines.quantity;
       app_calculate.running_total(‘WHEN-VALIDATE-ITEM‘,‘ORDER_LINES.AMOUNT‘,‘ORDER_HEADERS.AMOUNT‘);
      end if;

即可。

  在查询时,由于两项汇总金额都是非数据项,所已需要在头行块的post-query触发器中进行计算,行块只需求当前行的金额

  :order_lines.amount:=:order_lines.quantity*:order_lines.unit_price;

头块需要查询数据库

  declare 
     cursor cur_line is
     select * from TRN_ORDER_LINES_11205
     where header_id=:order_headers.header_id;
     amount number(10,2):=0;
    begin
     for line_rec in cur_line loop
           amount:=amount+line_rec.QUANTITY*line_rec.UNIT_PRICE ;
       end loop;
     :order_headers.amount:=amount;
   end;

 

 

      

 

订单头与订单行金额汇总