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

  AT NEW a.

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

  ENDAT.

  AT END OF a.

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

  ENDAT.

ENDLOOP.

LOOP AT lt_data INTO .

  AT NEW a.

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

  ENDAT.

  AT END OF a.

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

  ENDAT.

ENDLOOP.

(3/4)执行结果


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

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

3、注意不要写成LOOP INTO

(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同号)

如果喜欢,谢谢转发。

你可能感兴趣的:(SAP Solution:LOOP中AT NEW后面的字段都是*,怎么办?)