生产工单收货控制增强

生产工单收货控制增强

2017年06月16日 22:13:28 kidy_zhang 阅读数:689

 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kidy_zhang/article/details/73352722

对于生产工单完工收货(migo+101),我作为ABAP人员通过对日常业务了解。总结以下几种情况可以通过增强方式进行控制。

1、收货时未报工。

2、未投料就有产出。

3、在全部收货时判断贵重A类物料是否按工单组件要求进行投料(A类物料需要在主数据MRP视图中设置)。

具体开发部署如下:

1、通过CMOD事务代码,引入出口增强。增强点如下。

2、收货时未报工的代码。

    DATA:TMPOBJNR TYPE aufk-objnr.

    DATA:i_jest LIKE jest OCCURS  0 WITH HEADER LINE .

  IF  i_mseg-aufnr IS NOT INITIAL AND  i_mseg-bwart = '101' AND i_mseg-ebeln IS INITIAL .

      SELECT SINGLE
         aufk~objnr
        INTO TMPOBJNR
        FROM AUFK
        WHERE AUFK~AUFNR = i_mseg-AUFNR AND AUFK~WERKS = i_mseg-WERKS.

          SELECT *  FROM jest
            INTO CORRESPONDING FIELDS OF TABLE i_jest
            WHERE objnr = TMPOBJNR.
            SORT i_jest .
            DELETE i_jest WHERE  ( stat <> 'I0009' AND inact = space ) or inact = 'X'.
            IF i_jest[] is INITIAL.
                  MESSAGE '报工未完成,无法收最后一次货!' TYPE 'I'.
            ENDIF.

ENDIF

3、未投料就有产出

 IF  i_mseg-aufnr IS NOT INITIAL AND  i_mseg-bwart = '101' AND i_mseg-ebeln IS INITIAL .

    SELECT  AUFNR MBLNR BUDAT BWART RSNUM RSPOS  MATNR WERKS LGORT ERFME SHKZG  ERFMG  EBELP EBELN
      INTO  CORRESPONDING FIELDS OF TABLE LTD_AUFM
      FROM AUFM
      WHERE AUFNR = i_mseg-aufnr AND BWART  in ('261','262').
    IF SY-SUBRC = 0.

    ELSE.
        MESSAGE '生产订单没有投料' TYPE 'E'.
    ENDIF.

ENDIF

4、工单收货时对贵重物料投料控制

DATA: BEGIN OF PRODNO_COLUMN,
    AUFNR LIKE RESB-AUFNR,
    RSNUM LIKE RESB-RSNUM,
    RSPOS LIKE RESB-RSPOS,
    WERKS LIKE RESB-WERKS,
    MATNR LIKE RESB-MATNR,
    BDMNG LIKE RESB-BDMNG,
    MAABC LIKE MARC-MAABC,
END OF PRODNO_COLUMN.
DATA:TAB_PRODPOCOLUMN LIKE PRODNO_COLUMN OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF PRODNO_COLUMNTOT,
    AUFNR LIKE RESB-AUFNR,
    WERKS LIKE RESB-WERKS,
    MATNR LIKE RESB-MATNR,
    BDMNG LIKE RESB-BDMNG,
    MAABC LIKE MARC-MAABC,
    ERFMG LIKE AUFM-ERFMG,
END OF PRODNO_COLUMNTOT.
DATA:TAB_PRODPOCOLUMNTOT LIKE PRODNO_COLUMNTOT OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF AUFMDTL,
    AUFNR LIKE AUFM-AUFNR,
    WERKS LIKE AUFM-WERKS,
    MATNR LIKE AUFM-MATNR,
    RSPOS LIKE AUFM-RSPOS,
    RSNUM LIKE AUFM-RSNUM,
    MAABC LIKE MARC-MAABC,
    ERFMG LIKE AUFM-ERFMG,
    SHKZG LIKE AUFM-SHKZG,
END OF AUFMDTL.
DATA:TAB_AUFMDTL LIKE AUFMDTL OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF AUFMTOT,
    AUFNR LIKE AUFM-AUFNR,
    WERKS LIKE AUFM-WERKS,
    MATNR LIKE AUFM-MATNR,
    MAABC LIKE MARC-MAABC,
    ERFMG LIKE AUFM-ERFMG,
END OF AUFMTOT.
DATA:TAB_AUFMTOT LIKE AUFMTOT OCCURS 0 WITH HEADER LINE.

DATA:L_ERFMGSTR TYPE CHAR20,
     L_BDMNGSTR TYPE CHAR20.

IF  i_mseg-aufnr IS NOT INITIAL AND  i_mseg-bwart = '101' AND i_mseg-ebeln IS INITIAL .

             SELECT resb~aufnr resb~werks resb~matnr resb~BDMNG marc~maabc resb~rsnum resb~RSPOS
              into CORRESPONDING FIELDS OF TABLE TAB_PRODPOCOLUMN
              FROM resb INNER JOIN marc on resb~werks = marc~werks AND resb~matnr = marc~matnr
              WHERE AUFNR = i_mseg-aufnr AND MARC~MAABC = 'A'.
           IF SY-SUBRC = 0 .   "求出组件是否有A类物料
                LOOP AT TAB_PRODPOCOLUMN.
                      MOVE-CORRESPONDING TAB_PRODPOCOLUMN TO TAB_PRODPOCOLUMNTOT.
                      COLLECT TAB_PRODPOCOLUMNTOT.
                ENDLOOP.
              "物料移动记录
                 SELECT AUFM~WERKS AUFM~MATNR AUFM~ERFMG AUFM~SHKZG AUFM~RSPOS AUFM~RSNUM AUFM~AUFNR
                   INTO CORRESPONDING FIELDS OF TABLE TAB_AUFMDTL
                   FROM AUFM
                   FOR ALL ENTRIES IN TAB_PRODPOCOLUMNTOT
                   WHERE AUFNR = TAB_PRODPOCOLUMNTOT-aufnr AND WERKS = TAB_PRODPOCOLUMNTOT-WERKS AND MATNR = TAB_PRODPOCOLUMNTOT-MATNR.
                  IF SY-SUBRC = 0.
                      LOOP AT TAB_AUFMDTL.
                            IF TAB_AUFMDTL-SHKZG = 'H'.
                                TAB_AUFMDTL-ERFMG = 0 - TAB_AUFMDTL-ERFMG.
                            ENDIF.
                            MOVE-CORRESPONDING TAB_AUFMDTL TO TAB_AUFMTOT.
                            COLLECT TAB_AUFMTOT.
                      ENDLOOP.
                  ENDIF.
                  LOOP AT TAB_PRODPOCOLUMNTOT.
                      READ TABLE TAB_AUFMTOT WITH  KEY  WERKS = TAB_PRODPOCOLUMNTOT-WERKS MATNR = TAB_PRODPOCOLUMNTOT-MATNR AUFNR = TAB_PRODPOCOLUMNTOT-AUFNR .
                      IF SY-SUBRC = 0 .
                      IF TAB_PRODPOCOLUMNTOT-BDMNG <> 0 - TAB_AUFMTOT-ERFMG.
                            L_BDMNGSTR =  TAB_PRODPOCOLUMNTOT-BDMNG.
                            L_ERFMGSTR =   0 - TAB_AUFMTOT-ERFMG.
                            CONDENSE L_BDMNGSTR NO-GAPS .
                            CONDENSE L_ERFMGSTR NO-GAPS .
                            CONCATENATE 'A类物料编码:' TAB_PRODPOCOLUMNTOT-MATNR '投料异常!需求总量【' L_BDMNGSTR '】,但实际领用【' L_ERFMGSTR '】' INTO i_message.
                            MESSAGE i_message TYPE 'E'.
                      ENDIF.
                      ENDIF.
                  ENDLOOP.
            ELSE.  "没有A类物料的情况。
            endif.

ENDIF.

最后,在作增强控制时。需要作好测试,并激活相应的改动。还有一点,在作一些组件的计算及投料判断时,可能带来过帐保存时间的消耗等等。当然学习还在继续、问题肯定不断。在战争中学习战争,慢慢找出道路,我一直在路上。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值