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