zoukankan      html  css  js  c++  java
  • ABAP-表中数据的横向累加

    GLT0 等表中数据的横向累加 ——塞依SAP培训

    在 ABAP 的 GLT0、FAGLFLEXT 等余额表中,用诸如 TSL01、TSL02 …… TSL16 等字段记录了 16 个期间的发生额,在对某个期间取当年累计的时候,如果用其它语言,一般需要创建一个 CASE ... WHEN ... ENDCASE 结构,按输入的期间值来累加,代码量比较大。不过在 ABAP 中就不必那么麻烦了,SAP 提供了一个方便的语法来完成这类计算。代码如下:

     PARAMETERS: prpmax LIKE GLT0-RPMAX.

    DATA: GLT0VARY LIKE GLT0-TSL01.

    SUMME = SUMME + GLT0-TSLVT.
    DO prpmax TIMES VARYING GLT0VARY FROM GLT0-TSL01 NEXT GLT0-TSL02.
    SUMME = SUMME + GLT0VARY.
    ENDDO.

    其中的关键在于 DO ... VARYING ... FROM ... NEXT 这个语法结构。其中的 prpmax 代表循环次数,也就是输入的区间,GLT0VARY 代表存储获得值的临时变量,FROM 后的 GLT0-TSL01 是循环的开始位置,GLT0-TSL02 是循环的第二个位置,从这两个字段的位置,就能获得每次取值的内存偏移。这样,DO 循环的过程就是,首先取 GLT0-TSL01 的值,放到 GLT0VARY 中,然后执行 SUMME 的累加;再根据 prpmax 的值循环指定次数,每次都按 GLT0-TSL01 的长度取相应的内存片段,放到 GLT0VARY 中,执行累加。因此,在这样的循环里,需要累加的字段必须连续且长度相同。下图表示了它的内存使用情况: 

              --循环开始时从这个位置读取
              |     --第二次循环时从这个位置读取
              |     |     --....
              |     |     |   --最多循环 16 次,否则会读到其它内存位置,导致错误
              V     V     V   V
    |---|-----|-----|-----|---|-----|---|
    |...|TSLVT|TSL01|TSL02|...|TSL16|...|
    |-----------------------------------|

  • 相关阅读:
    根据索引删除数组内信息时导致程序崩溃
    C/C++判断字符串是否包含某个子字符串
    Qwidget布局操作之QGridLayout(网格布局)
    Qt获取文件路径、文件夹路径
    javascript DOM document属性
    javascript dom页面中的location属性
    javascript页面常用事件
    python的高阶函数式编程
    python set 集合复习--点滴
    python异常
  • 原文地址:https://www.cnblogs.com/ricoo/p/10681444.html
Copyright © 2011-2022 走看看