1.快速将内表的某一个字段赋值到另一个表
代码语言:javascript复制""740前的语法
TYPES : BEGIN OF TYA_03M ,
FIELDNAME TYPE DD03M-FIELDNAME ,
END OF TYA_03M .
DATA LTA_03M TYPE TABLE OF TYA_03M .
DATA LSA_03M TYPE TYA_03M .
SELECT * FROM DD03M INTO TABLE @DATA(LTB_03M) WHERE TABNAME = 'BKPF'.
LOOP AT LTB_03M INTO DATA(LSB_03M).
CLEAR:LSA_03M .
LSA_03M-FIELDNAME = LSB_03M-FIELDNAME .
APPEND LSA_03M TO LTA_03M .
ENDLOOP.
""740后可使用的新语法
TYPES TY_FIEELD2 TYPE STANDARD TABLE OF DD03M-FIELDNAME WITH EMPTY KEY .
SELECT * FROM DD03M INTO TABLE @DATA(LT_03M) WHERE TABNAME = 'BKPF'.
DATA(LT_FIELD) = VALUE TY_FIEELD2( FOR LS_03M IN LT_03M[] ( LS_03M-FIELDNAME ) ) .
"DATA(LT_FIELD) = VALUE TY_FIEELD2( FOR LS_03M IN LT_03M[] WHERE ( FLDSTAT = 'A' ) ( LS_03M-FIELDNAME ) ) .
740之前的语法需要定义结构,定义表,定义工作区,然后loop循环数据添加
740只后的新语法只需要定义一个表类型的结构,然后用FOR运算符循环赋值即可,但是限制条件很多。(说的不对的欢迎评论区指正)
限制条件1,只能快速赋值一个字段,不能多个字段
限制条件2,定义的类型TY_FIEELD2只能是表类型的,不能像往常740之前的语法定义行类型的
好处在于省略了很多代码,并且循环表LT_03M的工作区LS_03M也快速定义了
2.FOR 循环给表赋值
代码语言:javascript复制TYPES: BEGIN OF ty_line,
col1 TYPE i,
col2 TYPE i,
col3 TYPE i,
END OF ty_line,
ty_tab TYPE STANDARD TABLE OF ty_line WITH EMPTY KEY.
DATA: gt_itab TYPE ty_tab,
j TYPE i.
FIELD-SYMBOLS <ls_tab> TYPE ty_line.
j = 1.
DO.
j = j 10.
IF j > 40.
EXIT.
ENDIF.
APPEND INITIAL LINE TO gt_itab ASSIGNING <ls_tab>.
<ls_tab>-col1 = j.
<ls_tab>-col2 = j 1.
<ls_tab>-col3 = j 2.
ENDDO.
DATA(gt_itab2) = VALUE ty_tab( FOR k = 11 THEN k 10 UNTIL k > 40
( col1 = K col2 = k 1 col3 = k 2 ) ).