委外采购申请或委外订单收货完成后,造成的MRP异常处理

由于SAP系统的委外倒冲,有时候会多冲(1PCS),造成MRP运算后异常,如图:

分析原因:

由于委外申请或委外订单所对应的预留单(表RESB)中提货数量大于需求数量造成的。

处理方法:

(1)当委外申请对应的预留单中提货数量大于需求数量时。

把委外申请单的结算标识勾选并保存即可,如图:

         

 通过程序批量处理(示意代码):

“找出所有有问题的采购申请

  SELECT
        eban~werks  "工厂
        eban~matnr  "物料
        eban~txz01  "物料描述
        eban~banfn  "采购申请
        eban~bnfpo  "行项目
        eban~bsart  "凭证类型
        eban~bstyp  "项目类别
        eban~loekz  "删除标识
        eban~frgkz  "审批状态
        eban~ekgrp  "采购组
        eban~badat  "采购申请创建日期
        eban~lfdat  "采购申请交货日期
        eban~frgdt  "采购申请批准日期
        eban~menge  "采购申请数量
        eban~lgort  "库位
      INTO CORRESPONDING FIELDS OF TABLE gt_itab
      FROM eban
      INNER JOIN RESB on eban~BANFN = RESB~BANFN AND eban~BNFPO = RESB~BNFPO
      WHERE eban~werks IN s_werks
        AND eban~matnr IN s_matnr
        AND eban~banfn IN s_banfn
        AND eban~bnfpo IN s_bnfpo
        AND RESB~matnr IN s_matnr1
        AND Pstyp = '3'  "项目类别
        AND loekz NE 'X' "删除标识
        AND ebakz NE 'X' "结算标识
        AND RESB~ENMNG > RESB~BDMNG "提货数量大于需求单

”循环处理有问题的委外采购申请

DATA:lt_return TYPE STANDARD TABLE OF bapireturn,
     ls_return TYPE bapireturn.

   FIELD-SYMBOLS : <FS_PR>    TYPE BAPIMEREQITEM .
       DATA : I_RETURN           TYPE  TABLE  OF BAPIRET2 ,
            K_PRITEMX          LIKE BAPIMEREQITEM ,
            I_PRITEM_GET       TYPE  TABLE  OF BAPIMEREQITEM ,
            I_PRITEM_GET_LINE  LIKE  LINE  OF I_PRITEM_GET ,
            I_PRITEMX          TYPE BAPIMEREQITEMX   OCCURS  0 ,
            IS_PRITEMX         TYPE BAPIMEREQITEMX ,
            I_PRITEM           TYPE  TABLE  OF BAPIMEREQITEMIMP ,
            I_PRITEM_LINE      LIKE  LINE  OF I_PRITEM ,
            I_SERVICES         TYPE  TABLE  OF BAPI_SRV_SERVICE_LINE ,
            I_SERVICES_LINE    LIKE  LINE  OF I_SERVICES ,
            I_SERVICESX        TYPE  TABLE  OF BAPI_SRV_SERVICE_LINEX ,
            I_SERVICESX_LINE   LIKE  LINE  OF I_SERVICESX ,
            K_RETURN           LIKE  LINE  OF I_RETURN,
*            LV_TABIX           LIKE SY-TABIX

            lv_number  LIKE  bapimereqheader-preq_no ,"Pr 单号
            l_flag TYPE c
             .

  LOOP AT gt_itab INTO gs_itab WHERE mark = 'X'.

            "获取PR 明细 并更新结算状态
           lv_number = gs_itab-banfn.
           CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
           EXPORTING
             input         = lv_number
           IMPORTING
             output        = lv_number.

           CALL  FUNCTION  'BAPI_PR_GETDETAIL' "获取明细
            EXPORTING
              NUMBER        =  lv_number
             SERVICES      =  'X'
            TABLES
              RETURN        = I_RETURN
             PRITEM        = I_PRITEM_GET
             SERVICELINES  = I_SERVICES .

             IF SY-SUBRC  =  0 .
               LOOP  AT I_PRITEM_GET  INTO I_PRITEM_GET_LINE .
                  I_PRITEM_GET_LINE-CLOSED  =  'X' .
                  I_PRITEM_GET_LINE-REQ_BLOCKED  =  '1' .
                  I_PRITEM_GET_LINE-REASON_BLOCKING  =  '尾量不需执行' .
*               If pr is locked clear deletion indicator to unlock it.
                   MOVE-CORRESPONDING I_PRITEM_GET_LINE  TO I_PRITEM_LINE .
                   IF I_PRITEM_LINE-DELETE_IND  =  'L' .
                     CLEAR  I_PRITEM_LINE-DELETE_IND .
                   ENDIF .
                  IS_PRITEMX-PREQ_ITEM  = I_PRITEM_LINE-PREQ_ITEM .
*                k_pritemx-delete_ind = 'X'.
                  IS_PRITEMX-PREQ_ITEMX  =  'X' .
                  IS_PRITEMX-CLOSED  =  'X' .
                  IS_PRITEMX-REQ_BLOCKED  =  'X' .
                  IS_PRITEMX-REASON_BLOCKING  =   'X' .
                   APPEND IS_PRITEMX  TO I_PRITEMX .
                   CLEAR  K_PRITEMX .
                   APPEND I_PRITEM_LINE  TO I_PRITEM .
                   CLEAR  I_PRITEM_LINE .
              ENDLOOP .
              CLEAR I_RETURN .



             CALL  FUNCTION  'BAPI_PR_CHANGE' "更新状态
              EXPORTING
                number         =  lv_number
              TABLES
                return         = I_RETURN
                pritem         = I_PRITEM
                pritemx        = I_PRITEMX
*               pritemtext = lt_pritemtext
               .
               IF Sy-subrc = 0.
                   CALL  FUNCTION  'BAPI_TRANSACTION_COMMIT'
                   EXPORTING
                   WAIT  =  'X' .
               ENDIF.

               LOOP AT I_RETURN INTO ls_return WHERE type = 'A'
                                           OR type = 'E'
                                           OR type = 'X'.

              ENDLOOP.

               IF sy-subrc = 0.
                  CONCATENATE gs_itab-MESSAGE '结算标识错误:' ls_return-message  INTO gs_itab-MESSAGE.
                  gs_itab-light = '@0A@'.
                  MODIFY gt_itab FROM gs_itab.
               ELSE.
                 gs_itab-light = '@08@'.
                 MODIFY gt_itab FROM gs_itab.
               ENDIF.

               Free : I_RETURN,I_PRITEM,I_PRITEMX.

          ENDIF.

    CLEAR gs_itab.
    CLEAR : lv_number.

ENDLOOP.

(2)委外订单对应的预留单中提货数量大于需求数量时。

      把相应的委外订单中“交货已完成”勾选(个别S4 Hana 有时间重复操作,即选取消勾选,保存,然后再勾选,再保存)

    通过程序批量找到相应的委外采购订单并处理

     SELECT
            EKKO~LIFNR  "供应商编号
            EKPO~matnr  "物料
            EKPO~txz01  "物料描述
            EKKO~BEDAT  "凭证日期
            EKKO~EBELN  "采购申请
            EKPO~EBELP  "行项目号
            EKKO~FRGKE  "审批标识
            EKPO~menge  "采购数量
            EKPO~MEINS   "采购单位
            EKPO~ELIKZ  "交货已经完成
            EKPO~werks  "交货工厂
            RESB~RSNUM   "预留单号
            RESB~RSPOS   "预留项目号
            RESB~BDMNG   "需求量
            RESB~ENMNG   "提货数量
            RESB~matnr  as matnr1 "预留物料
          INTO CORRESPONDING FIELDS OF TABLE gt_itab
          FROM EKKO
          INNER JOIN EKPO ON EKKO~EBELN = EKPO~EBELN
          INNER JOIN RESB on EKPO~EBELN = RESB~EBELN AND EKPO~EBELP = RESB~EBELP
          WHERE EKPO~werks IN s_werks
            AND EKPO~matnr IN s_matnr
            AND EKKO~EBELN IN s_EBELN
            AND EKPO~EBELP IN s_EBELP
            AND RESB~matnr IN s_matnr1
            AND EKPO~PSTYP = '3'  "项目类别
            AND EKPO~LOEKZ NE 'X' "删除标识
            AND EKPO~ELIKZ NE 'X'
            AND RESB~ENMNG > RESB~BDMNG "提货数量大于需求单

       全部查询出来之后,可以手工处理,也可通写程序处理,还可以通过事务码MASS批理处理。

最后,就可以看到效果如下:

     

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东莞寻香苑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值