
Oracle EBS R12 采购模块 — 采购订单类业务对象完整深度解析前置基础概念采购订单类业务对象定义存放于PO_HEADERS_ALLTYPE_LOOKUP_CODE区分类型包含框架协议对象 可执行订单对象 发放对象。 EBS PO 核心四层范式Header头→ Line行→ Line Location发运 Shipment→ Distribution费用分配关键规则 ✅只有标准 PO、BPA 发放、计划 PO 发放可以接收货物、匹配 AP 发票 ❌ BPA、CPA、Planned PO 本体【不能直接收货、不能直接匹配发票】属于框架 / 计划载体必须通过发放 / 引用标准 PO 执行。四大基础单据类型存储标识业务对象TYPE_LOOKUP_CODE执行载体标准采购订单 Standard POSTANDARD自身可直接执行一揽子采购协议 BPABLANKET通过【Blanket Release 一揽子发放】执行计划采购订单 Planned POPLANNED通过【Planned Release 计划发放】执行合同采购协议 CPACONTRACT通过引用 CPA 的标准 PO执行公共底层表结构说明 所有单据头共用PO_HEADERS_ALL所有单据行共用PO_LINES_ALL所有发运层PO_LINE_LOCATIONS_ALL所有财务分配PO_DISTRIBUTIONS_ALL发放独立表头PO_RELEASES_ALLBPA Release / Planned Release 共用此表一、业务对象 1标准采购订单 Standard Purchase OrderSPO1. 业务语义一次性、明确需求的采购单据物料、数量、单价、交期、收货地点、费用科目全部确定审批完成后直接执行收货、三向匹配。 适用场景零星采购、一次性设备采购、短期项目采购、不重复发生的服务采购。2. 对象分层结构完整四层标准模型PO Header 订单头PO_HEADERS_ALL主键PO_HEADER_ID 关键字段 TYPE_LOOKUP_CODE STANDARD SEGMENT1PO 单号VENDOR_ID / VENDOR_SITE_IDCURRENCY_CODETERMS_IDAUTHORIZATION_STATUS 审批状态、PO_STATUS 业务关闭状态ORG_ID。PO Line 订单行PO_LINES_ALL主键 PO_LINE_ID外键 PO_HEADER_ID 定义采购物品、物料、类别、行类型、单价重要单价存在 Line 层收货地点、匹配规则不在 Line。PO Line Location 发运行Shipment【核心层】PO_LINE_LOCATIONS_ALL主键 LINE_LOCATION_ID外键 PO_LINE_ID 整个采购执行控制点交货地点 SHIP_TO_LOCATION_ID匹配规则2-way /3-way /4-way MATCH_OPTION数量指标QUANTITY_ORDERED / RECEIVED / BILLED / CANCELLED接收关闭允差、发票关闭允差、接收是否应计 ACCURUE_ON_RECEIPT_FLAGPO Distribution 费用分配行PO_DISTRIBUTIONS_ALL主键 PO_DISTRIBUTION_ID外键 LINE_LOCATION_ID 财务层科目 CCID、项目 WBS、成本中心、预算、税额分摊。3. 对象生命周期状态机INCOMPLETE → SUBMITTED → APPROVED允许接收开票 修改单据 → REQUIRES REAPPROVED禁止业务执行 执行完毕CLOSED FOR RECEIVING → CLOSED → FINALLY CLOSED不可逆4. 关键特征无需任何 Release单据本体具备完整执行能力PR 通过 AutoCreate 可以直接生成标准 PO支持 Dropship、外协采购、库存采购、费用采购支持直接引用 CPA 合同号做金额管控。5. 典型关联 SQL 骨架SELECT * FROM PO_HEADERS_ALL PH JOIN PO_LINES_ALL PL ON PH.PO_HEADER_ID PL.PO_HEADER_ID JOIN PO_LINE_LOCATIONS_ALL PLL ON PL.PO_LINE_ID PLL.PO_LINE_ID JOIN PO_DISTRIBUTIONS_ALL PD ON PLL.LINE_LOCATION_ID PD.LINE_LOCATION_ID WHERE PH.TYPE_LOOKUP_CODE STANDARD;二、业务对象 2一揽子采购协议 BPABlanket Purchase Agreement 一揽子发放 Blanket Release2.1 BPA 一揽子采购协议框架对象不可直接执行业务语义和供应商签订中长期框架协议锁定物料、阶梯价格、有效期间、最大协议金额不约定具体交货数量与交期。 适用重复性物料采购、原材料长期供货、标准化零部件。对象分层结构HeaderPO_HEADERS_ALLTYPE_LOOKUP_CODEBLANKET 有效期 START_DATE/END_DATE协议总上限 AMOUNT_LIMITGLOBAL_AGREEMENT_FLAG全局协议跨 OULinePO_LINES_ALL物料、基准单价支持价格阶梯 PO_PRICE_DIFFERENTIALS不同采购数量对应不同单价 ALLOW_PRICE_OVERRIDE_FLAG发放时是否允许修改协议价格⚠️BPA 本身不存在 Line Location、DistributionBPA 没有发运、没有费用分配不能收货开票。2.2 Blanket Release 一揽子发放可执行业务对象业务语义基于已审批 BPA 下达正式供货指令确定本次采购数量、交期、收货地点、费用科目Release 才是真正可以收货、匹配发票的执行单据。独特数据模型EBS 关键设计极易踩坑✅Release 没有独立 Header 表新增独立表PO_RELEASES_ALL存放发放头信息 主键PO_RELEASE_ID外键关联 BPA 头 PO_HEADER_ID 关键字段RELEASE_NUM 发放号、RELEASE_DATE、AUTHORIZATION_STATUS实际执行四层信息仍然复用全局 PO 表PO_LINES_ALL、PO_LINE_LOCATIONS_ALL、PO_DISTRIBUTIONS_ALL通过字段PO_RELEASE_ID标记归属哪一笔发放。完整层级关系 BPA Header (PO_HEADERS_ALL) ↓ PO_RELEASES_ALL发放号 ↓ PO_LINES_ALL → PO_LINE_LOCATIONS_ALL → PO_DISTRIBUTIONS_ALL对外业务单号 BPA 协议号 Release 发放号如 BPA001-R1BPARelease 完整查询模板SELECT ph.segment1 bpa_num, pr.release_num, pl.line_num, pll.shipment_num, pll.quantity_ordered FROM PO_HEADERS_ALL ph JOIN PO_RELEASES_ALL pr ON ph.po_header_id pr.po_header_id JOIN PO_LINES_ALL pl ON pr.po_release_id pl.po_release_id JOIN PO_LINE_LOCATIONS_ALL pll ON pl.po_line_id pll.po_line_id WHERE ph.type_lookup_code BLANKET;2.3 BPA 核心业务规则Release 自动继承 BPA 物料、价格可控制是否允许改价系统自动累计所有 Release 已发放金额不超过协议 AMOUNT_LIMIT支持 iProc 自助采购、供应商门户直接创建发放协议过期后无法新建 Release已存在 Release 可正常执行完毕。三、业务对象 3计划采购订单 Planned POPPO Planned Release 计划发放3.1 Planned PO 计划采购订单计划框架对象不可直接收货业务语义中长期采购计划提前锁定物料、单价、预估总数量、预估交期、会计科目多用于长线物料、需要给供应商长周期备料承诺。和 BPA 核心区别PPO 框架上录入预估数量BPA 框架不录入确定采购数量只锁定价格。分层结构 HeaderPO_HEADERS_ALLTYPE_LOOKUP_CODEPLANNED LinePO_LINES_ALL物料、单价、预估数量和 BPA 一样Planned PO 本体无 Line Location、无 Distribution不能直接执行3.2 Planned Release 计划发放执行单据逻辑结构与 BPA Release 高度相似 发放信息存储在PO_RELEASES_ALL通过 PO_RELEASE_ID 关联行、发运、分配表。 发放时从 PPO 框架占用预估数量形成正式交货计划支持接收、发票匹配。业务场景区分 BPA vs Planned POBPA价格优先数量灵活适合需求波动大、持续补货Planned PO总量承诺优先适合预测相对稳定、需要向供应商做总量承诺的关键物料重要开发特征Planned Release 分配行PO_DISTRIBUTIONS_ALL.SOURCE_DISTRIBUTION_ID会回写 PPO 框架分配 ID用于跟踪计划占用关系。四、业务对象 4合同采购协议 CPA Contract Purchase Agreement业务语义最高自由度框架协议仅约定供应商、协议条款、总金额上限不定义任何物料、价格。 不能直接创建 Release必须新建标准 PO在 PO 行引用 CPA_ID系统控制所有关联标准 PO 累计金额不超过合同上限。适用场景零星服务、多种杂项采购、框架服务合同保洁、运维、咨询采购品类不确定。对象分层仅两层 HeaderPO_HEADERS_ALLTYPE_LOOKUP_CODECONTRACT只有 Header不存在 PO_LINES_ALL没有行、没有价格、没有物料。使用链路CPA框架→ 创建标准 PO → PO 行填入 FROM_HEADER_IDCPA 的 PO_HEADER_ID 系统校验关联该 CPA 所有标准 PO 累计金额 ≤ CPA.AMOUNT_LIMIT关键误区CPA 不能创建 Release只能被标准 PO 引用这是和 BPA 最大区别。五、发放对象Release统一说明Release 分为两类Blanket Release / Planned Release 全部存储于PO_RELEASES_ALL公共特征必须依托审批后的 BPA/Planned PORelease 自身拥有独立审批状态 AUTHORIZATION_STATUS审批通过后底层 PO_LINE_LOCATIONS、PO_DISTRIBUTIONS 生成执行数据接收事务 RCV_TRANSACTIONS_ALL 通过 PO_RELEASE_ID 区分归属发放Release 取消 / 关闭同步更新底层发运层数量字段。架构总结Release 是逻辑头业务执行载体仍然复用四层 PO 实体表EBS 采用 “表复用” 设计降低表数量也是大量开发容易混淆的根源。六、四大采购订单类业务对象横向对比表对比维度标准 PO SPOBPA 一揽子协议Planned PO 计划订单CPA 合同协议TYPE_LOOKUP_CODESTANDARDBLANKETPLANNEDCONTRACT是否定义物料 / 价格是是支持阶梯价是否框架是否带预估数量明确数量无总量可设金额上限预估总数量无物料能否直接收货开票✅ 可以❌ 不可以必须 Release❌ 不可以必须 Release❌ 不可以执行载体单据自身Blanket ReleasePlanned Release引用它的标准 PO是否存在 PO 行有有有无仅 Header典型用途一次性采购持续补货原材料长周期承诺备料综合服务、杂项采购框架七、采购订单类业务对象统一核心机制架构重点1. 状态双字段控制所有单据通用AUTHORIZATION_STATUS 审批状态工作流维度INCOMPLETE / IN PROCESS / APPROVED / REJECTED / REQUIRES REAPPROVAL 只有 APPROVED业务对象才能执行接收、创建发放、匹配发票PO_STATUS 业务执行状态执行生命周期OPEN / CLOSED FOR RECEIVING / CLOSED FOR INVOICE / CLOSED / FINALLY CLOSED / CANCELLED2. 多组织 MOAC 隔离所有*_ALL表包含 ORG_ID一份 PO 单据归属单一 OU Global BPA 全局协议可跨 OU 创建发放。3. 对象操作规范开发红线Oracle 官方规范禁止直接 DML 修改 PO_HEADERS_ALL/PO_LINES_ALL/PO_LINE_LOCATIONS_ALL必须调用标准 PL/SQL 公共 APIPO_DOCUMENT_ACTION_PUB创建 / 修改标准 PO、协议PO_RELGEN_PKG创建 BPA/Planned Release 直表更新会造成数量不一致、状态机错乱、接收 / 发票匹配异常。4. 对象之间生成链路PR采购申请→ AutoCreate → 标准 PO / BPA ReleaseRFQ→Quotation 报价 → 自动生成 BPA 价格BPA/Planned PO → 手工 / 自动生成 ReleaseCPA → 手工创建标准 PO 引用合同八、常见业务对象开发误区汇总❌ 误以为 BPA 可以直接收货必须生成 Release❌ 查询发放单据只查 PO_RELEASES_ALL忽略必须关联 PO_LINE_LOCATIONS_ALL❌ 混淆 Planned PO 与 BPAPPO 框架有预估数量BPA 没有❌ 试图给 CPA 录入 PO 行CPA 不存在行数据❌ 修改 PO 发运层数量字段绕过 API引发数量失衡❌ 分不清Release 没有独立四层表只是一张关联表❌ Global 一揽子协议不控制 OU发放归属创建时的 OU。