如何删除动态内表中segment列值为空的行?
动态内表删除SEGMENT列值为空行的解决方案
你的代码问题出在DATA(ls_dyn_table) = dy_table这行——dy_table是数据引用对象,不是结构体,没法直接用-segment访问字段。要处理动态内表的字段,得用字段符号动态绑定的方式来操作。
修正后的代码如下:
DATA: dy_table TYPE REF TO data. FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE, <fs_row> TYPE any, <fs_segment> TYPE any. IF ID = '1234'. me->method_that_import_desired_table( IMPORTING et_table = dy_table ). ASSIGN dy_table->* TO <dyn_table>. LOOP AT <dyn_table> ASSIGNING <fs_row>. " 动态绑定当前行的SEGMENT字段到字段符号 ASSIGN COMPONENT 'SEGMENT' OF STRUCTURE <fs_row> TO <fs_segment>. " 检查字段绑定是否成功(避免内表无SEGMENT列的情况) IF sy-subrc = 0 AND <fs_segment> IS INITIAL. " 删除当前行 DELETE <dyn_table> INDEX sy-tabix. ENDIF. ENDLOOP. ENDIF.
关键说明:
- 循环动态内表时,用
ASSIGNING <fs_row>获取当前行的字段符号,这是动态行的正确访问方式。 - 通过
ASSIGN COMPONENT 'SEGMENT' OF STRUCTURE <fs_row> TO <fs_segment>,动态将当前行的SEGMENT字段绑定到<fs_segment>,这样就能判断其值是否为空。 - 加入
sy-subrc检查,防止内表中不存在SEGMENT列时触发错误。 - 用
DELETE <dyn_table> INDEX sy-tabix直接删除当前行,实现过滤效果。
内容的提问来源于stack exchange,提问作者user14674462
相关产品推荐
相关产品推荐

