
EBS R12 里“项目预算跨部门控制”不是 PA 自己单干而是靠PA Budgetary Control GL Budgetary ControlTop-Down Integration Project Budget Account Generation Workflow 三件东西拼起来实现的。核心思路一句话项目预算 baseline 时按“项目段任务资源”拆出多套 GL 账户不同成本中心/部门段反向记预算日记账进 GL 各部门的控制预算后续各部门发起的 PR/PO/AP 既过 PA 项目级 Funds Check也过 GL 按成本中心做的 Funds Check。下面分层讲清楚。一、先澄清“跨部门”在 EBS 里的两种含义口径EBS 中对应机制是否 PA 原生A. 同一项目被多个成本中心/部门花钱如研发部IT部共建一个项目GL 科目组合里的 Cost Center 段不同Top-Down Integration 把项目预算按 CC 拆账户回写 GL是标准功能B. 同一项目跨多个OUOperating Unit 花钱PA 项目本身可跨 OU 建交易但 GL Budgetary Control 是按 Ledger 走的跨 OU 若同 Ledger 可控跨 Ledger 只能靠 PA 项目级控制兜底部分支持跨 Ledger 不硬控实际项目里 95% 说的“跨部门”是 A 类Cost Center 维度下面按 A 讲。二、设计原理项目预算如何“落”到部门1. 控制公式带部门维度某部门成本中心 CCx 下可用预算 GL 控制预算(CCx科目项目段P) - 该项目该 CC 下 Commitment(Obligation) - Actual 同时 PA 侧 项目 P / Task T 可用预算 项目基线预算 - 全部门合计占用两遍都过才放行PA 控“项目别超”GL 控“部门别超”。2. Top-Down Integration 的账户拆分动作项目预算 baselinePA: Budget Integration Workflow时读 Project Budget Account Generation WorkflowWFPAWFBUI.wft关联的项目预算账户派生对每一行 budget lineProject/Task/Resource派生出一个 GL 账户派生规则里必须决定 Cost Center 段取谁常见做法budget line 上挂一个“预算归属成本中心”属性通过 Task 扩展属性 / Resource 映射 / WF 里查 PA_TASKS 或 PA_PROJECTS 的自定义段WF 输出账户如公司-CC_RD-500010-项目P-任务Tbaseline 时按这些账户生成预算日记账Dr 费用预算 / Cr 项目留成进 GL 对应 CC 的控制预算关键点项目预算总额 80 万其中 Task T1 研发部 CC_RD 占 50 万、Task T2 IT部 CC_IT 占 30 万 → baseline 后 GL 里 CC_RD 那行控制预算 50 万CC_IT 30 万。之后研发部提 PR 只能吃 CC_RD 的 50 万池子IT 部提 PR 只能吃 CC_IT 的 30 万池子谁超谁被拦。3. 交易进来时的双维 Funds CheckPR/PO/AP 发票带项目段 P 成本中心 CC审批/验证时GL Funds Check按 CC科目项目段查 GL 控制预算部门级占用PA Funds Check按 ProjectTaskResource 查 PA 控制余额项目级占用Top-Down 模式要求“项目控制级 ≥ Funding 预算控制级”且任一边 Absolute 失败则整体失败三、实现路径EBS R12 落地步骤1. 基础开关GL LedgerEnable Budgetary Control Y建 Funding Budget如PROJ_FUND_2026StatusOpen/CurrentGLBudget Control Group “Standard”SourceProjectsCategoryTotal Burdened CostProfilePA: Enable Budget Integration and Budgetary Control Feature YSite 级ProfilePA: Days to Maintain BC Packets 3或业务自定ProfilePA: Allow Override of Budget Accounts N防用户手改抵消拆分逻辑AP/PO Financial OptionsUse PO EncumbranceYEncumbrance Types 挂 Commitment/Obligation/Invoice2. Project Type / Template 设 Top-DownProjects → Setup → Project Types → Budgetary Control TabBudget or Plan Type 项目成本预算类型如 COST_BUDGETBalance Type EncumbranceTop-Down 必须Non-Project Budget GL Funding BudgetPROJ_FUND_2026Control Flag 勾选LevelsProject / Top Task / Task / Resource Group / Resource 分别设 Absolute/TrackTime PhaseAmount TypeTotal Burdened CostBoundaryYearAllow Override at Project Level 勾允许单项目改3. 定制 Project Budget Account Generation Workflow跨部门核心WF_WORKFLOW_NAME PA Budget Account Generation或项目预算账户派生 WF原厂标准 WF 只按项目默认账户生不含成本中心拆分 →必须定制定制逻辑PL/SQL 在 WF 活动里-- 伪代码 l_cc : nvl(get_task_budget_cc(p_project_id,p_task_id), get_resource_default_cc(p_resource_id)); l_gl_ccid : gl_account_gen( company p_company, cost_center l_cc, account p_exp_account, project p_project_num, task p_task_num );预算录入时在 budget line 级维护“预算归属成本中心”可放 Task 扩展属性BUDGET_CC或 Resource List 里加列baseline 前用Generate Budget Accounting跑一遍看 By Account Tab 是否按 CC 拆开4. 录项目预算并 Baseline项目 P-X 建 Budget VersionTask T1 设备 50 万CC_RDTask T2 实施 30 万CC_ITBudget Entry Method 必须允许 Total Burdened CostRaw 自动抄 BurdenedBaseline→ 触发 PA: Budget Integration Workflow → 生成 SLA 事件 → 过账 GL 预算日记账按 CC 拆分的两笔跑PRC: Transfer Journal Entries to GL传预算日记账并 Post或手工 Post此时 GL Funds Available 查询CC_RD/500010/P-X 有 50 万CC_IT/500010/P-X 有 30 万5. 交易控制研发部 CC_RD 提 PR 60 万项目 P-XTask T1GL 边 CC_RD 池 50 万不够 → 失败PA 边 T1 50 万也不够 → 失败改提 40 万GL CC_RD 过PA T1 过 → 放行Obligation 占 40 万IT 部 CC_IT 提 PO 35 万GL CC_IT 30 万不够 → 拦PA T2 30 万也不够 → 拦6. 余额维护定期跑PRC: Maintain Budgetary Control Balances配合 PA: Days to Maintain BC Packets 清 packet。四、和非集成Non-Integrated的区别很多人踩坑Non-Integrated PA Budgetary Control只控项目/任务级不回写 GL 各部门预算部门级随便花项目级超了才拦 → 不满足“跨部门控制”Bottom-Up项目预算从 GL 部门预算汇总上来Balance TypeBudget不按 Encumbrance 反写控制粒度粗且部门预算要先存在Top-Down推荐项目预算是源头按 CC 拆账户反写 GL → 真正“项目管总盘、部门管分盘”五、一个最小可懂的案例政府课题 P-GOV2026总额 100 万Task T1 设备采购预算 60 万归属 CC_RD研发部Task T2 外协服务预算 40 万归属 CC_OUT外联部WF 派生T1 baseline → GL 借 500010 CC_RD 项目 P-GOV2026 60 万T2 baseline → GL 借 500010 CC_OUT 项目 P-GOV2026 40 万研发部提 PR 买服务器 65 万CC_RD/P-GOV2026/T1GL Funds CheckCC_RD 可用 6065 → FailPA Funds CheckT1 可用 6065 → Fail→ 拦截研发部不能挪用外联部 40 万里一分钱因为账户段根本不在同一 CC。外联部提 PR 30 万CC_OUT/T2两边过占用后 CC_OUT 剩 10 万。六、落地时三个最容易翻车的点WF 没定制直接用标准 WF所有预算行都落到项目默认 CC等于“跨部门”失效变成单部门池。Burdened Cost 没开Budget Entry Method 只允许 Raw → PA 不跑 Funds CheckPA 只用 Burdened 控。GL 预算先没 OpenFunding Budget 状态不是 Current/Openbaseline 时 Check Funds 直接 RejectWF 回滚。