1、背景
今天在跟踪采购信息记录创建接口时,发现一个程序BUG,多行阶梯价变成了重复(首行)的数据,跟踪代码定位问题在以下语句附近
2、实测
编写Demo代码如下:
REPORT YZ_TEMP_DEMO.
DATA: BEGIN OF GS_STRUC,
ID TYPE I,
VALUE TYPE P,
END OF GS_STRUC.
DATA: GT_STRUC LIKE TABLE OF GS_STRUC.
GS_STRUC-ID = 1.
GS_STRUC-VALUE = 10.
APPEND GS_STRUC TO GT_STRUC.
GS_STRUC-ID = 2.
GS_STRUC-VALUE = 100.
APPEND GS_STRUC TO GT_STRUC.
LOOP AT GT_STRUC ASSIGNING FIELD-SYMBOL(<FS>).
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( GT_STRUC ). " 值未改变
LOOP AT GT_STRUC ASSIGNING <FS>.
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( GT_STRUC ). " 值未改变
LOOP AT GT_STRUC INTO <FS>.
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( GT_STRUC ). " 值改变,全部变成了第一行的值
实测结果依次如下:
3、区别
(1)通过实测,可以发现,Loop…Assigning与Loop…Into FIELD-SYMBOL是完全不同的;
(2)Loop…Into wa 与 Loop…Assigning FIELD-SYMBOL,可以实现相同作用,但后者效率更高(不存在往工作区转移数据)。
LOOP AT itab INTO wa_tab.
wa_tab-fld1 = ’X’.
MODIFY itab FROM wa_tab. " 需要MODIFY更新回去
ENDLOOP.
LOOP AT itab ASSIGNING <fs>.
<fs>-fld1 = ’X’. " 可以直接更新
ENDLOOP.