2020-08-14 09:14发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
如果我要删除一个内部表中的所有条目(基于一个字段,而另一个内部表中的条目不存在),该怎么做。
你好
请检查以下代码:
将gt_itab1循环到gs_itab1。
使用表键将gt_itab2读入gs_itab2 mandt = gs_itab1-mandt
lifnr = gs_itab1-lifnr
vbeln = gs_itab1-vbeln
posnr = gs_itab1-posnr
augru = gs_itab1-augru
cdate = gs_itab1-cdate
kunnr = gs_itab1-kunnr
kunwe = gs_itab1-kunwe
bstkd = gs_itab1-bstkd
docid = gs_itab1-docid
ean11 = gs_itab1-ean11
part_debit = gs_itab1-part_debit
errcode = gs_itab1-errcode。
IF sy-subrc EQ gc_zero_num。
将gs_itab2移动到gs_error1。
gs_error1-message = text-036。
将gs_error1附加到gt_error1。
清除gs_error1。
从gs_itab2删除表gt_itab2。
ENDIF。
ENDLOOP。
致谢
Kannaiah
嗨,
在循环内删除可能会导致性能问题。 相反,您可以使用字段符号。
Itab1-您要从中删除
itab2-检查表。
field1-比较字段
使用以下代码:
FIELD-SYMBOLS:喜欢itab1。
在itab1分配上循环。用密钥field1 = -field1将表itab2读入wa_itab2。如果sy-subrc NE 0. 清除:- 字段1。 ENDIF。清除:wa_itab2。 ENDLOOP。删除itab1字段1的初始位置。
说两个 int表ITAB1和ITAB2。
两者都有一些共同的字段。
在ITAB1`循环。
用键f1 = itab1-f1读取表itab2。/p>
,如果sy-subrc <> 0。
删除itab1索引sy-tabix。
endif。
endloop。
删除ITAB1中所有不像ITAB2一样的条目,
奖励(如果有用)
问候
安吉
您好,Nikhil,
考虑到性能,您也可以执行以下操作:
对要执行检查的字段将要删除的表进行排序。
按要在其上进行检查的字段对要检查的表进行排序。
然后
LOOP AT 。
读取 表与键 = -不传输任何字段。
如果SY-SUBRC <> 0。
删除其中 = -。/p> ENDIF。 ENDLOOP。 如果是表中的第一个字段,那么您还可以在循环中执行逻辑 在NEW .... ENDAT事件中,以提高性能(减少冗余循环的数量)。 希望这会有所帮助。 关于此, Aditya
如果是表中的第一个字段,那么您还可以在循环中执行逻辑 在NEW .... ENDAT事件中,以提高性能(减少冗余循环的数量)。
希望这会有所帮助。
关于此,
Aditya
不要以为删除循环是性能问题。 还有其他方法吗?
下面是一个示例:
只需循环遍历第一个itab,然后检查itab2是否 如果没有,则在itab1中包含相同的条目,然后删除。
希望这对您有帮助...
PS 请奖励积分以获取有用的答案...
消息的编辑者:
viraylab
您好,
如果要考虑两个表itab1和itab2
用键itab2-field1 = itab1-field1和itab2-field2 = itab1-field2读取表itab2。
如果sy-subrc EQ 0,
删除itab2,条件是.....。
Endif。
谢谢..
最多设置5个标签!
你好
请检查以下代码:
将gt_itab1循环到gs_itab1。
使用表键将gt_itab2读入gs_itab2 mandt = gs_itab1-mandt
lifnr = gs_itab1-lifnr
vbeln = gs_itab1-vbeln
posnr = gs_itab1-posnr
augru = gs_itab1-augru
cdate = gs_itab1-cdate
kunnr = gs_itab1-kunnr
kunwe = gs_itab1-kunwe
bstkd = gs_itab1-bstkd
docid = gs_itab1-docid
ean11 = gs_itab1-ean11
part_debit = gs_itab1-part_debit
errcode = gs_itab1-errcode。
IF sy-subrc EQ gc_zero_num。
将gs_itab2移动到gs_error1。
gs_error1-message = text-036。
将gs_error1附加到gt_error1。
清除gs_error1。
从gs_itab2删除表gt_itab2。
ENDIF。
ENDLOOP。
致谢
Kannaiah
嗨,
在循环内删除可能会导致性能问题。 相反,您可以使用字段符号。
Itab1-您要从中删除
itab2-检查表。
field1-比较字段
使用以下代码:
FIELD-SYMBOLS:喜欢itab1。
在itab1分配上循环。 -field1将表itab2读入wa_itab2。- 字段1。
用密钥field1 =
如果sy-subrc NE 0.
清除:
ENDIF。
清除:wa_itab2。
ENDLOOP。
删除itab1字段1的初始位置。
嗨,
说两个 int表ITAB1和ITAB2。
两者都有一些共同的字段。
在ITAB1`循环。
用键f1 = itab1-f1读取表itab2。/p>
,如果sy-subrc <> 0。
删除itab1索引sy-tabix。
endif。
endloop。
删除ITAB1中所有不像ITAB2一样的条目,
奖励(如果有用)
问候
安吉
# p#您好,Nikhil,
考虑到性能,您也可以执行以下操作:
对要执行检查的字段将要删除的表进行排序。
按要在其上进行检查的字段对要检查的表进行排序。
然后
LOOP AT。
读取 表与键 = -不传输任何字段。
如果SY-SUBRC <> 0。
删除其中 = -。/p>
ENDIF。
ENDLOOP。
如果是表中的第一个字段,那么您还可以在循环中执行逻辑 在NEW .... ENDAT事件中,以提高性能(减少冗余循环的数量)。
希望这会有所帮助。
关于此,
Aditya
不要以为删除循环是性能问题。 还有其他方法吗?
嗨,
下面是一个示例:
只需循环遍历第一个itab,然后检查itab2是否 如果没有,则在itab1中包含相同的条目,然后删除。
希望这对您有帮助...
PS 请奖励积分以获取有用的答案...
消息的编辑者:
viraylab
您好,
如果要考虑两个表itab1和itab2
用键itab2-field1 = itab1-field1和itab2-field2 = itab1-field2读取表itab2。
如果sy-subrc EQ 0,
删除itab2,条件是.....。
Endif。
谢谢..
一周热门 更多>