LOOP AT RESULT_PACKAGE INTO LS_MEBPC_O062. IF LS_MEBPC_O062-/BIC/M_HRKMBM <> '19' AND LS_MEBPC_O062-/BIC/M_RYLX = '中方' . IF LS_MEBPC_O062-/BIC/M_ZJ+0(1) = 'E'. LS_MEBPC_O062-/BIC/M_ZL = 'JT2'. ELSE. LS_MEBPC_O062-/BIC/M_ZL = 'JT1'. ENDIF. COLLECT LS_MEBPC_O062 INTO RESULT_PACKAGE . ENDIF. ENDLOOP. CLEAR LS_MEBPC_O062. 数据翻倍
时间: 2023-11-24 07:08:16 浏览: 79
在您提供的 ABAP 代码中,数据翻倍的问题是由于在循环内部使用 COLLECT 语句导致的。每当 COLLECT 语句执行时,会将当前的 LS_MEBPC_O062 结构体添加到 RESULT_PACKAGE 内部表中,从而导致内部表中的数据翻倍。
要解决数据翻倍的问题,您可以使用一个临时的内部表来保存符合条件的结构体,然后在循环结束后将临时内部表的内容复制回 RESULT_PACKAGE 内部表。以下是修改后的代码示例:
DATA: lt_temp TYPE TABLE OF ls_mebpc_o062. " 临时内部表
LOOP AT result_package INTO ls_mebpc_o062.
IF ls_mebpc_o062-/BIC/M_HRKMBM <> '19' AND
ls_mebpc_o062-/BIC/M_RYLX = '中方'.
IF ls_mebpc_o062-/BIC/M_ZJ+0(1) = 'E'.
ls_mebpc_o062-/BIC/M_ZL = 'JT2'.
ELSE.
ls_mebpc_o062-/BIC/M_ZL = 'JT1'.
ENDIF.
APPEND ls_mebpc_o062 TO lt_temp. " 将符合条件的结构体添加到临时内部表
ENDIF.
ENDLOOP.
CLEAR result_package. " 清空 RESULT_PACKAGE 内部表
LOOP AT lt_temp INTO ls_mebpc_o062.
COLLECT ls_mebpc_o062 INTO result_package. " 将临时内部表的内容复制回 RESULT_PACKAGE 内部表
ENDLOOP.
CLEAR ls_mebpc_o062. " 清空 LS_MEBPC_O062 结构体
CLEAR lt_temp. " 清空临时内部表
在修改后的代码中,我们引入了一个临时的内部表 lt_temp,用于存储符合条件的 LS_MEBPC_O062 结构体。在循环中,如果结构体满足条件,则将其添加到临时内部表中。然后,在循环结束后,将临时内部表的内容复制回 RESULT_PACKAGE 内部表。最后,使用 CLEAR 语句清空 LS_MEBPC_O062 结构体和临时内部表。
这样做可以避免数据翻倍的问题。希望这能帮助到您!如果您有任何其他问题,请随时提问。
阅读全文