华为MetaERP 在多OU(Multi-Org / MOAC)环境下做PO接口开发,接口表中的 ORG_ID不是随意填的数字,它有严格的关联与校验规则。以下从数据定义、关联SQL、并发程序校验、常见

📅 2026/7/17 21:37:52 👁️ 阅读次数 📝 编程学习
华为MetaERP 在多OU(Multi-Org / MOAC)环境下做PO接口开发,接口表中的 ORG_ID不是随意填的数字,它有严格的关联与校验规则。以下从数据定义、关联SQL、并发程序校验、常见

在多OU(Multi-Org / MOAC)环境下做PO接口开发,接口表中的ORG_ID不是随意填的数字,它有严格的关联与校验规则。以下从数据定义、关联SQL、并发程序校验、常见坑点四个维度说明。


一、基本关联规则

PO各接口表中的ORG_ID字段,直接等值关联HR_OPERATING_UNITS.ORGANIZATION_ID,代表该笔采购单据所属的业务经营单位(Operating Unit)。

-- 标准关联校验SQL SELECT hou.organization_id AS org_id, hou.name AS operating_unit_name, hou.short_code, hou.business_group_id, gl.set_of_books_id AS ledger_sob_id FROM hr_operating_units hou JOIN gl_ledgers gl ON hou.set_of_books_id = gl.ledger_id WHERE hou.organization_id = :p_org_id; -- 接口表填入的ORG_ID

关键规则:

  • PO_HEADERS_INTERFACE.ORG_ID=HR_OPERATING_UNITS.ORGANIZATION_ID(数值型,非NAME/CODE)

  • 同一个OU下的PO共享同一ORG_ID,基表PO_HEADERS_ALL.ORG_ID即从此继承

  • PO_REQUISITIONS_INTERFACE_ALL.ORG_IDRCV_HEADERS_INTERFACE.ORG_ID同理关联HR_OPERATING_UNITS

⚠️ORG_ID(经营单位)≠ORGANIZATION_ID(库存组织/Inventory Org),后者填在PO_LINE_LOCATIONS_INTERFACE.SHIP_TO_ORGANIZATION_IDPO_DISTRIBUTIONS_INTERFACE.DESTINATION_ORGANIZATION_ID,两者不可混淆。

二、多OU环境下接口表 ORG_ID 必须满足的前置条件

在R12 MOAC架构下,填入接口表的ORG_ID必须同时满足:

校验项

说明

存在于HR_OPERATING_UNITS

ORGANIZATION_ID必须是已定义的 Operating Unit,且DATE_DISABLED IS NULL

同Ledger关联

通常一个OU绑定一个SET_OF_BOOKS_ID(Ledger),接口中引用的币种/科目须属于该Ledger

在运行职责的安全配置文件内(并发程序运行时)

Import程序以提交请求的"职责+用户"运行,MO: Security Profile对应的安全配置文件必须包含该ORG_ID,否则报无权限或静默跳过

Vendor Site属于同OU

PO_HEADERS_INTERFACE.VENDOR_SITE_ID对应的AP_SUPPLIER_SITES_ALL.ORG_ID须 = 接口表ORG_ID,否则导入报供应商地点无效


三、并发程序(Import Std PO)对 ORG_ID 的处理逻辑

  • 单OU职责(仅设MO: Operating Unit):接口行ORG_ID若为空,程序用会话MO_GLOBAL.GET_CURRENT_ORG_ID填充;若有值则以接口表值为准(须与会话有权限的OU一致)。

  • MOAC多OU职责(设MO: Security Profile):程序会遍历安全配置文件内所有OU,能处理接口表中不同ORG_ID的多行(推荐做法:接口表每行明确填对应ORG_ID)。

  • ORG_ID不匹配安全配置文件:该行被标记错误或在日志提示ORG_ID not accessible by current responsibility

最佳实践:外部系统写入接口表时,务必通过HR_OPERATING_UNITS.NAMESHORT_CODE反查ORGANIZATION_ID再填充,不做硬编码数值。

-- 推荐:从OU名称解析ORG_ID SELECT organization_id INTO l_org_id FROM hr_operating_units WHERE UPPER(name) = 'SHENZHEN PURCHASING OU' AND date_disabled IS NULL;

四、各接口表 ORG_ID 字段汇总

接口表

ORG_ID字段

关联基表/视图

PO_HEADERS_INTERFACE

ORG_ID

HR_OPERATING_UNITS.ORGANIZATION_ID→ 写入PO_HEADERS_ALL.ORG_ID

PO_LINES_INTERFACE

无独立ORG_ID

继承PO_HEADERS_INTERFACE.ORG_ID(通过 INTERFACE_HEADER_ID)

PO_LINE_LOCATIONS_INTERFACE

无独立ORG_ID

继承头

PO_DISTRIBUTIONS_INTERFACE

ORG_ID(可选填,建议填)

应与头ORG_ID一致,校验用

PO_REQUISITIONS_INTERFACE_ALL

ORG_ID

HR_OPERATING_UNITS.ORGANIZATION_IDPO_REQUISITION_HEADERS_ALL.ORG_ID

RCV_HEADERS_INTERFACE

ORG_ID

HR_OPERATING_UNITS.ORGANIZATION_ID(接收归属OU)


五、常见多OU接口问题排查清单

  • ✅ 接口表ORG_ID能否在HR_OPERATING_UNITS中找到且未禁用

  • VENDOR_SITE_ID.ORG_ID = PO_HEADERS_INTERFACE.ORG_ID(供应商地点须在同一OU定义)

  • ✅ 提交 Import Standard PO 的职责 Security Profile 是否包含该ORG_ID

  • SET_OF_BOOKS_ID(接口表或Distribution层)与OU绑定的Ledger一致

  • ✅ 多OU混合导入时,不同行的ORG_ID分别对应各自OU,且职责Security Profile覆盖全部