业务需求背景:
某集团性制造企业,拥有超过20个生产基地,物料种类繁多。该集团在SAP系统(ECC版本)创建了180万+物料,物料组7400+个,物料类型25个。参考物料的物料类型分类,采购申请凭证类型定义了18种,采购订单凭证类型定义了25种。现在,客户希望实现在创建采购凭证时,实现物料分类与凭证类型的匹配,方便采购凭证的细化管理。
例1:物料类型
XZ1 行政用品-存货
XZ2 行政用品-费用
SH 服务-售后
SK 售后-客供料
BF 报废物料
CJ 筹建物料
EI 工程-费用
EQ 资产设备
FL 辅料
MC 客供料
MD 原材料
MG 成品
MPN 制造商零件
MS 半成品
........
例2:采购申请凭证类型
XZ 行政
SH 售后
CJ 筹建
EI 工程
EQ 设备
FL 辅料
MC 客供料
MD 原材料
MG 成品
MS 半成品
........
功能需求分析:
在SAP标准功能中,在物料类型层级,没有直接可以实现与凭证类型关联的配置。如果要实现该需求,需要进行功能定制。实现路径梳理如下:

功能实现方案:
1、限制范围确认
集团性企业,可以按照公司代码维度进行自主配置;
2、物料与凭证类型关系建立
通过物料类型与凭证类型建立关系;
3、校验节点确认
PR凭证创建时,系统进行物料分类与订单类型匹配校验;
4、输出结果
如果校验到行项目输入的物料对应的物料类型与关系表匹配的订单类型不一致,则输出报错消息; 如果校验到行项目输入的物料对应的物料类型与关系表匹配的订单类型一致,则正常创建PR;
5、实现方案
1)创建物料类型与订单类型配置表(例如:ZTMM001)
基础表字段:公司代码、采购凭证类型、物料类型
|------------|-------|--------|-------|
| 字段名称 | 公司代码 | 采购凭证类型 | 物料类型 |
| 技术字段名称 | BUKRS | BSART | MTART |
2)创建消息号(例如:ZPR001)
|---------|----------|---------------------------------|
| 消息类 | 消息编号 | 消息短文本 |
| ZPR | 001 | 项目00* 输入物料对应的物料类型与订单类型不匹配,请检查! |
3)程序逻辑
* 从物料主表MARA中找到该物料的物料类型MTART
CLEAR lv_i_mtart.
SELECT SINGLE matart
INTO lv_i_mtart
FROM mara
WHERE matnr = lw_item-matnr.
*从行项目的工厂代码获取公司代码
CLEAR l_bwkey.
SELECT SINGLE bwkey
INTO l_bwkey
FROM t001m
WHERE werks = lw_item-werks.
IF sy_subrc = 0.
CLEAR l_bukrs.
SELECT SINGLE bukrs
INTO l_bukrs
FROM t001k
WHERE bwkey = l_bwkey.
ENDIF.
* 以公司代码+该物料的物料类型+该订单的订单类型,到ZTMM001中检索是否存在记录
* 存在则说明匹配;不存在,则要报错:项目00* 输入物料对应的物料类型与订单类型不匹配,请检查!
CLEAR ls_ztmm.
SELECT SINGLE mtart
INTO ls_ztmm
FROM ztmm001
WHERE bukrs = l_bukrs.
AND bsart = ls_hearder-bsart
AND mtart = lv_i_mtart.
* 如果不存在记录,则报错
IF NOT sy-subrc EQ 0.
MESSAGE e001(zpr).
ENDIF.