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