Oracle EBS Purchasing 模块的 PO创建走 Open Interface(PDOI)而非单条Public API,但控制(Cancel/Close/Final Close/Update/Reserve)有官方 Public Package。以下是 R12 中 PO 模块常用且受支持的 PL/SQL API / Package 汇总:
一、采购单据控制与生命周期管理 API(Public)
Package / Procedure | 用途 | 典型调用场景 |
|---|---|---|
| 取消/Close/Finally Close/冻结/解除冻结 PO、Release、BPA、Requisition | 自动取消过期PO、批量关单 |
| 关闭或最终关闭指定 PO Header(p_action='CLOSE'/'FINALLY CLOSE') | 月结前批量关闭已完成PO |
| 更新已审批PO的行/发运数量、价格、日期(需PO已审批且有Change Order允许) | SRM回写PO变更 |
| R12 新版 PO 更新封装(传入 | 程序化修改PO Shipment或删除行 |
| PO 预算准备金(Encumbrance)预留/释放 | 预算控制模块集成 |
⚠️
CONTROL_DOCUMENT调用前须FND_GLOBAL.APPS_INITIALIZE+MO_GLOBAL.SET_POLICY_CONTEXT('S', org_id)
二、请购单(PR)相关 PL/SQL
Package / Procedure | 用途 |
|---|---|
| 程序化创建请购单(内部使用较多,Form中也调用) |
Requisition Import 并发程序( | 官方推荐 PR 批量导入方式,填充 |
三、PO 创建 —— 使用 Open Interface(非单条行级API)
Oracle 官方不支持直接调 PL/SQL 一行行创建 PO,标准做法是写接口表后调并发程序:
并发程序(Executable) | PL/SQL 底层包 | 说明 |
|---|---|---|
|
| 从 |
| 同上 | 导入 BPA / Quotation / RFQ |
| AutoCreate 从 PR→PO(Form中AutoCreate后台调此) |
接口表:PO_HEADERS_INTERFACE/PO_LINES_INTERFACE/PO_LINE_LOCATIONS_INTERFACE/PO_DISTRIBUTIONS_INTERFACE
四、辅助查询与工具 Package(常被方案引用)
Package | 用途 |
|---|---|
| MRP/PR自动寻源推荐供应商 |
| 取OU本位币 |
| 跨OU汇率获取 |
| 根据编号反查ID(常用校验) |
五、接收(Receiving)关联 API
Package / 并发 | 说明 |
|---|---|
| 外部WMS写入收货 |
| ROI方式处理接收事务(较少直接用) |
六、典型调用伪代码示例(Cancel PO)
BEGIN fnd_global.apps_initialize(user_id => 1804, resp_id => 20707, resp_appl_id => 201); mo_global.init('PO'); mo_global.set_policy_context('S', :org_id); po_document_control_pub.control_document( p_api_version => 1.0, p_init_msg_list => fnd_api.g_true, p_commit => fnd_api.g_true, x_return_status => l_return_status, p_doc_type => 'PO', -- PO / RELEASE / PA / RFQ / QUOTATION p_doc_subtype => 'STANDARD', -- STANDARD / BLANKET / CONTRACT / PLANNED p_doc_id => :po_header_id, p_action => 'CANCEL', -- CANCEL / CLOSE / FINALLY CLOSE / FREEZE / UNFREEZE p_action_date => SYSDATE, p_cancel_reason => 'Expired', p_cancel_reqs_flag=> 'N', p_org_id => :org_id ); END;七、架构建议
新建 PO/BPA → 走 PDOI 接口表 +
Import Standard Purchase Orders,不要直写基表或找私有包改单(Change Order) →
PO_DOCUMENT_UPDATE_GRP.UPDATE_DOCUMENT(R12推荐)或PO_CHANGE_API1_S.UPDATE_PO取消/关单 →
PO_DOCUMENT_CONTROL_PUB.CONTROL_DOCUMENT批量 PR 导入 →
PO_REQUISITIONS_INTERFACE_ALL+ Requisition Import