MetaERP 总账里“实时汇率转换”不是界面上算个乘法那么简单,而是汇率主数据 + 汇率类型 + 凭证上下文 + 前端联动 + 后端防篡改 五件事串起来。下面按“用户看到什么 / 系统怎么算 / 后台怎么管”讲。
一、凭证界面上用户看到什么
录入外币凭证时,凭证头/行上通常出现这组字段:
币种(原币) USD 本位币 CNY 汇率类型 SPOT / CORP / PERIOD-AVG / HIST / USER 汇率日期 2026-09-11(默认=记账日期/业务日期) 汇率 7.1020 原币金额 10,000.00 USD 本位币金额 71,020.00 CNY ← 自动算 报告币金额 9,800.00 EUR ← 若启用报告币,再折一次行为特征:
- 选了币种 + 日期 →汇率自动带出
- 改原币金额 → 本位币实时变
- 改汇率 → 本位币实时变(有权限才让改)
- 改记账日期 → 重新查汇率表
- 过账后汇率/金额不可随意改,只能冲销或调整
二、汇率从哪来:汇率主数据层
MetaERP 背后有一张“汇率服务”数据(类似 EBS 的 GL_DAILY_RATES / Fusion 的 Manage Daily Rates):
汇率表: From Currency | To Currency | Rate Type | Effective Date | Rate | Inverse Flag USD | CNY | SPOT | 2026-09-11 | 7.1020 USD | CNY | CORP | 2026-09-01 | 7.0800 USD | CNY | PERIOD-AVG | 2026-09 | 7.0900 USD | CNY | HIST | 2020-03-15 | 6.9900汇率类型含义(MetaERP 沿用行业模型):
- SPOT 即期:日常外币交易、收入/应付初始记账
- CORP 公司汇率:集团内部折算
- PERIOD-AVG 期间平均:利润表近似汇率
- PERIOD-END 期末汇率:货币性项目重估
- HIST 历史汇率:资产、权益类历史成本
- USER 手工汇率:录入时自己填
三、“实时”是怎么实现的(前端逻辑)
1. 取值优先级
1. 用户手工填的汇率(有汇率覆盖权限) 2. 凭证头指定的汇率类型 + 汇率日期 → 查汇率服务 3. 账簿默认汇率类型(如 SPOT) 4. 系统当前日期汇率 5. 找不到 → 报错,不让过账2. 界面联动公式
本位币金额 = 原币金额 × 汇率 报告币金额 = 原币金额 × 报告币汇率 或 本位币金额 × 报告币/本位币汇率(看账簿配置)前端不是“保存时才算”,而是:
- 输入框 blur / change
- 调
/gl/rate/convert?from=USD&to=CNY&type=SPOT&date=2026-09-11&amount=10000 - 返回
{rate:7.1020, baseAmount:71020} - 立刻渲染“借/贷合计(本位币)”
所以叫实时,但不是连外汇市场行情;是实时查内部汇率表 + 实时计算。
四、后端怎么保证“算得对、改不了规则”
1. 汇率服务独立化(云原生做法)
凭证服务 ──→ 汇率服务 ──→ 汇率表 / 中央汇率缓存- 总账不自己存汇率
- AP/AR/FA/项目/合同 都调同一个汇率服务
- 保证:同一天、同一类型、全集团一致
2. 汇率日期 vs 系统日期
- 记账日期 = 2026-09-30,但今天 2026-09-11
→ 取2026-09-30 的即期汇率(如果已维护),不是“今天” - 没维护未来汇率 → 报错或按参数取最近一条
3. 精度与四舍五入
本位币金额 = ROUND(原币 × 汇率, 2)- 科目级精度、币种精度、账簿精度分开配置
- 行级四舍五入误差进“汇兑小数差异”或“ rounding 科目”
- 凭证头借贷平衡校验用的是本位币,不是原币
4. 原币 / 本位币 / 报告币三栏存储
过账后凭证行大概存:
entered_curr = USD entered_amt = 10000 rate_type = SPOT rate = 7.1020 rate_date = 2026-09-11 base_curr = CNY base_amt = 71020 report_curr = EUR report_amt = 9800→ 后续重估、合并、报表都不再反算,直接读历史快照。
五、和“期末汇兑损益”的关系(很重要)
凭证录入时的汇率转换 ≠ 汇兑损益。
时点 | 动作 | 汇率 |
|---|---|---|
业务发生 | 录凭证 | 交易日即期 / 近似汇率 |
收款/付款 | 清账 | 结算日实际汇率 |
月末 | 外币重估 | 期末汇率 |
年末 | 报表折算 | 期末/平均汇率 |
MetaERP 的特点是:
- 日常:交易即核算,跨币种业务实时按记账汇率换算
- 月末:自动重估任务跑应收/应付/银行存款,差额进“汇兑损益”
- 不是人工在凭证里算“我赚了多少汇差”
六、权限与合规控制
- 固定汇率账簿:汇率字段只读
- 普通手工凭证:可改汇率,但写审计日志
- 超过容差(如偏离主汇率 3%):弹审批 / 红字预警
- 历史汇率科目(固定资产、股本):不允许用即期,规则引擎强制 HIST
- 多账簿:主账用 SPOT,管理账可另配平均汇率,但原业务事件不变
七、一个完整例子(界面级)
录一张 USD 费用凭证:
- 选科目:管理费用-差旅费
- 选币种:USD
- 汇率类型:SPOT
- 汇率日期:2026-09-11
- 系统带出汇率:7.1020
- 原币金额:5,000 USD
- 本位币自动:35,510 CNY
- 另一行:银行存款-USD 贷 5,000 USD / 35,510 CNY
- 借/贷本位币相等 → 可提交
- 过账后:USD 余额、CNY 余额、EUR 报告币余额同时写死
月末 USD/CNY 变 7.15:
- 原 5,000 USD 现在值 35,750 CNY
- 重估凭证:借 银行存款-USD 240 / 贷 汇兑收益 240
- 原凭证不动
八、一句话总结
MetaERP 总账的“实时汇率转换”=
选币种 → 按汇率类型+日期查中央汇率服务 → 前端即时算本位币/报告币 → 后端把原币/汇率/本位币三栏落库 → 月末再用期末汇率重估。
录入时解决“这笔账怎么折”,月末再解决“汇率变了差多少”。