第一次被问到“RESB 这张表有什么用”的时候,我正陪一个计划员查生产工单的组件领料记录。他打开 SE16N,看到表名下面写着“预定/相关需求”,随口问了一句:这不是预定吗,为什么发料之后它还在这里?这个问题其实很有代表性,因为 RESB 在 SAP 系统里是一张特别容易让人误会、但又特别核心的表。它本身不记录库存,也不直接生成物料凭证,它记录的是“未来要消耗的需求行”,也就是业务人员常说的预留和相关需求。这篇文章我就结合项目里的实际用法,把这个表讲透:它用来放什么数据、这些数据怎么进来的、怎么读才能不踩坑。
在这个话题上,很多人第一反应是跑到字典表里搜字段说明,结果越看越晕。我建议反过来,先搞清楚业务对象,再回来对字段,思路会顺很多。
1. 先别被“预定/相关需求”绕晕:RESB是需求行项目表
1.1 一句话定位:未来的消耗需求,不是已经发生的库存流水
RESB 完整叫法是 Reservation / Dependent Requirement,中文字典里有时翻译成“预留 / 相关需求”,所以标题里出现“预定/相关需求”很正常,你把它理解成“预留和相关需求”即可。
这张表的一个核心定位是:它存放的是“某物料在未来某个时间点需要被领用”的需求行。它不是库存表,也不是物料凭证表。MARD 记录的是当前库存数量,MSEG 记录的是已经发生的物料移动,而 RESB 记录的是“还没发生、但是已经有明确需求指向”的物料行。
打个比方会更清楚:一个生产工单需要 10 个螺丝,但仓库还没发料。这时 RESB 里就会有一行:物料是螺丝,数量是 10,需求日期是某天,对应工单是哪个。仓库拿起子发完料之后,这行并不会立刻消失,而是在“已发数量”字段里记录下 10,系统再用“需求数量 - 已发数量”算出剩余待发数量。这行继续留在表里,直到后续状态或清理任务把它关闭。
很多刚接触的开发同事以为发料后 RESB 会删行,这是一个误区。你把它看成一张“需求台账”,它的使命就是跟踪一项需求从产生到消耗完毕的全过程,而不是只记录当下的库存情况。
1.2 RESB 里记录什么、不记录什么
展开来说,RESB 里每一行通常包含这几类信息:
- 哪个物料需要:物料号 MATNR,以及对应的工厂 WERKS。
- 需要多少:需求数量 BDMNG,以及已经发出去的数量 ENMNG。
- 什么时候需要:需求日期 BDTER。
- 这个需求属于谁:预留号 RSNUM、行项目 RSPOS,或者关联到工单、订单等业务对象。
- 用什么方式出库:移动类型 BWART,常见如 261 表示生产订单投料,201 表示某个成本中心领料。
不记录的内容也很明确:它不记录供应商到货、不记录销售发货、不记录生产完工入库。这些业务会在其他表里体现,RESB 只关注“内部物料需求与消耗”这一段。理解了这个边界,后面看数据就不会乱。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实际业务里,哪些动作会在 RESB 里产生数据
2.1 手工预留:用户自己创建的领料需求
最直观的来源是手工预留。在 MM 模块里,用户因为某种原因知道未来要领料,但还不到真正出库的时候,就会先在系统里创建一张预留单。常见场景包括:设备维修要换件、某个项目要临时领料、实验需要特定批次物料。
创建成功后,系统里会产生预留抬头和预留行。抬头信息记录这个预留是谁创建、给哪个用途、哪个工厂,行项目记录具体是哪种物料、要多少、什么时候要。抬头数据在 RKPF 表,行项目就在 RESB 表。手工预留不会扣减库存,它只是把需求提前“占了个位置”。
这里要特别说明“占位
