SAP 生产订单创建时增强控制,判断物料是否发布价格及BOM用途与订单类型是否匹配

SAP 生产订单创建时增强控制,判断物料是否发布价格及BOM用途与订单类型是否匹配。
1、在创建生产订单的时候判断物料是否存在标准成本,如果不存在标准成本则报错,同时判断物料的BOM用途是否与订单类型是否匹配,如BOM不匹配则不允许创建订单

2、找到出口,可以通过后台查找的方式,或者通过百度的方式都可以找到出口。

在这里插入图片描述
2、使用事物代码:CMOD
在这里插入图片描述
创建一个增强出口的项目,然后点击增强分配
在这里插入图片描述
将PPCO00006分配上去,
在这里插入图片描述
然后点击组件,双击功能出口
在这里插入图片描述
然后在双击程序:ZXCOZU03
在这里插入图片描述
然后在程序中编写代码
在这里插入图片描述
以下是增强的代码:

IF SY-TCODE = 'COR1’OR SY-TCODE = 'COR7’OR SY-TCODE = ‘COR8’.

DATA:
BEGIN OF L_MATNR,
MATNR LIKE MBEW-MATNR, "物料号
VPRSV LIKE MBEW-VPRSV, "价格控制指示符
VJVPR LIKE MBEW-VJVPR, "前一年的价格控制标识
PPRDL LIKE MBEW-PPRDL, "当前的标准成本估算期间
LPLPR LIKE MBEW-LPLPR, "当前的计划价格

  •      KZKFG LIKE MARA-KZKFG,  可配置的物料
    

    END OF L_MATNR.

    DATA:LWK_STA TYPE KEKO-FEH_STA,
    LWK_STR TYPE STRING.

    SELECT SINGLE MATNR VPRSV VJVPR PPRDL LPLPR FROM MBEW INTO L_MATNR
    WHERE MATNR = CAUFVD_IMP-MATNR
    AND BWKEY = CAUFVD_IMP-WERKS. " 将MBEW表中匹配的物料号等字段写入结构表L_matnr。

    IF L_MATNR-VPRSV <>‘V’."价格控制指示符=移动价
    DATA:LS_STPRS TYPE MBEW-STPRS.
    SELECT SINGLE FEH_STA FROM KEKO INTO LWK_STA
    WHERE KALKA = ‘01’
    AND BWVAR = ‘Z01’
    AND MATNR = CAUFVD_IMP-MATNR
    AND WERKS = CAUFVD_IMP-WERKS
    AND FEH_STA IN (‘VO’,‘FR’).
    IF SY-SUBRC <> 0.
    SELECT SINGLE STPRS INTO LS_STPRS FROM MBEW WHERE MATNR = CAUFVD_IMP-MATNR AND BWKEY = CAUFVD_IMP-WERKS.
    IF LS_STPRS is INITIAL.
    MESSAGE E888(SABAPDOCU) WITH ‘物料’ CAUFVD_IMP-MATNR ‘没有做成本估算,不能创建流程订单,请联系财务发布标准成本!’.
    ENDIF.
    ENDIF.
    ENDIF.
    ENDIF.
    "创建生产订单时只允许下采购类型为E、X
    IF SY-TCODE = 'COR1’OR SY-TCODE = 'COR7’OR SY-TCODE = ‘COR8’.
    DATA:LS_MARC TYPE MARC,
    LS_MKAL TYPE MKAL,
    LS_MAPL TYPE MAPL,
    LS_MAST TYPE MAST,
    LV_MSG TYPE STRING.
    CLEAR: LS_MARC,LV_MSG,LS_MKAL,LS_MAST.
    SELECT SINGLE * INTO LS_MARC FROM MARC WHERE MATNR = CAUFVD_IMP-MATNR AND WERKS = CAUFVD_IMP-WERKS.
    SELECT SINGLE * INTO LS_MKAL FROM MKAL WHERE MATNR = CAUFVD_IMP-MATNR AND WERKS = CAUFVD_IMP-WERKS.
    SELECT SINGLE * INTO LS_MAPL FROM MAPL WHERE MATNR = CAUFVD_IMP-MATNR AND WERKS = CAUFVD_IMP-WERKS AND PLNTY = ‘2’…
    SELECT SINGLE * INTO LS_MAST FROM MAST WHERE MATNR = CAUFVD_IMP-MATNR AND WERKS = CAUFVD_IMP-WERKS.

    IF LS_MARC-BESKZ <> ‘E’ AND LS_MARC-BESKZ <> ‘X’.
    CONCATENATE ‘物料主数据中采购类型设置错误!’ ‘’ INTO LV_MSG.
    ENDIF.

    IF LS_MKAL-MATNR IS INITIAL.
    CONCATENATE LV_MSG ‘没有生产版本!’ INTO LV_MSG.
    ELSE.
    "生产版本
    IF LS_MKAL-VERID IS INITIAL.
    CONCATENATE LV_MSG ‘请检查物料的生产版本!’ INTO LV_MSG.
    ENDIF.
    "可选的BOM
    IF LS_MAST-STLAL IS INITIAL OR LS_MAST-STLAN IS INITIAL.
    CONCATENATE LV_MSG ‘请检查物料BOM!’ INTO LV_MSG.
    ENDIF.
    "任务清单类型
    IF LS_MAPL-PLNTY IS INITIAL OR LS_MAPL-PLNNR IS INITIAL.
    CONCATENATE LV_MSG ‘请检查物料的主配方!’ INTO LV_MSG.
    ENDIF.
    ENDIF.

    IF LV_MSG IS NOT INITIAL.
    MESSAGE LV_MSG TYPE ‘E’.
    EXIT.
    ENDIF.

ENDIF.

IF SY-TCODE = 'COR1’OR SY-TCODE = 'COR7’OR SY-TCODE = ‘COR8’.
DATA:
LA_MAST TYPE MAST,
LA_MSG TYPE STRING.
CLEAR: LA_MAST.
SELECT SINGLE * INTO LA_MAST FROM MAST WHERE MATNR = CAUFVD_IMP-MATNR AND WERKS = CAUFVD_IMP-WERKS.

IF LA_MAST-STLAN = ‘3’ AND CAUFVD_IMP-AUART <> ‘ZP03’.
CONCATENATE LA_MSG ‘BOM用途是3与生产订单类型ZP03不匹配请检查!’ INTO LA_MSG.
ELSEIF LA_MAST-STLAN = ‘1’ AND CAUFVD_IMP-AUART <> ‘ZP01’.
CONCATENATE LA_MSG ‘BOM用途是1与生产订单类型ZP01不匹配请检查!’ INTO LA_MSG.
ELSEIF LA_MAST-STLAN = ‘2’ AND CAUFVD_IMP-AUART <> ‘ZP02’.
CONCATENATE LA_MSG ‘BOM用途是2与生产订单类型ZP02不匹配请检查!’ INTO LA_MSG.
ENDIF.

  IF LA_MSG IS  NOT INITIAL.
MESSAGE LA_MSG TYPE 'E'.
EXIT.

ENDIF.
ENDIF.

ENDIF.

写在最后,程序后出口都要激活。出口不激活的话增强是不生效的。
在这里插入图片描述

写于:深圳大鹏

20230330

猜你喜欢

转载自blog.csdn.net/u014469625/article/details/129860088