嵌套循环条件

mrj*_*_05 2 sap abap loops

假设我有这个表:

 TDID    TDLINE
 F04     04-AA
 F04     04-BB    <-- call a function
 F05     05-AA
 F05     05-BB    <-- call a function
 F06     06-AA    <-- call a function
Run Code Online (Sandbox Code Playgroud)

我想调用一个函数,而该TDID字段与前一个字段不同.我有下面的代码,它可以工作,但不知何故它不完美的工作(它错过了最后一行):

LOOP AT lines ASSIGNING <fs1>.
  IF <fs2> IS INITIAL.
    <fs2> = <fs1>.
  ELSE.
    li_line-tdline = <fs2>-tdline.
    APPEND li_line.

    IF <fs1>-tdid NE <fs2>-tdid.
      li_thead-tdid = <fs2>-tdid.

      CALL FUNCTION 'SAVE_TEXT'
        EXPORTING
          header          = li_thead
          savemode_direct = 'X'
        TABLES
          lines           = li_line

      CLEAR: li_thead,
             li_line.
      FREE:  li_thead,
             li_line.
    ENDIF.
  ENDIF.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

回答

感谢vwegert的回答:

LOOP AT lines ASSIGNING <fs1>.
  AT NEW tdid.
    REFRESH li_thead.
    REFRESH li_line.

    li_thead-tdid     = <fs1>-tdid.
    APPEND li_thead.
  ENDAT.

  li_line-tdline    = <fs1>-tdline.
  APPEND li_line.

  AT END OF tdid.
    CALL FUNCTION 'SAVE_TEXT'
      EXPORTING
        header          = li_thead
        savemode_direct = 'X'
      TABLES
        lines           = li_line
  ENDAT.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)

vwe*_*ert 6

假设表是按类排序的,TDID并且没有TDID更改的字段比TDID以下更频繁:

LOOP AT lines ASSIGNING <fs1>.
  AT NEW tdid.
    REFRESH some_other_tab.
  ENDAT.
  APPEND <fs1> TO some_other_tab.
  AT END OF tdid.
    CALL FUNCTION ...
  ENDAT.
ENDLOOP.
Run Code Online (Sandbox Code Playgroud)