获取内表部分字段
从一个内表抽取部分字段到另一个内表,要求字段名相同。
方法一:循环添加;
方法二:MOVE-CORRESPONDING ITAB1[] TO ITAB2[]
DATA:BEGIN OF GS_OUT,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
MENGE TYPE P DECIMALS 3,
END OF GS_OUT.
DATA GT_OUT LIKE STANDARD TABLE OF GS_OUT.
DATA:BEGIN OF GS_EBN,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
END OF GS_EBN.
DATA GT_EBN LIKE STANDARD TABLE OF GS_EBN.
DATA: T1 TYPE P,
T2 TYPE P,
TC TYPE P,
T3 TYPE P,
T4 TYPE P,
TN TYPE P.
SELECT EBELN EBELP MATNR MENGE INTO TABLE GT_OUT
UP TO 100000 ROWS
FROM MSEG.
.
GET RUN TIME FIELD T1.
LOOP AT GT_OUT INTO GS_OUT.
MOVE-CORRESPONDING GS_OUT TO GS_EBN.
APPEND GS_EBN TO GT_EBN.
ENDLOOP.
GET RUN TIME FIELD T2.
T3 = T2 - T1.
WRITE:/'方法一:','运行时间:',T3.
REFRESH GT_EBN.
GET RUN TIME FIELD T1.
MOVE-CORRESPONDING GT_OUT[] TO GT_EBN[].
GET RUN TIME FIELD T2.
T3 = T2 - T1.
WRITE:/'方法二:','运行时间:',T3.
IF SY-SUBRC = 0.
ENDIF.
修改内表
ASSIGNING 与 MODIFY 修改。
DATA:BEGIN OF GS_OUT,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
MENGE TYPE P DECIMALS 3,
END OF GS_OUT.
DATA GT_OUT LIKE STANDARD TABLE OF GS_OUT.
DATA:BEGIN OF GS_EBN,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
END OF GS_EBN.
DATA GT_EBN LIKE STANDARD TABLE OF GS_EBN.
DATA: T1 TYPE P,
T2 TYPE P,
TC TYPE P,
T3 TYPE P,
T4 TYPE P,
TN TYPE P.
SELECT EBELN EBELP MATNR MENGE INTO TABLE GT_OUT
UP TO 100000 ROWS
FROM MSEG.
.
GET RUN TIME FIELD T1.
LOOP AT GT_OUT INTO GS_OUT.
GS_OUT-MENGE = 0.
MODIFY GT_OUT FROM GS_OUT.
ENDLOOP.
GET RUN TIME FIELD T2.
T3 = T2 - T1.
WRITE:/'方法一:','运行时间:',T3.
GET RUN TIME FIELD T1.
FIELD-SYMBOLS:<FL> LIKE GS_OUT.
LOOP AT GT_OUT ASSIGNING <FL>.
<FL>-MENGE = 0.
ENDLOOP.
GET RUN TIME FIELD T2.
T3 = T2 - T1.
WRITE:/'方法二:','运行时间:',T3.
READ TABLE
READ TABLE语句,分别读取HASHTABLE方式与BINARY SEARCH方式。
DATA:BEGIN OF GS_OUT,
EBELN LIKE EKPO-EBELN,
EBELP LIKE EKPO-EBELP,
MATNR LIKE EKPO-MATNR,
MENGE TYPE P DECIMALS 3,
END OF GS_OUT.
DATA GT_OUT LIKE STANDARD TABLE OF GS_OUT." WITH KEY MATNR.
DATA:BEGIN OF GS_EBN,
MATNR LIKE MSEG-MATNR,
MENGV TYPE P DECIMALS 3,
END OF GS_EBN.
DATA GT_EBN LIKE STANDARD TABLE OF GS_EBN WITH KEY MATNR.
DATA HST_EBN LIKE HASHED TABLE OF GS_EBN WITH UNIQUE KEY MATNR.
DATA CL_TYPEDESCR TYPE REF TO CL_ABAP_TYPEDESCR.
DATA: T1 TYPE P,
T2 TYPE P,
TC TYPE P,
T3 TYPE P,
T4 TYPE P,
TN TYPE P.
SELECT EBELN EBELP MATNR MENGE INTO TABLE GT_OUT
UP TO 100000 ROWS
FROM MSEG.
.
MOVE-CORRESPONDING GT_OUT[] TO GT_EBN[].
SORT GT_EBN.
DELETE ADJACENT DUPLICATES FROM GT_EBN.
SORT GT_EBN.
HST_EBN[] = GT_EBN[].
GET RUN TIME FIELD T1.
LOOP AT GT_OUT INTO GS_OUT.
READ TABLE GT_EBN INTO GS_EBN WITH KEY MATNR = GS_OUT-MATNR BINARY SEARCH.
ENDLOOP.
GET RUN TIME FIELD T2.
T3 = T2 - T1.
WRITE:/'方法一:','运行时间:',T3.
GET RUN TIME FIELD T1.
LOOP AT GT_OUT INTO GS_OUT.
READ TABLE HST_EBN INTO GS_EBN WITH KEY MATNR = GS_OUT-MATNR.
ENDLOOP.
GET RUN TIME FIELD T2.
T3 = T2 - T1.
WRITE:/'方法二:','运行时间:',T3.
IF SY-SUBRC = 0.
ENDIF.
注:HASHTABLE 比BINARY SEARCH读取快得多,但时,HASHTABLE中定义的关键字段在读取时必须全部用到,否则不起作用。
循环内表
方法一:根据关键字段读取;
方法二:根据行索引读取。
DATA:t_mseg LIKE STANDARD TABLE OF mseg WITH HEADER LINE.
SELECT * INTO TABLE t_mseg UP TO 100000 ROWS
FROM mseg.
DATA: t1 TYPE i,
t2 TYPE i,
t3 TYPE i.
DATA:BEGIN OF ls_mat,
matnr TYPE mseg-matnr,
END OF ls_mat.
DATA lt_mat LIKE STANDARD TABLE OF ls_mat.
MOVE-CORRESPONDING t_mseg[] TO lt_mat[].
SORT lt_mat.
DELETE ADJACENT DUPLICATES FROM lt_mat.
*--循环读取,根据关键字段 物料号
GET RUN TIME FIELD t1.
LOOP AT lt_mat INTO ls_mat.
LOOP AT t_mseg ASSIGNING FIELD-SYMBOL(<w_mseg>) WHERE matnr = ls_mat-matnr.
<w_mseg>-menge = 0.
ENDLOOP.
ENDLOOP.
GET RUN TIME FIELD t2.
t3 = t2 - t1.
WRITE:/ t3.
*--循环读取,根据物料号行索引
CLEAR :t1,t2,t3.
DATA lv_tabix TYPE i.
GET RUN TIME FIELD t1.
SORT t_mseg BY matnr.
LOOP AT lt_mat INTO ls_mat.
READ TABLE t_mseg WITH KEY matnr = ls_mat-matnr TRANSPORTING NO FIELDS BINARY SEARCH.
IF sy-subrc = 0.
lv_tabix = sy-tabix.
ELSE.
CONTINUE.
ENDIF.
LOOP AT t_mseg ASSIGNING FIELD-SYMBOL(<f_mseg>) FROM lv_tabix.
IF <f_mseg>-matnr <> ls_mat-matnr.
EXIT.
ENDIF.
<f_mseg>-menge = 0.
ENDLOOP.
ENDLOOP.
GET RUN TIME FIELD t2.
t3 = t2 - t1.
WRITE:/ t3.