二维码

[基础语法] ABAP中AT....END AT处理内表语句的使用方法

Twilight发表于 2014-02-16 23:52abaptest 最后回复于 2022-03-09 22:40 [复制链接] 30760 55

设置内表循环触发条件 AT....END AT,该语法为事件控制函数,应用于LOOP循环语句中,用于获取内表的数据变化事件。想要把这个功能摸清楚,下面这个完整的例子是最佳的学习捷径。

一、主程序代码:
  1. DATA: BEGIN OF itab OCCURS 0,
  2.       f1 TYPE i,
  3.       f2(6) TYPE c,
  4.       f3(10) TYPE n,
  5.       f4(16) TYPE p DECIMALS 2,
  6.       END OF itab.
  7. DATA: sub_tot(10) TYPE p DECIMALS 3.
  8. **--1
  9. itab-f1 = 1.
  10. itab-f2 = 'ONE'.
  11. itab-f3 = 10.
  12. itab-f4 = '1000.00'.
  13. APPEND itab.
  14. CLEAR itab.
  15. itab-f1 = 1.
  16. itab-f2 = 'ONE'.
  17. itab-f3 = 20.
  18. itab-f4 = '2000.00'.
  19. APPEND itab.
  20. CLEAR itab.
  21. itab-f1 = 1.
  22. itab-f2 = 'ONE'.
  23. itab-f3 = 30.
  24. itab-f4 = '3000.00'.
  25. APPEND itab.
  26. CLEAR itab.
  27. *--2
  28. itab-f1 = 2.
  29. itab-f2 = 'TWO'.
  30. itab-f3 = 10.
  31. itab-f4 = '1000.00'.
  32. APPEND itab.
  33. CLEAR itab.
  34. itab-f1 = 2.
  35. itab-f2 = 'TWO'.
  36. itab-f3 = 20.
  37. itab-f4 = '2000.00'.
  38. APPEND itab.
  39. CLEAR itab.
  40. *-- 3
  41. itab-f1 = 3.
  42. itab-f2 = 'THREE'.
  43. itab-f3 = 10.
  44. itab-f4 = '1000.00'.
  45. APPEND itab.
  46. CLEAR itab.
  47. itab-f1 = 3.
  48. itab-f2 = 'THREE'.
  49. itab-f3 = 20.
  50. itab-f4 = '2000.00'.
  51. APPEND itab.
  52. CLEAR itab.
  53. SORT itab BY f1.
  54. LOOP AT itab.
  55.   AT FIRST.
  56.     WRITE: /35 ' MATERIAL DETAILS:'.
  57.     ULINE.
  58.   ENDAT.
  59.   AT NEW f1.
  60.     WRITE: / 'DETAILS OF MATERIAL:' COLOR 7 , itab-f1.
  61.     ULINE.
  62.   ENDAT.
  63.   WRITE: / itab-f1, itab-f2, itab-f3, itab-f4.
  64.   sub_tot = sub_tot + itab-f4.
  65.   AT END OF f1.
  66.     ULINE.
  67.     WRITE: / 'SUB TOTAL :' COLOR 3 INVERSE ON, sub_tot COLOR 3 INVERSE ON.
  68.     CLEAR sub_tot.
  69.   ENDAT.
  70.   AT LAST.
  71.     SUM.
  72.     ULINE.
  73.     WRITE: 'SUM:', itab-f4.
  74.     ULINE.
  75.   ENDAT.
  76. ENDLOOP.
复制代码

二、执行结果:
control level.jpg
AT....End AT语句区别:
  • AT FIRST: 循环内表的第一行时触发执行的代码,只执行一次。
  • AT LAST: 循环内表的最后一行数据时执行代码,只执行一次。
  • AT NEW F1: 如果字段F1及F1的左则全部字段的数据,与上一行数据不一致,则执行代码。
  • AT END OF F1: 如果字段F1及F1的左则全部字段的数据,与下一行数据不一致时,则执行代码。

注意事项:
  • 这四种AT....End AT语句,都只能用在loop循环内表语句中。
  • AT NEW F1和AT END OF F1时需要注意:内表中字段F1之后的字段的值都会变成 *
  • control level 不能在有where条件的loop内表时使用
    代码检查报错:
    1. The LOOP statement processing will be limited
    2. (FROM, TO and WHERE additions in LOOP)
    3. Interaction with group change processing (AT NEW, ...) is undefined
    复制代码


如果在AT NEW F1和AT END OF F1中需要用到F1之后的字段的值,怎么办?
游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

qshiou
先赋值到一个工作区,这个问题我遇到过
回复 支持 1 反对 0

使用道具 举报

ratg0626
这个用的不多
回复 支持 反对

使用道具 举报

teyun2222
學習了,感謝分享~~~
回复 支持 反对

使用道具 举报

Jesse
遇到过这个问题,已解决
回复 支持 反对

使用道具 举报

tougegelol
qshiou 发表于 2015-7-21 18:07
先赋值到一个工作区,这个问题我遇到过

说的有道理····
回复 支持 反对

使用道具 举报

majiek
非常基础,给个赞
回复 支持 反对

使用道具 举报

fayne
学习下~~~~~
回复

使用道具 举报

夏天difg
谢谢分享!
回复

使用道具 举报

晓月之影
顶一下,学习了
回复 支持 反对

使用道具 举报

巽呆沐
受教学习了
回复 支持 反对

使用道具 举报

资明
非常哈 很想看
回复 支持 反对

使用道具 举报

Anda
以前遇着这问题,稀里糊涂解决了
回复 支持 反对

使用道具 举报

xiaoyuer
前来虚心学习,共同进步!
回复 支持 反对

使用道具 举报

青天白日满地红
很有帮助非常感谢
回复 支持 反对

使用道具 举报

sweetestsad

RE: ABAP中AT....END AT处理内表语句的使用方法

学习学习   
回复 支持 反对

使用道具 举报

缘聚风中
新手学习,感谢楼主分享
回复 支持 反对

使用道具 举报

缘聚风中
新手学习,感谢楼主分享
回复 支持 反对

使用道具 举报

缘聚风中
#新手学习,感谢楼主分享#
回复 支持 反对

使用道具 举报

缘聚风中

RE: ABAP中AT....END AT处理内表语句的使用方法

新手学习,感谢楼主分享
回复 支持 反对

使用道具 举报

123下一页

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表