SAP APO CIF产品主数据发行

2020-09-16 21:45发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)尊敬的专家, 我遇到了一个...

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

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


尊敬的专家,

我遇到了一个当前似乎无法解决的问题,因此,我寻求您的帮助。

突触为清晰起见:

企业希望发生以下事情:

a)用户在ERP端的MM06交易中标记要删除的产品

b)之后,应立即在APO一侧将物料的LVORM(删除标志)设置为" X",将BESKZ(采购类型)设置为" P"。

我做了什么:

我通过在4种不同情况下在APO端跟踪入站队列来调试CIF和用户出口(我将这4种情况在下面用粗体斜体标出的两个存储桶中分块):

A)删除标记(LVORM)最初在APO和ERP端都设置为" X"

1)我在ERP端删除了删除标志,并立即在APO端也删除了它(很好,它是按这种方式设计的。)

2)我在ERP端更改物料的采购类型。 入站队列在SMQ2中形成,但是采购类型在APO中没有更改(即不被覆盖,可以,这是企业在用户出口中实现的逻辑)

B)删除标记(LVORM)最初在APO和ERP端都设置为" SPACE"

1) 我在ERP端更改物料的采购类型。 入站队列在SMQ2中形成,但是采购类型在APO中没有更改(即不被覆盖,可以,这是企业在用户出口中实现的逻辑)

2)我在物料的ERP端设置了删除标志,形成了入库队列,在APO端将LVORM设置为" X",但是采购类型未更改为" P"(不正确,与 预期结果)。


调试入站队列SMQ2显示,对于方案A1,A2,B1,在填充有值的队列区域内的传入结构IT_CIF_MATKEY,IT_CIF_MATKEYX,IT_CIF_MATLOC和IT_CIF_MATLOCX。

但是对于场景B2,队列内部的传入结构IT_CIF_MATLOC和IT_CIF_MATLOCX为空。 据我所知,这表明发生了严重错误,因为这些结构不应为空。


因此,问题是,由于用户未知,功能模块CIF_PROD_INBOUND在用户在ERP端设置删除标志时(即场景B2)将IT_CIF_MATLOC和IT_CIF_MATLOCX结构保留为空。

去解决这个问题? 这当然不是因为用户出口的源代码。
非常感谢您的建议和见解。

1条回答
土豆飞人
2020-09-16 22:05 .采纳回答

该解决方案似乎是基于it_matkey结构从APO的数据库表中获取所有数据,并分别填充cif_matloc和cif_matlocx结构。
下面是代码段,我很乐意收到有关如何对其进行优化的建议(我个人不喜欢嵌套SELECT语句的多个级别):

 FIELD-SYMBOLS:类型/sapapo/cif_matkey。

 数据:ls_cifmatmm06类型/sapapo/cif_matloc。
 数据:/sapapo/cif_matloc的lt_cifmatmm06类型表。
 数据:ls_vlocmat TYPE/sapapo/v_matloc。
 数据:ls_matmapmm06 TYPE/sapapo/matmap。
 数据:ls_matloc TYPE/sapapo/matloc。
 数据:ls_loc TYPE/sapapo/loc。
 数据:lv_length TYPE i。
 数据:ls_matlocx TYPE/sapapo/cif_matlocx。
 数据:/sapapo/cif_matlocx的lt_matlocx类型表。
 数据:lv_mm06_indicator TYPE c。

 如果it_matloc []是INITIAL。
     循环至it_matkey分配。
       如果 -method ='D'。
         lv_mm06_indicator ='X'。
         从/sapapo/matmap中选择* INTO ls_matmapmm06,其中ext_matnr =  -ext_matnr。
           选择*从/sapapo/v_matloc输入ls_vlocmat,其中matid = ls_matmapmm06-matid。
             选择*从/sapapo/matloc输入ls_matloc,其中matid = ls_matmapmm06-matid。
               SELECT * INTO ls_loc从/sapapo/loc,其中locid = ls_matloc-locid。

                 IF ls_loc-locno CS'SL'。
                   lv_length = STRLEN(ls_loc-locno)。
                   lv_length = lv_length-2。
                   ls_loc-locno = ls_loc-locno + 2(lv_length)。
                   清除lv_length。
                 万一。

                 将移动到ls_cifmatmm06。
                 将ls_matmapmm06移动到ls_cifmatmm06。
                 将ls_vlocmat移动到ls_cifmatmm06。
                 将ls_matloc移动到ls_cifmatmm06。
                 将ls_loc移动到ls_cifmatmm06。


                 ls_cifmatmm06-method ='D'。
                 ls_cifmatmm06-beskz ='P'。
                 ls_cifmatmm06-ext_locno = ls_loc-locno。
                 附录ls_cifmatmm06至lt_cifmatmm06。

                 ls_matlocx-method ='X'。
                 ls_matlocx-ext_matnr = ls_cifmatmm06-ext_matnr。
                 ls_matlocx-ext_locno = ls_cifmatmm06-ext_locno。
                 ls_matlocx-loctype = ls_cifmatmm06-loctype。
                 ls_matlocx-mtvfp ='X'。
                 ls_matlocx-chkhor ='X'。
                 ls_matlocx-calind ='X'。
                 ls_matlocx-bstfe ='X'。
                 ls_matlocx-bstmi ='X'。
                 ls_matlocx-bstma ='X'。
                 ls_matlocx-bstrf ='X'。
                 ls_matlocx-ausss ='X'。
                 ls_matlocx-rdprf ='X'。
                 ls_matlocx-svtty ='X'。
                 ls_matlocx-lgknd ='X'。
                 ls_matlocx-sl_lsz_exact ='X'。
                 ls_matlocx-sl_lsz_fixed ='X'。
                 ls_matlocx-sl_lsz_range ='X'。
                 ls_matlocx-vrmod ='X'。
                 ls_matlocx-vint1 ='X'。
                 ls_matlocx-vint2 ='X'。
                 ls_matlocx-sbdkz ='X'。
                 ls_matlocx-miskz ='X'。
                 ls_matlocx-grprt ='X'。
                 ls_matlocx-safty ='X'。
                 ls_matlocx-ekgrp ='X'。
                 ls_matlocx-beskz ='X'。
                 ls_matlocx-lgrad ='X'。
                 ls_matlocx-plifz ='X'。
                 ls_matlocx-erhor ='X'。
                 ls_matlocx-freiz ='X'。
                 追加ls_matlocx到lt_matlocx。
                 清除ls_cifmatmm06。
                 清除ls_matlocx。
                 清除ls_matmapmm06。
                 清除ls_vlocmat。
                 清除ls_locmat。
               ENDSELECT。
             ENDSELECT。
           ENDSELECT。
         ENDSELECT。
       万一。
     结局。

     将lt_cifmatmm06循环放入ls_cifmatmm06。
       如果ls_cifmatmm06-ext_matnr =''。
         删除lt_cifmatmm06索引sy-tabix。
       万一。
     结局。

     将lt_matlocx循环到ls_matlocx。
       如果ls_matlocx-ext_matnr =''。
         删除lt_matlocx索引sy-tabix。
       万一。
     结局。

     it_matloc [] = lt_cifmatmm06 []。
     it_matlocx [] = lt_matlocx []。

   ENDIF。

一周热门 更多>