获取routing 组件分配的报表遇到的问题

探讨了在SAP系统中,Routing报表显示的站点分配与实际操作不符的问题。问题源于BOM变更后,PLMZ表中未更新的虚拟阶料号分配记录。通过深入分析SAP标准报表CA51及代码,引入kante字段比对,解决了报表不准确的问题。
摘要由CSDN通过智能技术生成

获取routing 组件分配的报表遇到的问题

  1.问题描述:

Routing站点assign情况如下:共有三个料号被分配了站点

但是Report获取的结果为:有6个料号被分配了站点

 

导致报表结果与实际routing不符。

   2.分析原因:

Table:PLMZ(Allocation of bill of material items to operations)内存储material和operation之间的分配关系。Table中根据bom item ID确定料号,根据task list node确定operation。

当BOM:A的下阶虚拟阶料号B被delete后又重新添加上,item ID发生变化。在这个过程中,routing的站点在B被删除后清空,即使B重新添加后料号不变,routing仍然不会恢复。

         在PLMZ中,只有在change routing界面里手动清空assign,或者对料号reassign时,PLMZ会有记录,对清空的或者reassign的记录打上删除标识。所以如果像上述操作一样直接change BOM,table中不会有任何更改,会保留原来的虚拟阶assign作为历史记录。

         程式通过展开的多阶BOM和获取的routing table进行比对,如果在routing table里可以找到料号,那么这个料号就有站点assign。

但是展开的A料号第一阶的时候B自己的item ID变了,展开虚拟阶B料号的时候,B的下阶俩号item ID却没有变化。通过function:CARO_ROUTING_READ获得的是所有routing的历史记录,如果二者对比,可以发现,总会在 routing table中找到本来已经消失了的routing 站点。所以结果就会出现本来没有分配站点的料号,找到了历史的assign,与实际不符。

  3.解决过程:

在测试过程中,每次change BOM的虚拟阶,再重新去routing assign后,发现table  PLMZ栏位KANTE的值会变化,考虑KANTE可能是关键字段,但是不清楚变化的逻辑。

首先查找到SAP有自己的标准报表CA51可以获取routing所有数据,通过查看t-code对应report(RCPDRK00)代码发现,SAP本身是在逻辑数据库LDB中获取数据后赋给相应内表的,获取数据的语句是get node或者 get node late,其中node是数据库节点,RCPDRK00源码中对应获取数据的语句为GET PLMZD.和GET PLMZN。

下一步是找到get PLMZ语句对应的逻辑,在report 代码界面点击标题栏中的goto—>attributes,查看属性中的logical database。

双击PNM进入逻辑数据库,画面如下,再点击source code查看源代码report:SAPDBPNM。

需要注意,SAPDBPNM虽然是report,但是并不能debug。

通过查看source code,得知get plmz的语句对应的form为 form put_plmz。其中展BOM的程式用到了一个很重要的function:CS_X4_NODE_DETERMINATION,这个函数用来计算routing组件分配的层次和路径(Path in exploded BOM tree),栏位为stb-nlink对应在PLMZ里面的字段就是kante,在原来程式的基础上增加对kante的比对,如果kante一致,则在routing内有assign。

 CALL FUNCTION 'CS_X4_NODE_DETERMINATION'
      EXPORTING
        i_stlty_w            = topmat-stlty
        i_stlnr_w            = topmat-stlnr
        i_stlal_w            = topmat-stlal
        i_flg_create_nodes   = ' '
        i_flg_node_for_class = 'X'
        i_flg_check_node     = ' '
        i_flg_special_class  = ' '
        i_flg_node_for_assem = ' '
        i_flg_calc_path2     = 'X'
        i_flg_calc_path4     = ' '
      TABLES
        stb                  = stb.  “需要在展BOM之后用这个function,因为stb里面需要有展开的下阶料的信息才能计算出nlink的值

问题解决。

 

Tips:原程式中展BOM用了两次CS_BOM_EXPL_MAT_V2,本来是为了考虑到,创建routing时,SAP会优先展P-BOM,如果选择E-BOM新建routing,虚拟阶会优先展P-BOM,过程即E—>P

但是在SAPDBPNM发现SAP只用了一次CS_BOM_EXPL_MAT_V2就可以解决这个问题。

CALL FUNCTION 'CS_BOM_EXPL_MAT_V2'
    EXPORTING
      aufsw                 = 'X'
      capid                 = pn_capid  “设置为PP01
      mdmps                 = 'X'
      mehrs                 = pn_mehrs “要设置‘X’才会展开虚拟阶
      datuv                 = pn_datuv
      mtnrv                 = mapl-matnr
      werks                 = mapl-werks
      stlal                 = stlal
      stlan                 = stlan “这个栏位决定了第一次展BOM的类型,如果是2,则先展E-BOM,之后再按照PP01的方式有P展P。
      mdnot                 = 'X'
      rndkz                 = '1'
    IMPORTING
      topmat                = topmat
      dstst                 = dstst
    TABLES
      stb                   = stb
    EXCEPTIONS
      alt_not_found         = 1
      call_invalid          = 2
      material_not_found    = 3
      missing_authorization = 4
      no_bom_found          = 5
      no_plant_data         = 6
      no_suitable_bom_found = 7
      OTHERS                = 8.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值