zoukankan      html  css  js  c++  java
  • EBS自动行号,行金额自动汇总到头,金额根据币种编号总结

    一.自动行号实现

      1.方法一:

        只需要将“序号”定义成公式,并将公式设置为:get_block_property('block_name',current_record)就可以实现了,或者把这行语句放到“When-Create-Record”触发器中。

        缺点:增改删时,行号不能自动刷新。

      2.方法二:

        ①在需要自动行号的Block中,新增一个Item,我这里取名为LINE_NUM(注:这不是数据库中的字段,即属性Database Item为No),放在对应画布上及调整布局;

        ②在对应Block添加相应Block级别的触发器:ORDER_LINES为我的数据块

          KEY-CREREC:  

    DECLARE
    LINE NUMBER;
    BEGIN
    LINE := :SYSTEM.CURSOR_RECORD;
    LOOP
    IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
    EXIT; 
    ELSE
    NEXT_RECORD; 
    :ORDER_LINES.LINE_NUM := :SYSTEM.CURSOR_RECORD + 1; 
    END IF; 
    END LOOP;
    GO_RECORD(LINE);
    CREATE_RECORD;
    :ORDER_LINES.LINE_NUM := :SYSTEM.CURSOR_RECORD;
    END;

          KEY-DELREC:

    DECLARE
    LINE NUMBER;
    BEGIN
    DELETE_RECORD;
    LINE := :SYSTEM.CURSOR_RECORD;
    LOOP 
    :ORDER_LINES.LINE_NUM := :SYSTEM.CURSOR_RECORD; 
    IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
    EXIT; 
    ELSE 
    NEXT_RECORD; 
    END IF; 
    END LOOP;
    GO_RECORD(LINE);
    END;

          WHEN-CREATE-RECORD:

    :ORDER_LINES.LINE_NUM := :SYSTEM.TRIGGER_RECORD;

          POST-QUERY:(注:如果这里使用了该触发器,查询会获取不到行号,需要加入以下到该触发器获取行号)

    begin
        :ORDER_LINES.LINE_NUM:=:SYSTEM.TRIGGER_RECORD;
    end;

      3.更多方法:https://blog.csdn.net/cai_xingyun/article/details/17922631

    二.行金额自动汇总

      1.从无到有自己实现:

        

          效果图:包含两个数据块(OEDER_HEADERS和ORDER_LINES),ODRDER_HEADERS.TOTAL是所有总金额,ORDER_LINES.AMOUNT是没一行总金额

        步骤:

          ①创建ORDER_HEADERS.TOTAL,设置其子类属性为:TEXT_ITEM_DISPLAY_ONLY;

           在合计显示的数据块中,创建合计项目的汇总临时项目,命名规则为:<合计项目名称>_RTOT_DB,NUMBER(38)/DISPLAY_ITEM,即TOTAL_RTOT_DB/NUMBER(38)/DISPLAY_ITEM;

          (注:这两个字段都不是数据库中的字段,故Item的属性Database Item为No,否则会提示该字段无效);

          ②添加一个包,用于封装app_calculate.running_total()及初始化amount的存储过程,如下:

            包头:

    PACKAGE TOTAL_LINES IS
      procedure amount (event varchar2);
      procedure running_total (event varchar2);
     
    END TOTAL_LINES;

              包体: 

    procedure running_total (event varchar2) is
    begin
      app_calculate.running_total(event,'ORDER_LINES.AMOUNT','ORDER_HEADERS.TOTAL');
    end running_total;
     procedure amount (event varchar2) is
    begin
      if event = 'INIT' then
        copy(name_in('order_lines.price') * name_in('order_lines.quantity'),'order_lines.amount');
      end if;    
    end amount;
    
      
    END TOTAL_LINES;

          ③ORDER_LINES对应触发器:(ORDER_LINES块级,存放每行总金额的块)

            KEY-DELREC

    total_lines.running_total('KEY-DELREC');
    --注:这里是删除行号的代码,如果不删除会同时删除两行
    --DELETE_RECORD;
    DECLARE
    LINE NUMBER;
    BEGIN
    DELETE_RECORD;
    LINE := :SYSTEM.CURSOR_RECORD;
    LOOP 
    :ORDER_LINES.LINE_NUM := :SYSTEM.CURSOR_RECORD; 
    IF :SYSTEM.LAST_RECORD = 'TRUE' THEN 
    EXIT; 
    ELSE 
    NEXT_RECORD; 
    END IF; 
    END LOOP;
    GO_RECORD(LINE);
    END;

            KEY-DUPREC:

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

            KEY-CLRREC:

    CLEAR_RECORD;

            WHEN-CLEAR-BLOCK:

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

            POST-QUERY: 

    total_lines.amount('INIT');
    total_lines.running_total( 'POST-QUERY');
    --注:这是获取行号的
    begin
        :ORDER_LINES.LINE_NUM:=:SYSTEM.TRIGGER_RECORD;
        end;  

          ④在ORDER_HEADERS(放Total总金额的数据块)的数据块级触发器上添加查询初始化所有总金额Total

            POST-QUERY:

    select nvl(sum(price*quantity),0)
        into :order_headers.total
      from Cux_Order_Lines_All_25305
     where header_id = :order_headers.header_id ;
     :order_headers.total_rtot_db:=:order_headers.total;

          ⑤Item级触发器(Price和Quantity,对应修改触发金额从新初始化)

            Price和Quantity下触发器WHEN-VALIDATE-ITEM:

     total_lines.amount('INIT');
     total_lines.running_total('WHEN-VALIDATE-ITEM');

      2.根据属性直接获取:

              这是获取总金额的Item,需要单独放在一个Block里面,summrary Function属性中是求和函数SUM,summarized Block中是所求和Item的Block,Summarized Item是所求和的Item

                给每一行设置公式获取每一行的总金额

        可能会报如图的错,解决方式

      

            

           

       

      

  • 相关阅读:
    JDK、J2EE、J2SE、J2ME的区别
    消息队列
    Unity3D 导入aar注意事项
    汇编小结
    构造函数语意学--笔记
    androidStudio 改包名
    新手用车
    北京临牌办理与续办
    h5+
    apache.http.MalformedChunkCodingException: Chunked stream ended unexpectedly
  • 原文地址:https://www.cnblogs.com/lyq-biu/p/11278526.html
Copyright © 2011-2022 走看看