前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABAP 之 as new 和 as end 的使用方法 .

ABAP 之 as new 和 as end 的使用方法 .

作者头像
百里丶落云
发布2022-12-05 08:38:11
3520
发布2022-12-05 08:38:11
举报
文章被收录于专栏:享~方法

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情

HELLO , 这里是百里,一个学习中的ABAPER , 今天学的东西是AS NEW 和 AS END 的用法, 在别的语言中可能是我见识少,我真没见到过这种用法. 是一个非常神奇的东西,今天就在讲解下 AS NEW 和 AS END 的常用方法及案例.

什么是AS NEW 及 AS END

F是内表的一个字段,当内表中F字段以及F左边的任何字段内容发生变化时,执行其中的代码段。

代码语言:javascript
复制
AT NEW F.
    代码段..
ENDAT.

当F字段以及F左边字段内容即将发生变化时,执行代码段。

代码语言:javascript
复制
AT END OF F.
 代码段..
ENDAT.

这是一个非常神奇且新奇的语法.利用这个语法可以做很多东西, 比如说判断重复性,求和, 判断数量超出多少,判断导入数据是否一个数据对应多个内容等等 . 这里讲述两个案例.

结构定义

代码语言:javascript
复制
TYPES:BEGIN OF TY_TEST,  
name TYPE char10,  
age TYPE char10,  
sex TYPE char10,  
END OF TY_TEST.  
  
DATA:FLAG TYPE C,  
     loag TYPE C.  
DATA:I_TEST TYPE TABLE OF TY_TEST,  
     W_TEST TYPE TY_TEST.  
DATA:I_TEST2 TYPE TABLE OF TY_TEST,  
     I_TEST3 TYPE TABLE OF TY_TEST.
DATA:lt_alv1 TYPE TABLE OF TY_TEST,  
       lt_alv2 TYPE TABLE OF TY_TEST.  
  DATA:l_line TYPE i.  
  
  DATA:l_flag TYPE char1.     

数据准备

创建数据后,数据一定要排序.

代码语言:javascript
复制
W_TEST-name = '001'.  
W_TEST-age = 'A'.  
W_TEST-sex = 10.  
APPEND W_TEST TO I_TEST.  
  
W_TEST-NAME = '001'.  
W_TEST-age = 'B'.  
W_TEST-sex = 20.  
APPEND W_TEST TO I_TEST.  
  
W_TEST-NAME = '002'.  
W_TEST-age = 'A'.  
W_TEST-sex = 20.  
APPEND W_TEST TO I_TEST.  
  
W_TEST-NAME = '002'.  
W_TEST-age = 'B'.  
W_TEST-sex = 30.  
APPEND W_TEST TO I_TEST.  
  
  
W_TEST-NAME = '002'.  
W_TEST-age = 'C'.  
W_TEST-sex = 60.  
APPEND W_TEST TO I_TEST.  
  
W_TEST-NAME = '003'.  
W_TEST-age = 'A'.  
W_TEST-sex = 30.  
APPEND W_TEST TO I_TEST.

验证 先后顺序

这个例子展示的内容为对应数据的应用场景, 在loop 循环中, 当触发AS NEW 时 ,但凡遇到新的内容 使得flag 赋值,通过逻辑判断.把新的内容追加到内表中.

当触发AS END 时 , 当字段以及左边字段内容即将发生变化时,记录的数据,追加到对应的内表中.

代码语言:javascript
复制
CLEAR:W_TEST.  
SORT I_TEST BY NAME age .  
  
LOOP AT I_TEST INTO W_TEST.  
  AT NEW NAME.  
    FLAG = 'X'.  
  ENDAT.  
  IF FLAG = 'X'.  
    APPEND W_TEST TO I_TEST2.  
    CLEAR:FLAG .  
  ENDIF.  
  
  AT END OF NAME.  
    loag = 'X'.  
  ENDAT.  
  
  IF loag = 'X'.  
    APPEND W_TEST TO I_TEST3.  
    CLEAR: loag.  
  ENDIF.  
  
  CLEAR:W_TEST.  
ENDLOOP.  
  
  
  
WRITE:/ '结果如下:'.  
WRITE:/ 'AT NEW 用法:'.  
LOOP AT I_TEST2 INTO W_TEST.  
  WRITE:/ W_TEST-NAME,'  ',  W_TEST-age, W_TEST-sex.  
  CLEAR:W_TEST.  
ENDLOOP.  
WRITE:/ .  
  
WRITE:/ 'AT END OF 用法:'.  
LOOP AT I_TEST3 INTO W_TEST.  
  WRITE:/ W_TEST-NAME,'  ',  W_TEST-age, W_TEST-sex.  
  CLEAR:W_TEST.  
ENDLOOP.

结果

统计某个字段发生次数

这个案例讲的是利用AS NEW 触发时,统计某个字段的数量. 当然如果在sql 中 会有很简单的方式, 不过利用AS NEW 的方式,也可以做出对应的东西.

通过数据赋值,循环对应数据到指针, 当AS NEW 触发时 ,删除非对应的数据, 保留其他数据 ,统计数据次数输出值.

代码语言:javascript
复制
lt_alv1[] = I_TEST.  
 SORT : lt_alv1 by  age .  
 LOOP AT I_TEST ASSIGNING FIELD-SYMBOL(<ls_alv>).  
    AT NEW age.  
  
      REFRESH lt_alv2.  
      CLEAR:l_line.  
  
      lt_alv2[] = lt_alv1[].  
      DELETE lt_alv2 WHERE age NE <ls_alv>-age.  
      l_line = lines( lt_alv2 ).  
  
    ENDAT.  
  
WRITE : sy-uline .  
WRITE : SY-TABIX .  
WRITE : <ls_alv>-age .  
WRITE : l_line .  
    ENDLOOP.

结果展示

技术总结

本篇内容展示的为AS NEW 及 AS END 的技术使用方式, 学会了这种内容,可以在数据验证, 接口对接, OLE, excel 上传等数据上都可以对应的内容. 在必要的时候 ,可以求和等种种方式. 代码是死的, 人是活的. 熟悉demo ,活学活用.

这里是百里 ,一个努力的学习者 , 最近 学习了 生命之花 ,以及生命时间轴, 明天看下抽个时间分享下 这个技术 ..

当然 这个可能也是技术吧 哈哈哈 .

欲得真学问,须下苦工夫. 掘友们 明天见 ~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是AS NEW 及 AS END
  • 结构定义
  • 数据准备
  • 验证 先后顺序
  • 结果
  • 统计某个字段发生次数
    • 结果展示
    • 技术总结
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档