在内部表的删除表中键入冲突

时间:2016-02-08 08:29:57

标签: sap abap

我最近有转储,

DATA: gt_data    TYPE SORTED TABLE OF ty_data WITH NON-UNIQUE KEY bukrs gaapnm,
     ...
     lt_tabdel  TYPE standard TABLE OF ty_data.

  LOOP AT gt_data ASSIGNING <gf_data>.
    IF <gf_data>-KANSW + <gf_data>-KAUFW = 0.
      APPEND <gf_data> TO lt_tabdel.
    ENDIF.
  ENDLOOP.

  IF lt_tabdel IS NOT INITIAL.
    DELETE gt_data FROM lt_tabdel.
  ENDIF.

在删除内部表中的表格的行上 - 我有一个转储:在声明中 将对象转换为整数 参数位置仅支持数值类型数据对象 &#34;对象&#34 ;. 在本案例中,操作数&#34; object&#34;具有非数值数据类型&#34; TABLE  OF TY_DATA&#34;。我无法理解 - 为什么?它们都有相同的类型......所以,如果你能提供一些建议和一些错误来源的解释,那将会很棒。

2 个答案:

答案 0 :(得分:5)

您(无意中)使用this variant of the DELETE statement使用FROMTO来指定索引,i。即表格行数。从某种意义上说,您正在编码gt_data中的所有行删除到lt_tabdel 中行号所标识的行之下,系统在尝试转换时会出现问题。 lt_tabdel的内容为整数。

据我所见 - 我。 E.如果您提供了完整的代码示例 - 这应该足够了:

LOOP AT gt_data ASSIGNING <gf_data>.
  IF <gf_data>-KANSW + <gf_data>-KAUFW = 0.
    DELETE gt_data.
    CONTINUE. " safety measure
  ENDIF.
ENDLOOP.

有关CONTINUE语句的说明,请检查this answer

答案 1 :(得分:-1)

好的,我找到了解决方案。删除 - 是错误的命令。所以我改用了这个:

LOOP AT gt_data ASSIGNING <gf_data>.
    IF <gf_data>-KANSW + <gf_data>-KAUFW <> 0.
      append <gf_data> to lt_data.
    ENDIF.
  ENDLOOP.

  gt_data[] = lt_data[].

刚填充另一个表并将其内容分配给主表。