2

假设我有这张桌子:

 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

我想在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.

回答

感谢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.
4

2 回答 2

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.
于 2013-12-05T11:34:00.857 回答
0

vwegert 提到的不可预测性来自于应用控制语句的字段旁边的字符字段被转换为星号(*)。如果要在控制语句中使用这些值,请确保复制临时表中的值并在其上循环而不是原始内部表,并在原始内部表上使用 READ 使用这些值。还要记住,控制语句会考虑语句中使用的列左侧的所有列的条件。

于 2013-12-11T19:28:58.320 回答