Solution:LOOP中AT NEW后面的字段都是*,怎么办?

(1/4)问题


假如某结构中包括A、B两个字段,LOOP内表时,AT NEW A、AT END OF A时,B的值是*,怎么办呢?

以前,我都是在LOOP时把工作区的内容赋给另外一个临时的工作区,

LOOP AT itab into wa.

  wa_temp = wa.

  AT NEW a.

  ENDAT.

ENDLOOP.

再用AT NEW等事件的。

不过今天在解决凯神的一个小问题时,偶然得到了一个其他的解决办法。

(2/4)代码

废话不说了,上代码。

TYPES:BEGIN OF ty_data,

        a TYPE c,

        b TYPE char2,

      END OF ty_data.

DATA: ls_data TYPE ty_data,

      lt_data TYPE TABLE OF ty_data.

FIELD-SYMBOLS:<ls_data> TYPE ty_data.

ls_data-a = 'A'. ls_data-b = 'A1'. APPEND ls_data TO lt_data.

ls_data-a = 'A'. ls_data-b = 'A2'. APPEND ls_data TO lt_data.

LOOP AT lt_data INTO ls_data.

  AT NEW a.

    WRITE: 'NEW', ls_data-a, ls_data-b, /.

  ENDAT.

  AT END OF a.

    WRITE: 'END', ls_data-a, ls_data-b, /.

  ENDAT.

ENDLOOP.

LOOP AT lt_data ASSIGNING <ls_data>.

  AT NEW a.

    WRITE: 'NEW', <ls_data>-a, <ls_data>-b, /.

  ENDAT.

  AT END OF a.

    WRITE: 'END', <ls_data>-a, <ls_data>-b, /.

  ENDAT.

ENDLOOP.

LOOP AT lt_data INTO <ls_data>.

  AT NEW a.

    WRITE: 'NEW', <ls_data>-a, <ls_data>-b, /.

  ENDAT.

  AT END OF a.

    WRITE: 'END', <ls_data>-a, <ls_data>-b, /.

  ENDAT.

ENDLOOP.

(3/4)执行结果


649dbf2827c8c943033d5894b8630aca.png

1、水平有限,之前没发现LOOP AT itab ASSIGN <fs>还有这个好处,规避了AT NEW事件里,字段变*的情况

2、LOOP INTO是把内表的内容COPY到工作区中,而LOOP ASSIGN是用一个指针指向当前的工作区,所以内容不会变成*

3、注意不要写成LOOP INTO <fs>哦

(4/4)最后


嗯嗯,末了了,提个不太相干的小问题,如果:

A TYPE STRING,B TYPE STRING

那么结果会是什么样的呢?

想知道就去测测吧,我就不在留言里写答案了,哈哈!


ABAP文章汇总:

https://mp.weixin.qq.com/s/djmMeM0qfDxPPwxbjuJABA

Excel文章汇总:

https://mp.weixin.qq.com/s/NwJ0SzIrn9hVmaCMo-UYyA

网盘永久链接:

https://mp.weixin.qq.com/s/f_WwKZdwM-vPEstTjjz_eQ

关注公众号,点下方菜单打开上面的链接,更方便哦。

笔者微信:286503700(QQ同号)

如果喜欢,谢谢转发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值