深入了解 Dynamics 365 货币字段
本文通过一个简单但完整的实验,来梳理 Dynamics CRM 中的货币字段(Currency Field)是如何工作的,以及它在多币种场景下是什么样的表现
Table of contents
Open Table of contents
前言
在本文的实验环境中:
-
基础货币 (Base Currency) 设置为美元(USD)
-
新建了2个用于实验的实体,两个实体之间是 1:N 关系(Invoice → Invoice Detail)
- Invoice 实体
- Invoice Detail 实体
基本概念
在 Dynamics 365 中,货币(Currency)是一种特殊的字段类型,它用于存储与金额相关的数据,还有一个容易被忽略但重要的点是:当你在实体中创建一个“货币字段”时,系统实际上会在后台自动创建 4 个字段
以我在 Invoice Detail 实体中新建的 Amount 货币字段为例,系统在后台生成了以下字段:
gdh_amount—> 存储实际输入的货币值gdh_amount_Base—> 存储根据汇率换算后的基础货币金额
此外,还会自动关联两个字段:
- 币种(Currency)
- 汇率(Exchange Rate)

开始实验
Step 1. 新建币种(Currency)
打开 Power Platform 管理中心 —> 选择 “环境” —> 进入 “设置” —> 选择 “币种”

在弹出的页面,新添币种

我添加了两个币种:人民币和日元,新建的信息如下:
| 货币名称 | 货币代码 | 货币符号 | 汇率 | 货币精度 |
|---|---|---|---|---|
| US Dollar | USD | $ | 1.0000 | 2 |
| RMB | CNY | ¥ | 7.2500 | 2 |
| JPY | JPY | JPY ¥ | 147.6300 | 2 |
TIP
(1) 汇率更新时,Dynamics 365 不会重新计算所有货币字段
(2) 汇率由系统管理员设定
Step 2. 添加实验数据:多币种金额如何换算?
在 Invoice Detail 中,分别创建了3条记录,使用不同币种填写 Amount 字段:
| No. | Currency | Amount | Amount(Base) | Exchange Rate |
|---|---|---|---|---|
| SASD-00001260 | JPY | JPY ¥ 1,000.00 | $6.77 | 147.6300000000 |
| SASD-00001259 | US Dollar | $1,000.00 | $1,000.00 | 1.0000000000 |
| SASD-00001258 | RMB | ¥ 1,000.00 | $137.93 | 7.2500000000 |

打开 Invoice 记录可以清楚看到,当币种是 “基础货币(USD)” 时,Amount 与 Amount(Base) 完全一致,当币种不是 “基础货币” 时,系统会根据:Amount(Base) = Amount ÷ Exchange Rate 自动完成换算,无需任何自定义逻辑或插件
Step 3. 货币字段 + 汇总(Rollup)会发生什么?
接下来我在 Invoice 实体中新建一个货币类型的汇总字段:Example - Total Amount,该字段用于汇总当前 Invoice 下所有 Invoice Detail 的金额

汇总字段的配置规则如下:
- 汇总来源:Invoice Detail
- 汇总字段:Amount
- 汇总方式:Sum

汇总结果:

最终你会发现,系统并不是直接 “把不同币种的 Amount 相加”,实际执行逻辑是:
- 将子表金额统一转换为 Base 金额
- 汇总 Amount(Base)
- 再根据当前 Invoice 的 “币种(Currency)” 和 “汇率(Exchange Rate)” ,换算为显示金额,
也就是说,汇总字段的计算核心,永远围绕 Amount(Base) 展开
TIP
Dynamics 365 中的汇总字段是定时计算的,可在系统作业中设置频率,最快每 1 小时计算一次,也可以在字段旁点击“小键盘”图标,手动触发 重新计算
