首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除内部表中id与行号不同的DDIC表记录?

如何删除内部表中id与行号不同的DDIC表记录?
EN

Stack Overflow用户
提问于 2019-11-14 07:11:28
回答 1查看 798关注 0票数 0

我有两排的ALV。我还想删除内部表和字典表中的这些行。为了获得我选择的alv中的哪些行,我使用了一个方法

代码语言:javascript
复制
go_selections = go_salv->get_selections( ).
go_rows = go_selections->get_selected_rows( )

最近,我正在迭代结果LOOP AT go_rows INTO gv_row.

在上面的循环中,我有另一个循环,它将数据从内部表存储到工作区。然后,设置计数器变量,该变量保存字典表的id,并删除各自的行。

代码语言:javascript
复制
LOOP AT gr_data INTO lr_znewfdkey6.
     counter2 = lr_znewfdkey6-id.
              IF counter2 EQ gv_row.
                DELETE FROM znew_fdkey01 WHERE id EQ lr_znewfdkey6-id.
                MESSAGE 'Row deleted .' TYPE 'I'.

但是不幸的是,只有当字典表的id等于在alv中选择的行号时,这才有效。如果字典表中有lr_znewfdkey6-id (例如等于5 ),则get_selected_rows( )返回由1开始的值等,这将导致不平等。

怎么解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-11-14 14:16:15

获取选定的行返回行号表。

代码语言:javascript
复制
lt_rows = lo_selections->get_selected_rows( ).

这些数字直接对应于加载到ALV中的itab。不管它是被分类还是过滤过。它不对应于数据库中的任何字段,比如ID字段或其他任何字段。

假设gr_data是分配给ALV的itab。让我们循环lt_rows并在索引处读取gr_data

代码语言:javascript
复制
  LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<row>).
    READ TABLE gr_data INTO ls_data INDEX <row>.
    IF sy-subrc = 0.
      APPEND ls_data TO lt_selected.
    ENDIF.
  ENDLOOP.

执行后,将将选定的gr_data行收集到lt_selected itab中。删除

代码语言:javascript
复制
LOOP AT lt_selected ASSIGNING FIELD-SYMBOL(<row>).
   DELETE TABLE gr_data FROM <row>.
ENDLOOP.

你也可以简单地做:

代码语言:javascript
复制
  LOOP AT lt_rows ASSIGNING FIELD-SYMBOL(<row>).
    DELETE gr_data INDEX <row>.
  ENDLOOP.

在那之后刷新你的ALV。应该是好的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58851247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档