深度解析## 术语先行澄清**中文名称**)
Oracle EBS R12 采购订单类业务对象 —— 采购订单行位置信息Line Location / Shipment深度解析术语先行澄清中文名称采购订单发运行 / 采购订单行位置信息后台表PO_LINE_LOCATIONS_ALL业务对象层级名称Line Location业内常简称 PLL界面标签【发运】四层模型定位PO Header头 → PO Line行 →PO Line Location发运 / 位置层→ PO Distribution费用分配架构核心结论PO_LINE 定义「买什么、单价多少」PO_LINE_LOCATIONS 定义「送到哪里、何时交付、如何收货、如何匹配发票、交付数量」整单执行、接收、三向匹配全部控制在这一层。很多开发实施误区误以为收货地点、匹配规则存在 PO 行实际全部在 Line Location。一、业务语义与设计目的1. 为什么单独设计 Line Location 层同一采购订单行同一种物料、同一个单价支持拆分多条交付计划 场景 1同一物料分两批交货、不同交期 场景 2同一物料一部分送往 A 仓库、一部分送往 B 仓库 场景 3同一物料一部分要求检验入库、一部分直接交货。每一套「交付地点 交付日期 接收规则 交付数量」构成一条独立 Line Location 记录。2. 适用所有采购订单类单据标准 PO、BPA 发放、计划 PO 发放、RFQ、Quotation 均使用本表⚠️纯 BPA 框架、纯计划 PO 框架本身没有有效的可执行 Line Location只有生成 Release 发放后才产生可用于接收开票的发运行。3. 对象边界✅ Line Location 承载交付计划、收货地点、匹配规则、接收控制、数量跟踪、关闭允差 ❌ Line Location 不承载物料、基准单价在 PO_LINES_ALL ❌ Line Location 不承载会计科目、成本中心、项目在 PO_DISTRIBUTIONS_ALL二、实体基础属性物理实体 PO_LINE_LOCATIONS_ALL主键LINE_LOCATION_ID核心外键关联PO_LINE_ID→ PO_LINES_ALL归属哪一个订单行PO_HEADER_ID→ PO_HEADERS_ALL归属订单头PO_RELEASE_ID→ PO_RELEASES_ALLBPA / 计划发放才有值标准 PO 为空SOURCE_SHIPMENT_ID计划发放关联原始计划 PO 发运行一对多关系 1 PO Line → N Line Location 1 Line Location → N PO Distribution三、关键字段分组详解按业务职能划分分组 1交付地点与交期信息“位置信息” 本源字段字段业务含义SHIPMENT_NUM发运行编号同一订单行下多条交付计划序号1,2,3…SHIP_TO_LOCATION_ID收货地点 ID核心位置字段关联 HR_LOCATIONS_ALL决定物料接收仓库地点NEED_BY_DATE需求到货日期客户要求到货日PROMISED_DATE供应商承诺交货日期SHIP_VIA_LOOKUP_CODE运输方式物流FOB_LOOKUP_CODE装运条款离岸条款FREIGHT_TERMS_LOOKUP_CODE运费条款ENFORCE_SHIP_TO_LOCATION_CODE强制收货地点控制禁止 / 警告 / 无控制控制接收时收货地点是否必须和 PO 一致“采购订单行位置信息” 名称来源就是SHIP_TO_LOCATION_ID代表物料送达位置。分组 2数量维度执行跟踪核心物理实时更新EBS 特征所有数量字段物理存储、实时更新接收模块、AP 发票模块直接更新本表并发热点。 | 字段 | 含义 | 更新来源 | |---|---|---| |QUANTITY | 本发运行订购总数量基准数量|PO 创建 / 修改 | |QUANTITY_RECEIVED | 已接收数量 | RCV 接收事务自动更新 | |QUANTITY_ACCEPTED | 检验合格接收数量4-way 匹配使用| 接收检验流程 | |QUANTITY_REJECTED | 检验拒收数量 | 接收检验流程 | |QUANTITY_BILLED | 已开票匹配数量 | AP 发票三向匹配更新 | |QUANTITY_CANCELLED | 本发运行取消数量 | 手工取消发运行 |分组 3接收控制规则采购执行控制开关字段业务规则RECEIPT_REQUIRED_FLAG是否必须接收Y 必须先收货才能开票3/4-wayN2-way 匹配无需接收INSPECTION_REQUIRED_FLAG是否必须检验开启后启用 4-way 匹配PO→接收→检验→发票ACCRUE_ON_RECEIPT_FLAG接收应计标识Y 库存采购接收生成应付暂估分录N 费用采购期末应计RECEIVING_ROUTING_ID接收流程直接交货 / 标准接收 / 要求检验NOTE_TO_RECEIVER给收货人员备注QTY_RCV_TOLERANCE超收允差百分比允许供应商多交货上限QTY_RCV_EXCEPTION_CODE超收处理警告 / 拒收分组 4发票匹配核心配置财务匹配控制点MATCH_OPTION最重要字段之一2-WAYPO ↔ 发票不校验接收数量3-WAYPO ↔ 接收 ↔ 发票4-WAYPO ↔ 接收 ↔ 检验合格数量 ↔ 发票匹配层级在发运行同一张 PO 不同交付计划可以配置不同匹配规则。分组 5自动关闭允差自动关闭逻辑字段说明RECEIVE_CLOSE_TOLERANCE接收关闭允差 %达到比例系统自动【关闭接收】INVOICE_CLOSE_TOLERANCE开票关闭允差 %达到比例系统自动【关闭开票】CLOSED_FOR_RECEIVING_DATE接收关闭日期CLOSED_FOR_INVOICE_DATE发票关闭日期SHIPMENT_CLOSED_DATE全部关闭日期分组 6价格相关BPA 发放专用PRICE_OVERRIDE标准 PO固定等于 PO_LINES_ALL.UNIT_PRICEBPA 发放若协议行允许改价ALLOW_PRICE_OVERRIDE_FLAGY发放可覆盖协议单价受 NOT_TO_EXCEED_PRICE 上限控制分组 7取消控制CANCEL_FLAG / CANCEL_DATE / CANCELLED_BY / CANCEL_REASON 支持单独取消某一条发运行不需要取消整行 PO。四、业务生命周期与状态流转Line Location 粒度Line Location 没有独立审批状态审批状态继承 PO Header只有 PO 整体 APPROVED发运行才能执行接收。 业务执行状态维度OPEN开放可接收、可开票CLOSED FOR RECEIVING接收关闭不能再收货仍可继续匹配发票CLOSED FOR INVOICE发票关闭不能新增发票匹配CLOSED接收、发票全部关闭CANCELLED发运行手工取消联动规则所有 Line Location 全部关闭上层 PO Line 自动关闭所有 PO Line 关闭PO Header 自动关闭。五、和上下游业务对象的联动机制1. 向上关联PO_HEADER订单头 ↑ PO_LINE订单行物料、基准单价 ↑PO_LINE_LOCATIONS发运 / 位置层2. 向下关联PO_LINE_LOCATIONS_ALL ↓一对多 PO_DISTRIBUTIONS_ALL费用分配会计科目、项目 WBS3. 横向跨模块联动1接收模块 RCV_TRANSACTIONS_ALL 每条接收事务通过LINE_LOCATION_ID关联发运行接收保存后自动刷新 PLL 的 QUANTITY_RECEIVED、QUANTITY_ACCEPTED。 2应付模块 AP_INVOICE_DISTRIBUTIONS_ALL 发票匹配时绑定 LINE_LOCATION_ID更新 QUANTITY_BILLED触发匹配校验、匹配冻结。ER 关联核心 SQL 模板SELECT ph.segment1 po_num, pl.line_num, pll.shipment_num, pll.ship_to_location_id, loc.location_code ship_to_name, pll.quantity ord_qty, pll.quantity_received rcv_qty, pll.quantity_billed bill_qty, pll.match_option, pll.accrue_on_receipt_flag 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 LEFT JOIN hr_locations_all loc ON pll.ship_to_location_id loc.location_id WHERE ph.org_id 82;六、不同采购订单类型下 Line Location 行为差异1. 标准 POSTANDARD创建 PO 时自动生成至少 1 条 Line LocationPO_RELEASE_ID 为空PRICE_OVERRIDE PO 行单价可直接接收、匹配发票。2. BPA 一揽子协议BLANKET本体重点误区BPA 框架 PO_HEADERS_ALL 存在、PO_LINES_ALL 存在但是不存在可执行 Line Location。 BPA 仅维护物料与阶梯价格收货开票载体必须是【Blanket Release】。3. Blanket Release 一揽子发放PO_RELEASE_ID 填入发放主键Release 创建时系统生成 Line Location价格继承 BPA 行允许改价受行参数控制。4. Planned PO 计划订单本体本体同样无可用 Line Location必须生成 Planned Release发放产生发运行。5. Planned Release 计划发放额外填充 SOURCE_SHIPMENT_ID指向原始计划 PO 发运行用于计划数量占用追溯。6. CPA 合同协议CONTRACTCPA 仅有 Header不存在 PO_LINE自然不存在 Line Location只能被标准 PO 引用。七、开发与实施高频踩坑清单❌ 把收货地点放在 PO 行字段查询 PO_LINES_ALL 没有 SHIP_TO_LOCATION_ID所有交付地点必须从 PO_LINE_LOCATIONS_ALL 获取。❌ 直接 DML 更新 QUANTITY_RECEIVED / QUANTITY_BILLED 绕过接收 API、AP 匹配逻辑造成数量不一致、匹配冻结异常、关闭逻辑失效。❌ 查询 BPA 单据试图关联 PO_LINE_LOCATIONS_ALL BPA 本体没有发运行需要关联 PO_RELEASES_ALL 再关联发运行。❌ 混淆关闭层级PO 头关闭 ≠ 所有发运行关闭关闭逻辑最低粒度是 Line Location。❌ 认为 MATCH_OPTION 在 PO 头 / PO 行匹配规则最小控制单元是发运行同一 PO 可以混合 2-way/3-way。❌ 接收应计 ACCURUE_ON_RECEIPT_FLAG 配置在行上实际在 Line Location区分库存料 / 费用料。❌ 新增发运行后忘记同步生成 PO_DISTRIBUTIONS一条 Line Location 至少一条分配行否则无法做预算、无法匹配发票。八、与 Fusion Procurement 对应概念对照迁移重点EBSPO_LINE_LOCATIONS_ALL → Line LocationShipment 发运行FusionSchedule计划行 Fusion 取消独立物理表概念封装为 VO/EO对外 BO 层级Header-Line-Schedule-Distribution业务语义完全对齐但底层不再允许直表访问。