☰
SAP采购价格确定全解析:条件技术、存取顺序与定价过程
2026/10/15 16:12:28 网站建设 项目流程

简介:《SAP之采购价格确定》是一份面向SAP顾问、MM模块学习者及供应链从业者的技术讲解文档,旨在讲透采购单价在系统中的确定机制。文档以条件技术为主线,先拆解条件类型、存取顺序、条件记录与条件表、计算方案四个基础模块,对各条件类型(如PB00总价、PB01折扣、PB02加成)的差异也作了辨析;再进入价格确定专题,依次说明确定计算方案、PB00条件补充方案、总价存储顺序、有效期与定价日期、等级、信息记录及订单价格历史等关键点,形成从原理到操作的完整链路。后续章节补充了抬头条件、组条件以及维护条件的方法,包括维护时效性条件、有效期和批量修改,可直接指导日常配置与问题排查。资源包为1个doc文件,压缩包约719KB,虽然只有单文档,但章节结构完整、内容集中,便于按目录快速查阅。已有434人浏览学习,适合备考或项目实战中需要深入理解采购定价逻辑的读者。

1. 采购价格确定到底在算什么:从一张价格对不上的采购订单说起

我们在某制造企业上线采购模块的第二周,最频繁的运维单不是权限,而是“采购订单价格不对”。A同学照着供应商报价单在 ME11 里维护了采购信息记录,再去建采购订单时,系统给出的单价和他看到的报价对不上;更玄学的是同一个物料,昨天取价还是对的,今天换了一个供应商,价格直接空白。

这不是某个人的操作问题,而是没看懂 SAP 采购价格确定这条链:价格从来不是用户在采购订单界面“填”进去的,而是系统通过条件技术,在“信息记录 + 存取顺序 + 定价过程”这条链路里事先约定好规则,再在创建订单的那一刻自动把价格“取”出来。谁先谁后、取哪一条、怎么计算,全部由配置决定。

这篇文章写给 MM 模块顾问、采购关键用户,以及要给 SAP 做接口或报表的开发同事。先把价格来源讲清楚,再给出可照抄的采购信息记录维护步骤和定价过程配置思路,最后是五条我踩过的高频坑。看完你至少能自己回答“这个价格到底从哪来的”。

2. 价格从哪张表里来:条件记录、存取顺序与采购信息记录的底层联动

2.1 条件记录不是普通主数据:存取顺序决定“谁先命中”

要理解采购价格确定,先要接受一个前提:价格在 SAP 里是以“条件记录”的形式存放的,而不是简单地把“物料 + 供应商 + 单价”存成一张普通主数据表。

条件技术由三个对象组成。第一是条件类型,它描述“我要算什么价”,采购信息记录的价格在标准系统里对应条件类型 PB00;第二是存取顺序,它描述“我按什么路径去找这个价”;第三是条件记录,它就是路径末端那条实实在在的价格数据。你可以把条件类型当成一个请求,存取顺序当成一张地图,条件记录才是地图上的结果点。

系统创建采购订单时,会拿着物料、供应商、采购组织、工厂、定价日期这些键值,按存取顺序里定义的条件表依次查找。第一张条件表命中就返回这张表上的价格,没有命中就继续找下一张表。这就是“谁先命中”的规则。常规采购场景的设计思路是特例在前、通用在后:先找“供应商 + 物料 + 采购组织 + 工厂”这种最细粒度,再找“供应商 + 物料 + 采购组织”,最后才落到“物料”这个最粗粒度。

这里有个新手很容易忽略的时间变量:取价不是看“今天”,而是看采购订单行项目里的“定价日期”。这个日期默认取创建订单当天,但如果采购员手工改了它,或者信息记录的新价格还没到生效起始日,系统就会按定价日期去找旧价格记录。很多“我明明改了价但订单还是旧价”的反馈,根源就在这里。

2.2 用 ME11 / ME12 / ME13 维护采购信息记录价格:从创建到改价的完整步骤

采购信息记录的价格维护并不复杂,常用三个事务代码:ME11 创建,ME12 修改,ME13 显示。

先说创建。进入 ME11,依次填物料号、供应商号、采购组织、工厂,回车。系统显示“采购组织数据 1”页签,这个页签里维护的就是价格相关信息。通常要填四类内容:净价或毛价、税码、价格单位、有效期间。价格单位是最容易被填错的地方,供应商报价单写了“每 1000 件 500 元”,你就要把价格单位填 1000,净价填 500,这样采购 200 件时系统自动算出行金额 100 元。如果价格单位填成 1,金额就会整体放大 1000 倍。

保存后,系统同时做两件事:写入信息记录表 EINA / EINE,并生成一条条件类型 PB00 的条件记录。这也是很多人不理解的地方——你在 ME11 里明明没有提“条件”两个字,但系统已经默默为价格建好了条件记录。

再说修改。ME12 改价格时,画面上有一个“开始日期”字段,这决定了新价格从什么时候生效。系统会把条件记录按时间段切成若干段,一段失效、一段生效。你改的只是当前这段,而不是整条记录。所以改完价之后,建议回 ME13 看一眼“有效从/到”,确认新价格的时间轴符合预期。

ME13 显示则用来核对当前取价结果。它能看到该信息记录在哪些采购组织、哪个工厂下生效,以及当前价格、价格单位、税码。下面这张表是维护价格时最需要关注的字段说明。

字段含义维护建议
净价条件记录里的金额先和财务确认是含税还是未税口径
价格单位基准数量1000 表示每 1000 件的价格
有效起始日新价生效日期按供应商报价单周期维护
有效结束日价格失效日期到期后该段价格自动不再被取到
税码税额计算逻辑与财务确认税码配置再维护

提示:维护 ME11 时把“工厂”一起维护进去。很多存取顺序里的条件表本来就含工厂字段,你只维护了采购组织层的数据,后面建订单时系统按工厂去查,就会出现“信息记录明明存在,可订单就是不带价”的情况。

2.3 直接查后台条件表:一段 ABAP 帮你确认价格记录是否生效

存在界面归界面,出了问题最终还是要落到表上。采购信息记录相关的表主要有两张:EINA 存物料与供应商的关联,EINE 存采购组织层的数据,包括价格和价格单位。下面的 ABAP 报表按“物料 + 供应商 + 采购组织”去查,适合批量核对价格记录。

REPORT z_inforecord_price. PARAMETERS: p_matnr TYPE eina-matnr OBLIGATORY, " 物料号 p_lifnr TYPE eina-lifnr OBLIGATORY, " 供应商号 p_ekorg TYPE eine-ekorg OBLIGATORY. " 采购组织 " 第一步:通过 EINA 拿信息记录号(物料 + 供应商) SELECT infnr FROM eina WHERE matnr = @p_matnr AND lifnr = @p_lifnr INTO TABLE @DATA(lt_inf). IF lt_inf IS INITIAL. WRITE: '该物料 + 供应商没有信息记录'. RETURN. ENDIF. " 第二步:按采购组织过滤,取净价与价格单位 SELECT infnr, ekorg, werks, netpr, peinh FROM eine FOR ALL ENTRIES IN @lt_inf WHERE infnr = @lt_inf-infnr AND ekorg = @p_ekorg INTO TABLE @DATA(lt_price). LOOP AT lt_price INTO DATA(ls_price). WRITE: / '信息记录', ls_price-infnr, '工厂', ls_price-werks, '净价', ls_price-netpr, '价格单位', ls_price-peinh. ENDLOOP.

这段代码的逻辑分两步:先用 EINA 确认“物料 + 供应商”是否真的存在信息记录,再用采购组织过滤 EINE 取价格数据。参数里 p_ekorg 必输,因为同一个信息记录可以同时挂在多个采购组织下,价格也可能不同。如果这段代码跑出来结果为空,而你在 ME13 里能看到价格,说明你的系统里该信息记录没有维护当前采购组织的数据,问题就在维护环节,不在取价环节。如果你的 ERP 版本低于 7.40,把内联声明改成传统 DATA 声明即可。

3. 定价过程:多个价格来源并存时,系统凭什么按这个顺序取价

3.1 定价过程配置路径与核心字段:先分清步骤和数量

采购订单里的“条件”页签,每一行都是一个条件类型,比如 PB00 信息记录、PB01 合同、PB02 计划协议。这些条件类型按什么顺序参与计算,是加还是减,是固定金额还是百分比,全部由定价过程控制。

配置路径在 SPRO 里:物料管理 → 采购 → 条件 → 定义价格确定过程。同一菜单下还有“定义存取顺序”和“定义条件表”。一个定价过程由若干步骤组成,每个步骤指定一个条件类型。系统按步骤号从小到大依次处理,所以步骤号决定了计算顺序。

看一个定价过程的配置时,重点看几个字段:步骤号决定计算先后;计数器用于区分同一个步骤里出现的多条同类条件;条件类型决定取什么价;计算类型决定金额是固定值还是百分比;正负号决定这个条件是加项还是减项;如果有百分比计算,还要看它的计算基准指向哪个条件类型。下面是一个最常见的采购定价过程的片段示例。

步骤计数器条件类型说明计算类型加减
101PB00信息记录价格固定金额+
201运费条件采购运费固定金额+
301折扣条件供应商折扣百分比,基准为第 10 步-

这个示例说明了一件事:PB00 算出来的金额是后面运费、折扣的基准。如果你发现订单里折扣百分比算出来的金额不对,先回去看定价过程中的计算基准字段指向的是哪个步骤,而不是只看折扣本身。

3.2 价格来源优先级:信息记录、合同、计划协议与手工输入谁先谁后

同一笔采购,物料价格可能同时存在于采购信息记录、采购合同、计划协议里。系统最终用哪个,取决于条件类型的存取顺序,而不是哪个价格“更合理”。

标准系统里,信息记录、合同、计划协议分别对应不同的条件类型,它们各自带自己的存取顺序。如果定价过程中同时放了 PB00、PB01、PB02,系统会按步骤顺序去读,而存取顺序内部又决定先查哪张条件表。实践中我通常建议一个项目只保留一个基准价格条件类型,默认用 PB00,然后在 PB00 的存取顺序里通过条件表的粒度差异来体现优先级。

这个方案之所以稳妥,是因为主数据维护逻辑统一:采购员只需要维护采购信息记录,不需要判断“这单是不是该走合同价”。如果业务确实要求合同优先,例如某类物料的采购订单必须先消耗已签合同,那么你要做的是设计好存取顺序,让合同对应的条件表排在信息记录条件表之前,而不是单纯把两个条件类型塞进定价过程,那样只会让问题更隐蔽。

手工输入是最特殊的一个“价格来源”。采购订单的条件页签里,PB00 这一行允许用户在特定配置下直接改金额。一旦你改了,这一行条件类型就会被标记为“手工输入”,此后信息记录再怎么更新,这单的价格也不会变。这是最让人头疼的行为,因为数据上完全看不出它曾经来自信息记录。

3.3 自定义存取顺序的配置步骤与四个控制点

如果标准存取顺序不能满足业务,常见的做法是复制一个标准存取顺序,再调整条件表的先后。步骤如下。

第一步,进入 SPRO → 定义存取顺序,找到系统标准的存取顺序,复制一份,取一个新名称。复制而不是新建,是因为标准存取顺序里已经挂好了条件表,复制后只要微调顺序,风险小得多。

第二步,调整“存取”页签中条件表的顺序。原则是细粒度条件表在前,粗粒度在后。例如把“供应商 + 物料 + 采购组织 + 工厂”放在第一张,把“供应商 + 物料 + 采购组织”放在第二张。

第三步,把这个新存取顺序挂到条件类型 PB00 上。保存后激活。

第四步,回到 ME11 补一条测试信息记录,再到 ME22N 建一条采购订单,打开条件页签看 PB00 取出的金额是不是来自你期望的那张条件表。

这里有四个控制点要特别留意。第一,条件表里的键字段必须和你在 ME11 维护的字段一致,条件表里有工厂,信息记录却没维护工厂,这张表永远命中不了。第二,不要在存取顺序里乱加字段,加一个没意义的字段会导致整条链路报错,取值失败。第三,条件记录维护时注意“条件补充”选项,勾选之后系统可能不再走标准存取顺序。第四,配置改动后一定要传输到质量环境验证,采购价格出问题往往不是单点配置错误,而是配置在不同环境间不完整导致的。

注意:存取顺序的调整会影响所有使用该定价过程的采购订单。上线前用物料、供应商、工厂的交叉组合做一轮取价测试,比上线后逐个订单排查成本低得多。

4. 采购价格确定的避坑清单:5 个翻车现场与排查路径

4.1 有效期写错或没维护,系统照样用旧价格

现象:采购员在 ME12 里改了价格,第二天建新订单,价格还是旧的。

原因:ME12 修改价格时,“开始日期”默认停在当前日期,但旧价格段的结束日期没有自动截断,或者新价格段开始日期比订单的定价日期晚。SAP 取价按定价日期找段,定价日期早于新价生效日,系统自然落到旧价格段上。

解决:改完价格后立刻在 ME13 看“有效从/到”。如果旧价格段到今天还没结束,用 ME12 把旧价格段的结束日期改为昨天。顺便排查采购订单行项目里的“定价日期”字段,确认它不是被手工改成了更早的日期。

4.2 价格单位填错,批量价格整整差三个数量级

现象:采购订单单价显示 0.5 元,供应商报价单上是每 1000 件 500 元,采购 2000 件,行金额算出来只有 100 元,而不是 1000 元。

原因:ME11 里净价填了 500,价格单位却填成了 1000。系统理解成“每 1000 件 500 元”,单件价 0.5 元。看上去“没什么毛病”,但和供应商报价单的“每件 0.5 元”完全是两回事,这种错误往往要拖到发票校验阶段才爆雷。

解决:维护价格时把价格单位和净价作为一个整体去填。报价单写“每 1000 件 500 元”,价格单位 1000、净价 500;报价单写“每件 0.5 元”,价格单位 1、净价 0.5。拿不准时,用第 2.3 节那段 ABAP 把 EINE 里的 PEINH 和 NETPR 打出来,对照报价单做一次复核。

4.3 信息记录存在,采购订单却不带价

现象:ME13 里明明能看到某供应商、某物料、某采购组织下的信息记录,新建采购订单时条件页签 PB00 却空白。

原因:最常见的是工厂维度对不上。ME11 维护时没有维护工厂,或存取顺序条件表要求“采购组织 + 工厂”,而采购订单里的工厂在信息记录里根本不存在。还有一种可能是该物料被设置成了“不允许自动取价”,系统压根不执行存取顺序。

解决:先在 ME13 里用“物料 + 供应商 + 采购组织 + 工厂”四个键值完整查一遍,确认信息记录确实覆盖这个工厂。再进 SPRO 检查 PB00 对应的存取顺序条件表里是否含工厂字段。最后检查物料主数据里的“价格控制”相关设置,排除自动取价被禁用的可能。

4.4 含税未税口径没对齐,订单总额和财务入账对不上

现象:采购订单净价看着合理,但发票校验时财务说税额不对,应付和采购订单总价差一大截。

原因:信息记录里的净价维护成了含税价或未税价,但税码配置和财务入账口径不一致。SAP 在定价过程里按税码和条件类型计算税额,采购订单显示的是净价或毛价取决于定价过程设计。问题通常不是某一个字段错,而是信息记录、税码、定价过程三者口径不统一。

解决:上线前和财务确认采购价格是含税还是未税口径,把结论固化成一张维护规范表。信息记录里维护价格的同时必须维护税码,不要留空。发票校验差异出现时,先看采购订单条件页签里税行取的是哪个税码,再对照财务的税码配置。

4.5 手工改了订单价格,后续信息记录更新全部“失灵”

现象:某订单发现价格高了,直接在 ME22N 条件页签里把 PB00 金额改成供应商邮件里的价格。之后供应商发来新价,采购员更新了信息记录,但这张订单的价格纹丝不动。

原因:采购订单价格是创建时从条件记录复制过来的快照,不是实时引用。手工修改后该行条件类型变为手工输入,和来源条件记录的关联断开,后续信息记录更新自然不会回写到这张订单。

解决:不要直接在采购订单里改价。正确做法是改 ME12 信息记录,然后用系统的重新评估功能让已存在的采购订单重新取价。如果只是单笔特例价,宁可把信息记录价格改成特例价再建订单,建完后再改回正常价,也别在订单里直接手改。手改一时爽,后面查价源的时候全是泪。

5. 进阶:用变更日志和历史订单回溯,把“价格从哪来”变成可验证的习惯

5.1 用变更日志查“价格从多少改成了多少”

当业务方质疑“这个价格是不是被谁改过”,你需要的不是看当前值,而是看变更历史。条件记录和采购订单如果激活了变更文档,改动都会写入 CDHDR(抬头)和 CDPOS(明细)。查询步骤是先确认对象类:在表 TCDOB 里按文本模糊搜索,找到价格相关对象的对象类名,再用 SE16N 打开 CDHDR 按对象类和对象键值过滤,最后在 CDPOS 里找字段名如 KBETR(条件金额)、PEINH(价格单位)的旧值和新值。

这套查法能帮你快速还原“某人某天把价格从 500 改到 480,有效期从 10 月改成 9 月”。不要凭记忆去猜,变更文档是唯一能站得住脚的证据。后台查变更文档虽然多两步,但比翻操作日志靠谱得多。

5.2 对历史订单做价格回溯:一段可复制的 ABAP 检查逻辑

订单上显示的单价,在表 EKPO 里对应 NETPR 和 PEINH。NETPR 是“按价格单位计的净价”,PEINH 是价格单位。要还原真正的单件价格,用 NETPR 除以 PEINH 就行。下面这个报表按采购订单号查行项目,直接打印单件价和行金额,用来核对历史订单是否被填错价格单位。

REPORT z_po_price_check. PARAMETERS: p_ebeln TYPE ekko-ebeln OBLIGATORY. " 采购订单号 SELECT ebeln, ebelp, matnr, menge, netpr, peinh, mws_kz FROM ekpo WHERE ebeln = @p_ebeln INTO TABLE @DATA(lt_item). IF sy-subrc = 0. LOOP AT lt_item INTO DATA(ls_item). " 单件价格 = 净价 ÷ 价格单位 DATA(lv_unit) = ls_item-netpr / ls_item-peinh. " 行金额 = 净价 × 数量 ÷ 价格单位 DATA(lv_amt) = ls_item-netpr * ls_item-menge / ls_item-peinh. WRITE: / '项目', ls_item-ebelp, '物料', ls_item-matnr, '单件', lv_unit, '行金额', lv_amt. ENDLOOP. ELSE. WRITE: '未找到订单', p_ebeln. ENDIF.

NETPR 是含价格单位的价格,不是单件价;PEINH 是价格单位,1000 时表示“每 1000 件的价格”。行金额则按数量换算。如果单件价打印出来和供应商报价单不一致,问题基本锁定在价格单位或维护口径上。这套检查逻辑无论对顾问还是运维来说都是最直接的验证手段。

做采购价格确定这个方向久了,你会发现配置本身不难,难的是出问题时能讲清楚系统为什么给出这个价。我现在接到“价格不对”的反馈,第一反应不是去采购订单里改价,而是先问三个问题:定价日期是哪天、取的是哪条条件记录、价格单位是什么。把这三件事查完,九成的案子已经有了答案。希望帮到你。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询