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

ABAP-表中数据的横向累加的更多相关文章

  1. Oracle 取两个表中数据的交集并集差异集合

    Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要 ...

  2. MySQL查询数据表中数据记录(包括多表查询)

    MySQL查询数据表中数据记录(包括多表查询) 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: sele ...

  3. 对lua表中数据按一定格式处理,循环

    function putStartCard(handCard) function dataDeal(array,a,b,c) cclog("进入datadeal=============== ...

  4. Mysql清空表(truncate)与删除表中数据(delete)的区别

    来源:http://blog.is36.com/mysql_difference_of_truncate_and_delete/ 为某基于wordpress搭建的博客长久未除草,某天升级的时候发现已经 ...

  5. db2删除表中数据

    DB2数据库系统建表后,难免会有将表中数据清空的需求,本文将为您介绍DB2数据库中四种数据删除的方法,供您参考,您可以根据实际情况来进行选择,希望能对有所帮助. 1. 使用 DELETE 语句,即: ...

  6. mysql利用navicat导出表结构和表中数据

    LZ在网上搜索了要如何导出mysql的表结构和表中数据,发现有的方法不好用 记录一下好用的方式: 用navicat打开DB链接后,点击数据库,右击选择转储SQL文件,然后选择结构和数据: 之后弹出新的 ...

  7. pl/sql中误删表中数据并提交恢复办法

    最近在操作表中数据时,删除了表中数据,但是又想恢复,后来查到了官方的一篇文档,发现还蛮有用的,如下: 在pl/sql中运行,select * from A as of TIMESTAMP to_tim ...

  8. Navicat如何直接修改表中数据?

    Navicat如何直接修改表中数据?

  9. mysql--对行(表中数据)的增删改查

    一.插入数据(增加)insert 1.插入数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); #指定字段来插入数据,插 ...

随机推荐

  1. java正则表达式appendReplacement和appendTail方法

    appendReplacement是java中替换相应字符串的一个方法 appendReplacement(StringBuffer sb,String replacement) 将当前匹配子串替换为 ...

  2. mail语法

    在Linux系统下mail命令的用法 在Linux系统下mail命令的测试 1. 最简单的一个例子: mail -s test admin@aispider.com 这条命令的结果是发一封标题为tes ...

  3. Appium Hybrid混合应用测试——Native切换WebView

    Appium Hybrid混合应用测试过程中,经常需要在Native和WebView之间进行切换: 1.切换至WEBVIEW操作: for cons in driver.contexts: if co ...

  4. webapp js与安卓,ios怎么交互

    ) } } export default { callhandler (name, data, callback) { setupWebViewJavascriptBridge(function (b ...

  5. c语言笔记4数据的输入和输出

    数据的输入和输出 知识点一 计算机的用途:数据的输入和输出. 分类: 字符:字符输入函数getchar().字符输出函数putchar(). 格式:格式输入函数scanf().格式输出函数printf ...

  6. i3wm 入门

    安装 所用Linux版本为kali-rolling,直接安装 apt install i3 设置为xinit的启动对像 修改 ~/.xserverrc #!/bin/sh exec /usr/bin/ ...

  7. Python全栈之路----常用模块----time模块

    time 模块的方法 time.time():返回当前时间的时间戳. >>> import time >>> time.time() #从1974年到现在过去了多少 ...

  8. Idea基于maven搭建多模块单体结构项目

    菜鸟教程 一.创建一个公共的父工程: 1.1 创建一个新的maven项目: 1.2 先创建公共的父工程,选择maven骨架: 1.3 配置maven: 1.4 填写groupId.artifactId ...

  9. error: invalid use of void expression

    void*类型定义的指针变量只可以接收对象的地址,而没有对象类型这个概念.所以void*指针变量是不能直接用“*指针变量”去访问,需要强制类型转换后才能“间接”访问: *(type*)指针变量,必须给 ...

  10. 【BZOJ2555】SubString

    算是学会sam了吧…… 原题: 懒得写背景了,给你一个字符串init,要求你支持两个操作        (1):在当前字符串的后面插入一个字符串        (2):询问字符串s在当前字符串中出现了 ...