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|...|
|-----------------------------------|

最新文章

  1. bootstrap走动的进度条
  2. html5新特性之画布
  3. 论checkbox和radio的样式美化问题
  4. Django配置与静态文件
  5. Sublime 的中文乱码问题
  6. Handlebars 介绍
  7. web前端:html
  8. margin设置为负数
  9. CheckBox只选择一项
  10. CSS: 解决Div float后,父Div无法高度自适应的问题
  11. sublime 2
  12. 金山助手流氓软件-被进程sjk_daemon.exe坑死
  13. VHDL学习:利用Quartus自带库3步快速完成状态机
  14. JS(二)
  15. jQuery插件:Ajax将Json数据自动绑定到Form表单
  16. 实践详细篇-Windows下使用VS2015编译安装Caffe环境(CPU ONLY)
  17. ASP.NET Core 一步步搭建个人网站(1)_环境搭建
  18. antd的Tree控件实现点击展开功能
  19. leetcode — trapping-rain-water
  20. 爬虫 scrapy 笔记

热门文章

  1. TensorFlow函数:tf.reduce_sum
  2. nodejs -- event 模块, 事件模块.
  3. Vue2.0
  4. 【leetcode】455. Assign Cookies
  5. 【转】@RequestBody注解出现的三点错误
  6. linux基础之LSB定义的常用目录详解
  7. jq 绑定事件和解绑事件
  8. Go语言判断if else语句
  9. Linux下使用Nginx代理访问json文件报404错误
  10. Install MariaDB on Ubuntu server