ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

从MM01到配额协议:S4520中文教材采购全链路

从MM01到配额协议:S4520中文教材采购全链路

简介:这份中文版 SAP S4 HANA S4520 教材面向应用顾问、项目经理及最终用户,聚焦 S/4HANA 环境中采购与供应链管理的系统学习,帮助读者从采购主数据维护过渡到复杂采购流程优化。内容围绕采购物料主数据与业务伙伴、供货源和条件、采购信息记录与合同计划协议、货源清单与配额协议、采购申请与订单监控、凭证审批及灵活工作流、发票计划与外协加工、供应商评估与 KPI 等主题展开,并涉及凭证类型定制、字段选择、版本管理和采购员权限等配置细节,兼顾标准业务流程与后台定制思路。资源包为 1 个 PDF 文件,约 18MB,目录按单元与课程组织,便于按采购场景检索和对照学习。目前已有 1517 人学习,适合需要夯实 MM 采购操作、理解货源确定与审批配置,以及提升供应商评估与流程控制能力的从业者参考。

1. 一份 S4520 中文教材能省掉多少摸索:从 MM01 到配额协议的完整链路

拿到 S/4HANA 采购模块的人,八成都经历过同一种尴尬:事务码背得滚瓜烂熟,真到配一条能跑通“申请—审批—下单—收货—评估”的链路,卡住的永远是主数据组织级别和货源确定优先级这类地方。这份 S4520 中文版教材的价值就在这儿,它按课程编号把采购主数据、供货源和条件、货源确定、优化采购、凭证审批过程、特定采购流程、供应商评估、定制配置八个单元串成一条线,每一课都带业务示例和菜单路径,不是概念拼接。适合刚接手采购实施的应用顾问、需要带人过流程的项目经理,以及被临时拉来顶 MM 模块的 ABAP 和最终用户。它不会替你配系统,但能让你少走很多“事务码敲对了、业务还是跑不通”的冤枉路。

2. 采购主数据:MM01 的组织级别与 BP 角色到底怎么落

采购主数据是所有后续动作的地基。这一章不讨论概念定义,只解决一件事:怎么建一个“能下单、能收货、能过账、能查”的物料和供应商,并且在建完之后有办法自证没建错。

2.1 物料主记录按部门切视图,按组织级别切归属

物料主记录是一个中央资源库,数据按视图切给不同部门:采购看采购视图,计划看 MRP 视图,财务看会计视图,仓库看存储视图。这种切法不是为了好看,而是为了让每个部门只能动自己那一段,避免销售改个价格把采购的容差一起带崩。教材里那张视图表值得贴在显示器边上——基本数据放短文本、基本计量单位、重量和数量;采购视图放采购组、超量/不足交货容差、订单单位、控制标识;MRP 视图放安全库存、计划交货时间、MRP 类型;会计视图放价格控制、评估价格;存储视图放发货单位、存储条件、包装尺寸。

组织级别只有两层,这点常被新手想复杂。客户端级放所有公司代码、工厂、存储位置通用的东西,比如物料组、物料短文本、基本计量单位和采购订单文本;工厂级放跟具体工厂绑定的数据,绝大多数采购数据都在这一层,包括采购组、采购订单单位,以及自动建立采购订单、货源清单需求这类控制标识。判定标准很简单:换个工厂要不要重新维护?要,就是工厂级。

维护状态是这一节最容易被忽略的硬约束。采购的维护状态是 E,创建采购订单时物料的维护状态必须已经是 E;如果物料类型包含基于价值的库存管理,会计数据(维护状态 B)也必须齐。用扩展物料视图(MM50)能一次性看到哪些视图还空着,这比事后让用户报错再去翻表高效得多。我在项目上一般要求主数据组在导入后用 MM50 批量过一遍,先把状态补齐再谈业务验证。

视图关键字段谁维护
基本数据物料短文本、基本计量单位、物料组主数据组
采购采购组、订单单位、交货容差、控制标识采购
MRPMRP 类型、安全库存、计划交货时间计划
会计价格控制(S/V)、评估类、评估价格财务
存储发货单位、存储条件、包装尺寸仓储

2.2 MM01 建一个可采购物料:字段顺序比字段数量重要

MM01 的坑不在字段多,而在顺序。正确顺序是先定物料类型和行业领域,再选视图,最后逐视图填。物料类型一旦分配,编号范围、允许的视图、采购类型(自制/外购/两者)就被定死了;行业领域决定要不要额外维护特定行业字段。教材里点得比较透的三个特殊类型值得单独记:

  • ROH(原材料):标准系统里默认只能外部采购,采购类型固定。
  • NLAG(非库存物料):允许外购也允许自制,不做数量更新也不做价值更新,收货直接进消耗,无法过账到库存科目,但因为有会计视图,可以维护采购申请用的评估价格。
  • UNBW(非估价物料):做数量更新、不做价值更新,可以用库存概览看数量,但采购订单行项目必须带科目分配,采购申请里评估价格要手工输。

这三个类型选错,后面要么收货过不了账,要么库存对不上,改物料类型的前提是“没有库存、没有未清凭证”,实际项目里几乎改不动,所以建之前想清楚。

下面这段是批量建物料时常用的 BAPI 骨架,我把它裁到只剩采购相关的入参,方便看清哪几个字段是必须给死的。

DATA: ls_head TYPE bapimathead, ls_client TYPE bapi_mara, ls_plant TYPE bapi_marc, ls_plantx TYPE bapi_marcx, ls_val TYPE bapi_mbew, ls_valx TYPE bapi_mbewx, lt_return TYPE STANDARD TABLE OF bapiret2. ls_head-material = 'Z-MAT-0001'. ls_head-ind_sector = 'M'. " 行业领域:机械工程 ls_head-matl_type = 'ROH'. " 物料类型:原材料,决定采购类型为外购 ls_head-basic_view = 'X'. ls_head-purch_view = 'X'. " 必须选采购视图,否则采购组无法维护 ls_head-mrp_view = 'X'. ls_head-acc_view = 'X'. " 有价物料必须带会计视图,否则维护状态到不了 E/B ls_client-matl_group = '001'. " 客户端级:物料组 ls_client-base_uom = 'PC'. " 客户端级:基本计量单位 ls_client-matl_desc = '测试采购物料'. ls_plant-plant = '1000'. ls_plant-purch_grp = '001'. " 工厂级:采购组,PO 默认值来源 ls_plant-order_unit = 'PC'. " 工厂级:采购订单单位 ls_plant-mrp_type = 'PD'. ls_plant-plnd_deliv_time = 7. ls_plantx-plant = '1000'. ls_plantx-purch_grp = 'X'. ls_plantx-order_unit = 'X'. ls_plantx-mrp_type = 'X'. ls_val-val_type = '1000'. ls_val-val_class = '0300'. " 评估类,和物料类型/科目确定强绑定 ls_val-price_ctrl = 'V'. " V=移动平均价,S=标准价 ls_valx-val_type = '1000'. ls_valx-val_class = 'X'. ls_valx-price_ctrl = 'X'. CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA' EXPORTING headdata = ls_head clientdata = ls_client clientdatax = ls_clientx plantdata = ls_plant plantdatax = ls_plantx valuationdata = ls_val valuationdatax = ls_valx TABLES returnmessages = lt_return. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.

逻辑上分三步:抬头定类型和视图,工厂段填采购和 MRP,评估段填价格控制。参数里最不能错的是matl_type、val_class和price_ctrl——评估类决定了收货时走哪个科目,价格控制决定差异怎么算,这两个错了,后面财务一定找上门。plantdatax、valuationdatax这类 X 结构不是可选项,它告诉系统“这些字段是我要改的”,漏了对应 X 字段,值会被静默丢掉的玄学问题多半出在这。

提示:BAPI 提交后一定要遍历lt_return,遇到类型为 E 或 A 的消息就回滚,别只看 BAPI 的返回值。

2.3 业务伙伴 BP:类别定字段,角色定上下文

S/4HANA 把供应商和客户统一到业务伙伴主数据里,用事务代码 BP 维护,ERP 时代分开维护的那套已经没有了。BP 里有三个概念必须分清,混了就建不出能下单的供应商:

第一是业务伙伴类别——自然人、组、组织。类别决定屏幕上出现哪些字段,而且是静态的,创建后不能改。公司主体一定选组织,个人供应商选自然人,改不了,只能重建。

第二是角色。角色是业务伙伴参与业务的上下文,采购相关的是供应商和 FI 供应商,销售相关的是客户和 FI 客户。没有供应商角色,这家 BP 在采购凭证里根本搜不出来。一个 BP 可以同时挂多个角色,这也是统一主数据的好处。

第三是组织级别。供应商数据分三层:客户端级(地址、控制数据、银行明细、关系)、公司代码级(统驭科目、付款条件、预扣税)、采购组织级(订单货币、国际贸易术语、合作伙伴角色、控制标识)。再往下还能到工厂和供应商子范围。子范围是自由定义的细分,比如按车型或按产品线拆,最大长度只有六个字符,而且要先在常规数据里允许“工厂/子范围附加数据”,才能创建对应记录。合作伙伴角色和子范围分别落在 WYT3 和 WYT1 这两张表里,做数据核对的绕不开它们。

一次性供应商是另一个实用但危险的东西。它允许你在没建主记录的情况下直接开询价、采购订单或框架协议,适合零星、一次性的采购;代价是地址数据存不住,每次下单都得手输。项目上我一般把一次性供应商的科目组单独锁权限,避免有人图省事全用一次性,最后连供应商画像都做不出来。

2.4 一段自检代码:主数据到底建全了没有

上线前最耗时间的不是建数据,是找出哪条数据没建全。下面这段报表把物料、工厂、评估三块拼起来查一遍,能覆盖八成的“下单报错但看不出原因”。

REPORT zmm_mat_purch_check. PARAMETERS: p_matnr TYPE mara-matnr, p_werks TYPE marc-werks. SELECT SINGLE mara~matnr, mara~mtart, mara~matkl, mara~meins, marc~ekgrp, marc~bstme, marc~dispo, marc~beskz FROM mara INNER JOIN marc ON marc~matnr = mara~matnr WHERE mara~matnr = @p_matnr AND marc~werks = @p_werks INTO @DATA(ls_mat). IF sy-subrc <> 0. WRITE: / '物料在工厂下无记录:', p_matnr, p_werks. RETURN. ENDIF. " 采购组为空:后续 PO 无法带出默认采购组,等于每个单子手工填 IF ls_mat-ekgrp IS INITIAL. WRITE: / 'MARC-EKGRP 采购组缺失'. ENDIF. " 订单单位为空:PO 数量单位会退回基本计量单位,价格单位容易错位 IF ls_mat-bstme IS INITIAL. WRITE: / 'MARC-BSTME 订单单位缺失'. ENDIF. SELECT SINGLE bwkey, vprsv, stprs, verpr, lbkum FROM mbew WHERE matnr = @p_matnr AND bwkey = @p_werks INTO @DATA(ls_val). IF sy-subrc <> 0. WRITE: / 'MBEW 无记录:缺会计/评估视图,收货将无法过账'. ELSE. WRITE: / '价格控制:', ls_val-vprsv, '标准价:', ls_val-stprs, '移动均价:', ls_val-verpr, '库存数量:', ls_val-lbkum. ENDIF.

这段的关键是三个判断。EKGRP空不报错,但会让每张采购订单的采购组变成手工活,量一大就出事;BSTME空会让订单单位和价格单位脱钩,价格看着对、金额算错;MBEW无记录则直接意味着没有评估视图,价格控制是 S 还是 V 也就无从谈起。参数只有两个,p_matnr支持带前导零的完整编号,p_werks建议直接给四位工厂码,别用搜索帮助里那种带名称的输入,脚本里容易匹配不上。想批量跑就把它改成内表循环,把SELECT SINGLE换成FOR ALL ENTRIES,注意先判空内表。

3. 供货源与条件:信息记录、合同、计划协议的边界在哪

货源这件事,很多人以为难度在“怎么建”,实际难度在“建哪种”。建错了类型,价格不生效、MRP 不认、审批对不上,全是连锁反应。

3.1 四种长协的选型边界

教材把中央合同、物料组合同、无发布文档的计划协议、有发布文档的计划协议分开讲,是有道理的,它们的适用面完全不同:

类型典型凭证/事务适用场景主要风险
采购信息记录ME11 / ME12单一物料+供应商的长期价格与交货条件有效期过期后价格静默失效
数量合同合同类型按定制,MK 一类约定总量、分批下单,价格锁死总量用完后新单取不到条件
价值合同合同类型按定制,WK 一类约定金额上限,物料范围宽金额拆分难跟踪,容易超支
计划协议ME31L,类型 LP 一类高频、稳定、需要发布文档驱动交货未固定货源,MRP 不生成计划行

判断逻辑我一般这么走:需求稳定、频次高、要让供应商提前看到滚动需求,选计划协议;需求有明确总量、要控年度框架,选数量合同;物料多、金额封顶,选价值合同;只是想把价格和交货期固定下来,不想背承诺量,就用信息记录。信息记录是最轻的,也是最容易过期的,它的有效期字段(DATAB/DATBI)在项目上被忽略的概率高得离谱。

物料组合同和中央合同的区别在于组织范围:中央合同跨工厂、跨采购组织使用,物料组合同按物料组圈定适用范围。教材里“创建物料组的合同”这一课,本质是把合同抬头的物料组当成筛选条件,让同一份合同覆盖一组物料,减少重复维护。

3.2 ME11 建信息记录:字段给对了,价格才认

信息记录的核心不是“填个价”,而是给系统一套完整的采购条件。必给的字段包括供应商、物料、采购组织、工厂(工厂级信息记录才有工厂维度的价格)、信息类别(标准、寄售、外协、管道等)、净价、价格单位、币种、有效期、最小订购量、计划交货时间。少一个工厂,采购订单在工厂维度就取不到这条记录;少一个有效期,半年后价格悄悄失效。

信息记录的抬头落在 EINA,采购组织级数据落在 EINE,价格本身走条件技术(条件类型 PB00 一类),所以你在 EINE 里看到的净价和条件记录里的价格必须对得上,对不上就是条件更新出了问题。批量核查过期信息记录是运维常规动作:

SELECT eina~infnr, eina~matnr, eina~lifnr, eine~ekorg, eine~werks, eine~netpr, eine~waers, eine~datab, eine~datbi, eina~loekz FROM eina INNER JOIN eine ON eine~infnr = eina~infnr WHERE eine~datbi < @sy-datum AND eina~loekz = @space AND eine~ekorg = @p_ekorg INTO TABLE @DATA(lt_expired). LOOP AT lt_expired INTO DATA(ls_row). WRITE: / ls_row-infnr, ls_row-matnr, ls_row-lifnr, ls_row-datbi, '已过期'. ENDLOOP.

DATBI是有效期结束日期,LOEKZ是删除标识,把已删除的排掉,剩下的就是“还挂着但已经不能用”的记录,这批东西是采购订单取不到价的头号嫌疑。参数上p_ekorg建议必需,跨采购组织一次拉全量在数据量大的系统里很容易超时。跑出来别急着批量延期,先确认供应商价格是否还有效,机械延期等于把错误价格又续了一年。

3.3 计划协议与发布文档:MRP 认的是固定货源,不是协议本身

计划协议(事务代码 ME31L)跟普通合同最大的差别是发布文档。不带发布文档的计划协议只是一个框架,采购方按需叫料;带发布文档的计划协议会由 MRP 生成交货计划行,供应商按行交货。教材里把这两课拆开讲,是因为它们的运行机制完全不同。

要让 MRP 真的生成计划行,有三个前置条件同时成立:计划协议在有效期内、协议被标记为固定货源(货源清单里的固定标识,或协议本身作为唯一货源)、物料在该工厂的 MRP 类型和计划交货时间配置合理。只建协议不固定货源,MRP 会当它不存在,然后你会在 MD04 里看到一堆莫名其妙的采购申请。

查一批即将到期的合同和协议:

SELECT ekko~ebeln, ekko~bstyp, ekko~bsart, ekko~lifnr, ekko~bedat, ekko~kdatu FROM ekko WHERE ekko~bstyp = @p_bstyp " K=合同,L=计划协议 AND ekko~kdatu < @p_date AND ekko~loekz = @space INTO TABLE @DATA(lt_due).

BSTYP是凭证类别,合同是 K,计划协议是 L;KDATU是合同/协议的有效期结束日期。这个查询适合放在月初的例行检查里,尤其是计划协议,过期当天 MRP 就不再生成计划行,但系统不会主动喊你,等到产线缺料才发现的成本就高了。

3.4 价格确定走不通的四个原因

采购价格不是“信息记录里有个数”就完事,它走条件技术:条件表定义“按什么维度找”(供应商、物料、采购组织、工厂、信息类别),存取顺序定义“先找哪张表、找不到再怎么退”。理解这一点,排查就有顺序了:

先看有效期,DATBI是否已过;再看组织维度,采购订单的采购组织和工厂是不是跟记录一致,工厂级记录不会被别的工厂命中;再看币种和价格单位,订单币种跟记录币种不一致时,系统按汇率换算,看起来“价格不对”其实是换算;最后看优先级,同一物料如果既有信息记录又有合同条件,合同通常会盖过信息记录,这不是 bug,是设计。

注意:条件记录的优先级问题不要靠猜,用条件分析(定价分析)看系统实际取到了哪条,比翻表快得多。

4. 货源确定:货源清单优先级、配额协议与冻结

货源确定是采购模块里“配置最少、影响最大”的一块。它决定 MRP 把需求丢给谁,一旦配错,采购员看到的是自己没下过的单,供应商收到的是一堆莫名其妙的计划。

4.1 货源清单:固定的才有优先权

货源清单(事务代码 ME01 维护)的本质是一张“这个物料在这个工厂可以从谁买”的白名单。表结构在 EORD,关键维度是物料、工厂、供应商、采购组织,加上有效期起止。里面有两个标识必须搞清楚:

固定货源表示优先使用这家供应商,MRP 会优先把需求给它;不固定只是“允许采购”,MRP 仍然会按配额、按价格、按交货期去挑。阻断标识表示这条记录暂时不能用,但记录本身保留,适合供应商临时停产、资质审核中这类场景。两个标识一开一关的组合,就是日常货源管控的全部手段。

还有一个常被忽略的字段是“与 MRP 相关”。有些工厂的货源清单纯粹是给采购员参考的,不参与 MRP 运算,如果这个标识没打开,你会觉得“清单建了但 MRP 完全不看”,然后开始怀疑人生。

4.2 配额协议:比例、最小数量与计划运行

配额协议(MEQ1 维护)解决的是“同一物料分给多家供应商,各给多少”的问题。抬头在 EQUK,项目在 EQUP,核心参数有三个:配额比例(比如 60/40)、最小数量(低于这个量不拆分,避免小额订单满天飞)、最大数量(单个供应商的上限)。配额比例不是硬性百分比,系统按比例和已有分配量动态算,所以实际分配会围绕比例上下浮动,这属于正常现象。

真正让它生效的是配额协议的计划运行。协议建完不跑计划运行,需求不会被拆分,你会看到所有单子都给了同一家,然后怀疑比例填错了。计划运行的入口在采购主数据的配额协议菜单下(不同版本给的事务码可能是 MEQ3 一类),跑之前确认三件事:协议在有效期内、物料在该工厂有未清需求、配额比例合计是 100(或系统允许的合计值)。教材里“使用配额协议执行计划运行”这一课,重点其实就在这几个前置条件上。

SELECT equk~qunum, equk~matnr, equk~werks, equk~datab, equk~datbi, equp~qquote, equp~lifnr, equp~quban, equp~minqty, equp~maxqty FROM equk INNER JOIN equp ON equp~qunum = equk~qunum WHERE equk~matnr = @p_matnr AND equk~werks = @p_werks AND equk~datbi >= @sy-datum INTO TABLE @DATA(lt_quota). LOOP AT lt_quota INTO DATA(ls_q). WRITE: / ls_q-lifnr, '配额比例:', ls_q-qquote, '已分配:', ls_q-quban, '最小:', ls_q-minqty. ENDLOOP.

QQUOTE是配额比例,QUBAN是已经分配掉的量,MINQTY/MAXQTY是拆分的上下限。这段代码最常见的用途是上线前核对:比例加起来是不是 100、最小数量有没有设成比日常订单还大(那样永远不拆)、有效期是不是只写了一年。参数p_matnr、p_werks给全,别用模糊匹配,E 开头的内表数据量不小。

4.3 冻结供货源的三种做法与后果

“冻结”这个词在系统里有三个层级,后果完全不同,混用是事故来源:

第一种是冻结货源清单记录(阻断标识),影响面最小,MRP 立刻不再考虑这家,但已有采购订单不受影响。适合供应商临时产能不足。

第二种是冻结信息记录或合同,影响价格可用性,新单据取不到条件,已有单据照常执行。适合价格谈崩、等待重签的场景。

第三种是冻结供应商,在业务伙伴的采购组织数据里做采购冻结,或者在供应商主数据里打集中冻结标识,影响面最大——所有采购组织下的新单据都会被拦。这个动作要走审批,别让采购员自己点。

我的经验是:能冻结货源清单就不要冻结供应商。前者可逆、影响可控,后者一旦漏解冻,整条供应链停摆,还很难第一时间想到是主数据的问题。

5. 避坑排查:五条现场踩出来的记录

这一章按“现象—原因—解决”写,都是配置看着没问题、数据也在、但业务就是跑不通的场景。

5.1 五条高频翻车记录

第一条:信息记录建好了,采购订单还是带不出价格。现象是 ME21N 输入物料和供应商后净价为空,手工输价能过。原因通常有三个:信息记录的工厂维度跟你下单的工厂不一致(工厂级记录只在该工厂生效);有效期已经过了但没人注意;或者这张单走了合同,合同条件优先级更高且合同里没有对应价格。解决方式是先用定价分析看系统取到了哪条条件,再回头核对 EINE 的WERKS、DATAB、DATBI。别急着重建记录,八成的“没生效”其实是维度对不上。

第二条:物料建完了,采购订单保存时报“物料未被完全维护”。现象是保存时提示维护状态不足,或者会计视图缺失。原因是物料类型包含基于价值的库存管理,但会计视图没建,MBEW里没有记录,维护状态到不了 B;或者采购视图没建,状态到不了 E。解决方式是用 MM50 扩展物料视图补齐,或者用 MM02 直接进对应视图补字段。更彻底的办法是把“建物料必须带会计视图”写进主数据组的作业规范,别指望建的人自己想起来。

第三条:配额比例填了 60/40,实际全给了一家。现象是连续几张采购申请都指向同一个供应商。原因九成是配额协议的计划运行没跑,或者跑了但协议已过有效期,也可能最小数量设得比单笔需求还大。解决方式是按“有效期—计划运行—最小数量”的顺序查一遍,先跑计划运行再观察下一批需求,不要直接改比例,改了也没用。

第四条:供应商配了订货地址,采购订单里还是默认原供应商。现象是合作伙伴页签里的订货地址没带出来。原因要往合作伙伴确定的配置里找:合作伙伴角色是否允许用于该科目组、合作伙伴方案是否分配给了该科目组和采购凭证类型、工厂或子范围级别有没有设“更高级别搜索”、以及是否设了“结束”标识导致确定时点被推到保存阶段。教材里那个订货地址的示例流程(定科目组→定方案→查角色→再查对方科目组→输入→查凭证类型方案)值得按顺序走一遍,跳过任何一步都会得到“看起来配了但不生效”的结果。

第五条:审批流走到一半卡住,单据既不能改也不能批。现象是采购申请或订单停在某个审批步骤,谁点都没反应。原因通常是灵活工作流的启动条件不满足(比如金额区间、采购组、凭证类型三者组合没覆盖到这张单),或者审批人和步骤的分配依赖的组织结构里没有人。解决方式是先用工作流日志看实例状态,再回头核启动条件;不要直接在后台改单据状态绕过审批,那样会留下无法解释的凭证历史。

5.2 上线前的主数据体检清单

把上面这些整理成一张表,每次上线前过一遍,比事后救火便宜得多:

检查项判定标准出问题的后果
物料维护状态采购 E、有价物料 B单据存不了
采购组/订单单位MARC 中非空每单手工填、金额算错
评估类与价格控制MBEW 有记录,S/V 与业务一致收货过账失败、差异异常
信息记录有效期DATBI 在未来价格静默失效
货源清单固定标识主供应商已固定MRP 不生成计划行
配额比例合计100,最小数量合理需求分配失衡
合作伙伴方案已分配给科目组和凭证类型订货地址/开票方不生效

6. 供应商评估与定制配置:用数据反验主数据质量

供应商评估在教材里放在第七单元,很多人当成“报表功能”跳过,其实它是检验前面所有主数据是否建对的最后一关。评估的输入全部来自采购执行数据:订单价格、收货时间、收货数量、退货次数。这些数据如果因为主数据错误而失真,KPI 就算得再漂亮也没意义。

我一般用一段轻量查询先把三个基础指标拉出来:价格偏差(订单净价与信息记录净价的偏离)、按时交货率(收货日期与订单交货日期的差)、数量准确率(收货数量与订单数量之比)。数据源是 EKPO 和 EKBE,收货移动类型 101。

SELECT ekpo~ebeln, ekpo~ebelp, ekpo~matnr, ekpo~werks, ekpo~menge AS order_qty, ekpo~netpr, ekbe~budat, ekbe~menge AS gr_qty FROM ekpo INNER JOIN ekbe ON ekbe~ebeln = ekpo~ebeln AND ekbe~ebelp = ekpo~ebelp WHERE ekpo~lifnr = @p_lifnr AND ekbe~bwart = '101' AND ekbe~budat BETWEEN @p_from AND @p_to INTO TABLE @DATA(lt_gr). DATA(lv_total) = lines( lt_gr ). DATA(lv_short) = 0. LOOP AT lt_gr INTO DATA(ls_gr). IF ls_gr-gr_qty < ls_gr-order_qty. lv_short = lv_short + 1. ENDIF. ENDLOOP. WRITE: / '收货行数:', lv_total, '短收行数:', lv_short.

BWART = '101'只取收货,退货和冲销不要混进来;BUDAT是过账日期,用它算周期比凭证日期稳。短收行数占比超过两成,先别怀疑供应商,回头看订单单位与基本计量单位是否一致、收货容差是否设置过严——这两个问题都会伪装成“供应商交货不足”。

定制配置这一块,教材第八单元讲的凭证类型、字段选择、版本管理,本质上都是在收口:凭证类型决定编号范围和字段选择,字段选择决定哪些字段必输/隐藏/只读,版本管理让合同和计划协议的每次变更留痕。验证方式很土但有效:新建一张目标凭证类型的单据,故意留空一个应该必输的字段,看系统是否拦住;改一版合同,看版本比较里能否看到差异。配完不验证,等于没配。

从那以后我每次接手一个采购模块的上线检查,都会强制走一遍“建一条物料 → 建一个 BP → 建一条信息记录 → 固定货源 → 跑一次配额计划运行 → 开一张带审批的订单 → 收货 → 看供应商 KPI”的闭环,任何一环卡住就停下来查,绝不带着问题往下走。这套动作花不了两小时,能省掉的返工往往是两周。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进