SAP 两个loop循环优化

SELECT * FROM MARA INTO TABLE @DATA(IT_MARAUP TO 10000 ROWS.

CHECK IT_MARA IS NOT INITIAL.

SELECT * FROM MARC INTO TABLE @DATA(IT_MARCFOR ALL ENTRIES IN @IT_MARA WHERE MATNR = @IT_MARA-MATNR.

GET TIME STAMP FIELD LV_TIME_S.  "获得loop前的时间点

DATA LS_DATA LIKE MARC.
DATA LT_DATA LIKE TABLE OF  MARC.
LOOP AT IT_MARA INTO DATA(IS_MARA).
  LOOP AT IT_MARC INTO DATA(IS_MARCWHERE MATNR = IS_MARA-MATNR.
    MOVE-CORRESPONDING IS_MARC TO LS_DATA.
    APPEND LS_DATA TO LT_DATA.
    CLEAR LS_DATA.
  ENDLOOP.
ENDLOOP.
GET TIME STAMP FIELD LV_TIME_E.

LV_TEXT = LV_TIME_E - LV_TIME_S.

DESCRIBE TABLE LT_DATA LINES DATA(LV_NUM_1).
WRITE: /(14'普通循环时间:', LV_TEXT'条目数量:' ,LV_NUM_1.

CLEAR: LV_TEXT, LV_TIME_E,LV_TIME_S,LT_DATA.

GET TIME STAMP FIELD LV_TIME_S.

**排序
SORT: IT_MARA BY MATNR,
      IT_MARC BY MATNR.
LOOP AT IT_MARA INTO IS_MARA.
**取TABIX
  READ TABLE IT_MARC TRANSPORTING NO FIELDS WITH KEY MATNR = IS_MARA-MATNR  BINARY SEARCH.
  IF SY-SUBRC 0.
    LV_TABIX = SY-TABIX.

    LOOP AT IT_MARC FROM LV_TABIX INTO IS_MARC.
      IF IS_MARA-MATNR <> IS_MARC-MATNR.
        EXIT.
      ENDIF.

      MOVE-CORRESPONDING IS_MARC TO LS_DATA.
      APPEND LS_DATA TO LT_DATA.
      CLEAR LS_DATA.
    ENDLOOP.
  ENDIF.
ENDLOOP.
GET TIME STAMP FIELD LV_TIME_E.

DESCRIBE TABLE LT_DATA LINES DATA(LV_NUM_2).
LV_TEXT = LV_TIME_E - LV_TIME_S.

WRITE: /(14)'优化循环时间:', LV_TEXT,'条目数量:' ,LV_NUM_2.

posted @ 2022-04-11 16:43  下一詀110  阅读(398)  评论(0)    收藏  举报