使用循环过滤数据

2020-09-12 11:45发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我是aapap的新手,需要您的帮助。 我基本上是用导入参数客户编号(KUNNR)创建一个功能模块。 并返回8张桌子。

这是功能模块的源代码。

*" *"本地接口:
*"导入
*"值(客户)类型KUNNR
*"表
*" GT_VBAK结构VBAK
*" GT_VBAP结构VBAP < br> *" GT_LIKP结构LIKP
*" GT_LIPS结构LIPS
*" GT_VBRK结构VBRK
*" GT_VBRP结构VBRP
*" GT_VBAK2结构VBAK
*" GT_VBAP2结构 *" RETURN STRUCTURE BAPIRET2
*" ---------------------------------------- ------------------------------
数据:wa_return类型为bapiret2。
数据gs_vbak类型为vbak。
数据gs_vbap类型为vbap。
数据gs_vbak2类型为vbak。
数据gs_vbap2类型为vbap。
数据:gs_likp类型为likp。
数据gs_lips类型为lips。 gs_vbrp类型vbrp。
数据w_tabix类型sy-tabix。

从vbak
选择*到表gt_vbak
的相应字段中,其中vbak〜vbtyp ='B'或vbak〜vbtyp =' C'

vbak〜kunnr =客户。


从vbap
选择*到表gt_vbap的相应字段中。
*这有效
lo 在gt_vbak上操作到gs_vbak中。
将gs_vbak附加到gt_vbak2中。
如果gs_vbak-vbtyp ='B'。
删除gt_vbak,其中vbtyp ='C'。
endif。
在gt_vbak2中循环到 gs_vbak2。
如果gs_vbak2-vbtyp ='C'。
删除gt_vbak2其中vbtyp ='B'。
endif。
endloop。

endloop。

*过滤器vbap-vbeln必须等于vbak-vbeln。 它无法正常工作,它向我显示所有*不相同的vbeln在gt_vbak处循环到gs_vbak中。
在gt_vbap处循环到gs_vbap中。
W_TABIX = SY-TABIX。
如果gs_vbap-vbeln gs_vbak-vbeln。
删除gt_vbap索引w_tabix。
endif。

endloop。
endloop。



从vbap选择* 进入表gt_vbap2的相应字段中。

在gt_vbak2处循环到gs_vbak2中。在gt_vbap2处循环到gs_vbap2中。",其中vbeln eq gs_vbak2-vbeln。
将表gt_vbap2读入gs_vbap2中 = gs_vbak-vbeln。
如果sy-subrc ne 0.
删除gt_vbap2。
endif。
W_TABIX = SY-TABIX。

从gs_vbap2索引w_tabix修改gt_vbap2。 >
endloop。
endloop。


从likp
中选择*到表gt_likp
的相应字段中,其中kunnr = customer。

从*中选择* 嘴唇
进入表gt_lips的相应字段。

循环gt_likp进入gs_likp。
循环gt_lips进入gs_lips。
如果gs_lips-vbeln与gs_likp-vbeln 。
删除gt_lips。
endif。
endloop。
endloop。


从vbrk
选择*到表gt_vbrk
的相应字段中,其中kunag = 客户。


从vbrp
中选择*到表gt_vbrp的对应字段中。

在gt_vbrk处循环到gs_vbrk。
在gt_vbrp处循环到gs_vbrp。
gs_vbrp-vbeln和gs_vbrk-vbeln。
删除gt_vbrp。
endif。
endloop。
endloop。

基本上,我需要一种方法来过滤vbap中的vbeln等于vbak中的vbeln的记录。

我该如何实现?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我是aapap的新手,需要您的帮助。 我基本上是用导入参数客户编号(KUNNR)创建一个功能模块。 并返回8张桌子。

这是功能模块的源代码。

*" *"本地接口:
*"导入
*"值(客户)类型KUNNR
*"表
*" GT_VBAK结构VBAK
*" GT_VBAP结构VBAP < br> *" GT_LIKP结构LIKP
*" GT_LIPS结构LIPS
*" GT_VBRK结构VBRK
*" GT_VBRP结构VBRP
*" GT_VBAK2结构VBAK
*" GT_VBAP2结构 *" RETURN STRUCTURE BAPIRET2
*" ---------------------------------------- ------------------------------
数据:wa_return类型为bapiret2。
数据gs_vbak类型为vbak。
数据gs_vbap类型为vbap。
数据gs_vbak2类型为vbak。
数据gs_vbap2类型为vbap。
数据:gs_likp类型为likp。
数据gs_lips类型为lips。 gs_vbrp类型vbrp。
数据w_tabix类型sy-tabix。

从vbak
选择*到表gt_vbak
的相应字段中,其中vbak〜vbtyp ='B'或vbak〜vbtyp =' C'

vbak〜kunnr =客户。


从vbap
选择*到表gt_vbap的相应字段中。
*这有效
lo 在gt_vbak上操作到gs_vbak中。
将gs_vbak附加到gt_vbak2中。
如果gs_vbak-vbtyp ='B'。
删除gt_vbak,其中vbtyp ='C'。
endif。
在gt_vbak2中循环到 gs_vbak2。
如果gs_vbak2-vbtyp ='C'。
删除gt_vbak2其中vbtyp ='B'。
endif。
endloop。

endloop。

*过滤器vbap-vbeln必须等于vbak-vbeln。 它无法正常工作,它向我显示所有*不相同的vbeln在gt_vbak处循环到gs_vbak中。
在gt_vbap处循环到gs_vbap中。
W_TABIX = SY-TABIX。
如果gs_vbap-vbeln gs_vbak-vbeln。
删除gt_vbap索引w_tabix。
endif。

endloop。
endloop。



从vbap选择* 进入表gt_vbap2的相应字段中。

在gt_vbak2处循环到gs_vbak2中。在gt_vbap2处循环到gs_vbap2中。",其中vbeln eq gs_vbak2-vbeln。
将表gt_vbap2读入gs_vbap2中 = gs_vbak-vbeln。
如果sy-subrc ne 0.
删除gt_vbap2。
endif。
W_TABIX = SY-TABIX。

从gs_vbap2索引w_tabix修改gt_vbap2。 >
endloop。
endloop。


从likp
中选择*到表gt_likp
的相应字段中,其中kunnr = customer。

从*中选择* 嘴唇
进入表gt_lips的相应字段。

循环gt_likp进入gs_likp。
循环gt_lips进入gs_lips。
如果gs_lips-vbeln与gs_likp-vbeln 。
删除gt_lips。
endif。
endloop。
endloop。


从vbrk
选择*到表gt_vbrk
的相应字段中,其中kunag = 客户。


从vbrp
中选择*到表gt_vbrp的对应字段中。

在gt_vbrk处循环到gs_vbrk。
在gt_vbrp处循环到gs_vbrp。
gs_vbrp-vbeln和gs_vbrk-vbeln。
删除gt_vbrp。
endif。
endloop。
endloop。

基本上,我需要一种方法来过滤vbap中的vbeln等于vbak中的vbeln的记录。

我该如何实现?

付费偷看设置
发送
2条回答
wang628962
1楼-- · 2020-09-12 12:38

选择*可能会导致性能问题,请选择相应的条件,在没有条件的情况下选择……等等,所以我建议您首先检查代码,首先要检查需求。

第二,您的想法太复杂了 。 我想您的要求是从vbap和vbak获取数据,每个vbtyp = B,vbtyp = C到对应的输出表。 我可以建议您这样做:

选择VBAK〜*,VBAP〜* FROM vbak
  内连接vbap ON(vbak〜vbeln = vbap〜vbeln)
  在哪里vbak〜vbtyp IN('B','C')到表@DATA(lt_all)中。

 循环至lt_all INTO DATA(ls_all)。
  如果ls_all-vbak-vbtyp ='C'。
  附加ls_all-vbak到gt_vbak。
  将ls_all-vbap附加到gt_vbap。
  万一。

 结局。
 通过vbeln排序gt_vbak。
 从lt_vbak删除相邻的重复项。
Cikesha
2楼-- · 2020-09-12 12:36

您好,Rachid,您必须将第二个循环的条件放在哪里。 但是从上面的代码中,我不认为您正在基于标头数据检索项目数据。

1。 不需要,并且所有条目都可以从VBAP数据中获取数据

从vbak选择*
 进入表gt_vbak
 其中(vbtyp ='B'或vbtyp ='C')和kunnr =客户。
 如果sy-subrc = 0。
 *删除不需要进一步处理的订单。
   删除gt_vbak,其中vbtyp ='C'或vbtyp ='B'。
 *获取销售项目数据
   如果gt_vbak不是初始的。
     从vbap选择*
     进入表gt_vbap
     对于gt_vbak中的所有条目
     其中vbeln = vbak-vbeln。
   万一。
 endif。

2。不确定为什么要使用另一个内部表GT_VBAK2。

并根据上述销售订单获取交货数据。此处无需LOOP语句。

一周热门 更多>

点击此处---> EasySAP.com 一起学习S4 HANA ...

相关问答