matinal:SAP ABAP 7.40及以上新语法FOR的用法

2023-10-14 15:47:17 浏览数 (2)

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  ) ).

0 人点赞