25 / 03 / 27

货币与汇率的运行机制

1 前言

我们在 NetSuite 中常常会遇到下列的问题:

  1. 为什么系统中的总账报表、合并报表和事务处理单据的金额不一致?

  2. 为什么系统中的总账报表、合并报表中的借贷金额会不平?

  3. 为什么事务处理搜索中的金额字段和事务处理单据的金额字段不一致?

  4. ……

那么产生这些问题的原因的是什么呢?

要回答上述的这些问题,我们需要了解 NetSuite 中货币和汇率之间是什么关系?以及汇率类型是如何决定事务处理金额在总账报告、合并报告中的表现方式的?

2 基础机制 *

在弄清楚 NetSuite 报告中的货币影响时,必须先了解货币的 3 个基础机制:

  • 货币转换:当事务处理单据中的交易货币与子公司基础货币的货币不同,NetSuite 记录总账影响时,将按照汇率字段中包含的汇率将金额转换为基础货币金额。

  • 货币重估:对现有外币事务处理进行重新估值。

    货币重估其实是计算汇兑损益,汇兑损益有 2 种:

    1. 已实现的汇兑损益:指在外币交易完成并结算后,根据实际的兑换汇率差异导致的损益。例如,公司购买外国货币支付货款,然后再将外国货币兑换成本地货币时,如果实际兑换汇率高于购买时的汇率,将导致已实现的汇兑损失;反之则为已实现的汇兑盈利

    2. 未实现的汇兑损益:指在外币交易尚未完成或结算前,根据当前市场汇率变动所引起的资产或负债价值变动而导致的损益。例如,公司持有外币资产或负债,但尚未进行兑换或结算,此时外币价值的变动将导致未实现的汇兑损益。

  • 货币换算:运行合并报表或已保存搜索时,子公司货币金额是转换为有权访问最近公共祖先的货币。值得注意的是:与前两个机制相比,该机制不是事务性质的,仅仅是报告的表现方式。
    例如,子公司基础货币为欧元,母公司基础货币为美元,运行合并报表时,子公司的欧元在报表中将被转换为美元。

2.1 什么是有权访问最近公共祖先(LCP:Lowest Common Parent)

假设公司层级如下:

如果,我们只能访问新加坡和日本子公司,那么所有货币金额均以英镑为单位,因为 Wolfe UK 是这两家子公司的 LCP。如果我们可以访问日本和德国子公司,货币金额将以美元显示。

3 汇率表

NetSuite 中有 2 套汇率表,其中货币汇率表用于货币重估合并汇率表用于货币换算

货币转换使用事务处理单据中的汇率字段值,该字段值来源于货币汇率表,但可以手动修改。

货币汇率表合并汇率表
应用事务处理合并报告;
事务处理的已保存搜索
日期范围自生效日期起会计期间
转换机制子公司的基础货币和事务处理的交易货币之间转换子公司之间的基础货币转换
系统路径列表 > 会计 > 货币汇率 列表 > 会计 > 合并汇率
更新机制手动添加新的货币汇率;
使用货币汇率集成功能进行每日自动更新
手动编辑合并汇率表;
点击合并汇率表的自动计算

3.1 货币汇率表转换机制示例

货币汇率表只能维护本位币与本位币、本位币与非本位币之间的汇率假设系统有如下币种:

  • USD,本位币

  • CNY,本位币

  • GBP,非本位币

那么就会产生如下的货币汇率表

本位币原币汇率
USDCNY0.14104186
USDGBP1.31309726
CNYUSD7.09009373
CNYGBP9.30998263

3.2 合并汇率转换机制示例

假设公司层级结构如下:

  • A 公司

    • B 公司

    • C 公司

      • D 公司

      • E 公司

来源公司目标公司是否为间接汇率当前汇率平均汇率历史汇率
DC2.12.12.1
EC3.43.43.4
CA1.51.51.5
DA3.153.153.15
EA7.147.147.14

合并汇率有 3 种类型,上表为了方便计算,将 3 种汇率类型值统一。实际情况中,3 种汇率类型值可能不相同

从公司层级角度来看,合并汇率分为 2 种:

  • 直接汇率: 母公司和直接子公司之间的汇率,例如 A 公司和 B 公司。该汇率可以直接编辑或点击自动计算

  • 间接汇率(派生汇率):超过一级的公司之间的汇率,例如 A 公司和 D 公司。该汇率由系统更新

⚠️抵销公司的汇率无法被编辑

间接汇率等于子公司到最顶层母公司之间汇率的乘积。
例:A公司与D 公司的合并汇率 = A 公司与 C 公司的合并汇率 x C 公司与 D 公司汇率 = 1.5 x 2.1 = 3.15

4 合并汇率 *

4.1 合并汇率类型

合并汇率表有 3 种类型:

  • 即期(Current) :取截至报告期间最后一天的汇率,通常用于资产类科目和负债类科目

  • 平均(Average) :取报告期间的加权平均汇率,通常用于费用类科目、收入类科目

  • 历史(Historical):取报告期间的加权平均汇率,通常用于权益类科目

关于科目类型,可以查看总账模型 的内容

4.2 合并汇率计算逻辑与示例

假设公司层级结构如下:

  • A 公司为母公司,本位币为美元 USD($)

  • B 公司为子公司,本位币为英镑 GBP(£)

B 公司 1 月份的交易情况如下表所示:

交易日期货币汇率金额科目的一般汇率类型
1 月 1 日2£100平均(Average)
1 月 1 日2£300历史(Historical)
1 月 15 日2.5£200平均(Average)
1 月 15 日2.5£200历史(Historical)
1 月 31 日3£300平均(Average)
1 月 31 日3£100历史(Historical)
  • 当前汇率:使用截止期末(1 月 31 日)货币汇率列表中的英镑 GBP 兑美元 USD 汇率
    当前汇率 = 3

  • 平均汇率:是基于科目的一般汇率类型为“平均”且已过账的所有交易金额的加权平均值。每笔交易的货币汇率为交易当日有效的英镑 GBP 兑美元 USD 汇率。
    平均汇率 = (2 × 100 + 2.5 × 200 + 3 × 300) ÷ (100 + 200 + 300) = 2.6666667

  • 历史汇率:是基于科目的一般汇率类型为“历史”且已过账的所有交易金额的加权平均值。每笔交易的货币汇率为交易当日有效的英镑 GBP 兑美元 USD 汇率。
    历史汇率 = (2 × 300 + 2.5 × 200 + 3 × 100) ÷ (300 + 200 + 100) = 2.3333333

4.3 科目表中的合并汇率类型

每个科目类型都有 2 个合并汇率类型值:

  • 现金流汇率类型 Cash Flow Rate Type:用于现金流量报表

  • 一般汇率类型 General Rate Type:用于财务报表、已保存搜索等

4.4 累积换算调整 Cumulative Translation Adjustment

NetSuite 在报表中使用合并汇率类型进行货币换算,不同类型的科目采用的汇率不同,因此在本币时报表是平的,换算为外币时可能会导致报表不平。

针对这种情况,在财务报表中需要一个特殊调整科目进行平衡,这个科目就是累积折算调整(CTA:Cumulative Translation Adjustment)

  • CTA 代表合并汇率类型与实际汇率之间的差异所产生的金额

  • CTA 本质是对子公司的净投资产生的累计外币收益或损失

CTA 用于跨不同合并汇率类型的科目进行合并的地方,例如合并试算表、合并资产负债表等。例如:

  • 在资产负债表中对应标题为“累计折算调整”的行

  • 在现金流量表中对应标题为“汇率对现金的影响”的行

报告中的 CTA 科目金额是动态计算的,并非真正过账的数据

在货品、税码、关联记录或大多数事务处理中无法选择 CTA 科目,但在日记帐分录中可以选择 CTA 科目。

4.4.1 CTA 计算逻辑与示例

假设公司层级结构如下:

  • A 公司为母公司,本位币为美元 USD($)

  • B 公司为子公司,本位币为英镑 GBP(£)

B 公司的合并资产负债表如下:

金额(GBP)综合费率类型合并汇率计算合并金额(USD)
Assets 资产£250当前2.0250 × 2$500
Liabilities 负债(£100)当前2.0100 × 2($200)
Retained Earnings 留存收益(£100)平均2.5100 × 2.5($250)
Equity 权益(£50)历史3.050 × 3($150)
Balance in GBP 英镑余额£0CTA($100)

CTA 计算公式:CTA = 净资产 × 当前汇率 -( 所有者权益 × 历史汇率 + 净利 × 平均汇率)

代入上表数据:CTA = ( 250 * 2 - 100 * 2 ) - ( 100 * 2.5 + 50 * 3 ) = -100

5 报表中的货币机制

报表中没有直接提供设置合并汇率类型的选项,而是使用科目中设置的汇率类型。货币使用 LCP 货币。

  • 一般汇率类型:

    • 即期(Current) :资产类科目、负债类科目

    • 平均(Average) :费用类科目、收入类科目

    • 历史(Historical):权益类科目

  • 现金流汇率类型:

    • 平均(Average) :除权益类科目之外的所有科目

总结:

  • 资产负债表由资产类科目、负债类科目、权益类科目组成:

    • 资产类科目和负债类科目使用当前汇率

    • 权益类科目使用历史汇率

  • 利润表(损益表)有费用类科目、收入类科目组成,都使用平均汇率

  • 总账报表则根据实际科目类型,使用对应的汇率类型

个人思考

以下皆为简单理解,更加深层次的原因需要更多的财务知识,暂不作深究

  1. 为什么利润表使用平均汇率?

利润表是反映企业在一段会计期间的经营成果的财务报表。由于它反映的是某一期间的情况,所以需要使用平均汇率。

  1. 为什么权益类科目使用历史汇率?
    资产负债表与利润表存在联系,其中利润表的净利润部分与资产负债表的所有者权益部分(权益类科目所在部分)存在勾稽关系,为了保证两个报表核对准确,所以权益类科目使用历史汇率。
  • 历史汇率和平均汇率都是加权平均值

  • 留存收益 也称 未分配利润

6 事务处理搜索中的货币机制

事务处理搜索的结果子选项卡中的合并汇率字段可以让我们选择合并汇率类型,这一点相对报表有所不同,货币同样是 LCP 货币。

  • 即期(Current) :使用事务处理发生期间的历史综合汇率

  • 平均(Average) :使用所选日期范围/期间的当前合并汇率,如果未选择期间或日期,则使用运行搜索日期的当前汇率

  • 历史(Historical):使用事务处理发生期间的历史合并汇率

  • 按科目(Per-Account):使用为事务处理中科目的一般汇率类型,可以是平均汇率、当前汇率或历史汇率。此选项是默认选项。

  • **无(None):**使用事务处理单据上的子公司基础货币,汇率为事务处理单据中的汇率字段值

7 数据集和工作簿中的货币机制

数据集和工作簿中的金额字段可能会显示多种货币的数据,要统一查看这些金额字段,必须将字段值合并或转换为单一货币:

  • 在事务处理会计行(TransactionAccountingLine) 中,金额字段中的货币值以事务处理子公司的基础货币存储。事务处理会计行中的金额字段只能进行合并,默认情况下,当工作簿表格视图、数据透视表和图表中包含交易会计行的金额字段时,将启用货币合并

  • 在事务处理和事务处理行中,金额字段中的货币值以事务处理的货币存储。事务处理和事务处理行金额字段值只能进行转换。货币转换是工作簿中提供的附加工具,能够将字段的值从一种货币转另一种货币。

7.1 货币合并

货币合并功能使用的科目中的一般汇率类型在合并汇率表中对应的汇率值

7.1.1 自定义公式字段的货币合并

在数据集生成器中,可以使用上下文值#currency_consolidated创建自定义公式字段合并货币字段值

例如:合并交易会计行记录类型中的净额字段值,可以使用以下公式:

// 事务处理行关联事务处理会计行的净额 TO_NUMBER({transactionlines.accountingimpact.netamount#currency_consolidated})

7.1.2 工作簿界面的货币合并

在工作簿界面中,事务处理会计行金额字段默认启用货币合并。如果要停用,可以在数据集中找到事务处理会计行金额字段,然后去掉筛选器窗口的合并字段框。

7.2 货币转换

货币转换功能可以将金额字段的值转换为任一货币,使用的是货币汇率表中的汇率值

7.2.1 自定义公式字段的货币转换

在数据集生成器中,可以使用上下文值#converted创建自定义公式字段转换货币字段值

例如:发票的支付金额,可以使用以公式:

TO_NUMBER({foreignamountpaid#converted})

#converted还支持在公式中指定货币、指定日期的汇率,日期必须使用YYYY-MM-DD格式

// 1是USD的内部ID TO_NUMBER({foreigntotal#converted[1]}) TO_NUMBER({foreigntotal#converted[1;2024-01-30]});

7.2.2 工作簿界面的货币转换

我们可以从工作簿界面转换事务处理和事务处理行中金额字段的货币值。需要注意的是,该功能在数据集中不可用。
要从工作簿界面应用转换,可以单击字段旁边的菜单,然后选择货币,提供了以下选项:

  • 显示原始内容:以事务处理所用的原始货币显示每笔金额。在表视图和数据透视表中,这是事务处理和事务处理行金额字段的默认选项。

  • 应用转换:使用在“转换为窗口”中选择的货币和日期转换每个金额。在图表中,这是事务处理和事务处理行金额字段的默认选项。

  • 转换选项: 打开“转换为窗口”,然后选择“应用转换”选项时要使用的货币和日期。换算中使用的汇率取自货币汇率表。

8 SuiteQL 中的货币机制

SuiteQL 提供了 BUILTIN.CONSOLIDATEBUILTIN.CURRENCY_CONVERT两个内置函数用于货币值操作

8.1 BUILTIN.CONSOLIDATE

BUILTIN.CONSOLIDATE 函数相当于工作簿中的 currency_consolidated,只能对事务处理会计行中的金额字段进行转换

BUILTIN.CONSOLIDATE 函数的作用是将字段中存储的货币金额转换为目标货币。使用示例:

BUILTIN.CONSOLIDATE(TransactionAccountingLine.Amount, 'LEDGER', 'DEFAULT', 'DEFAULT', 1, 325, 'DEFAULT')

BUILTIN.CONSOLIDATE 函数使用下列参数:

  1. 原始金额字段名称

  2. 视图类型,选项值:

    • LEDGER

    • INCOME

目前只能根据名称推测:LEDGER 是总账、INCOME 是损益表
这两者具体有什么区别?目前所能查阅的所有资料都没有说明!!!

  1. 合并汇率类型,选项值:

    • DEFAULT

    • STANDARD,合并报告使用“合并汇率”表

    • BUDGET,包含预算和实际金额的报告(预算损益表、预算损益表详细信息以及预算与实际)使用单独的预算汇率表来换算预算金额

  2. 子公司汇率类型,选项值:

    • DEFAULT

    • CURRENT

    • HISTORICAL

    • AVERAGE

    • SQL EXPRESSION

若设置为DEFAULT,则会根据科目的一般汇率类型自动获取合并汇率表中的汇率值

  1. 目标子公司,默认值是母公司

    • 子公司内部 ID

    • SQL EXPRESSION

  2. 期间,默认是所选期间,如果未选择期间则是运行 SuiteQL 的期间

    • 期间内部 ID

    • SQL EXPRESSION,例如:使用BUILTIN.PERIOD 函数

  3. 账簿,默认是主账簿

    • DEFAULT

    • SQL EXPRESSION

除了原始金额字段名称和视图类型之外,其它参数都可以使用'DEFAULT'作为参数值

8.2 BUILTIN.CURRENCY_CONVERT

BUILTIN.CURRENCY_CONVERT 函数相当于工作簿中的converted,只能对事务处理事务处理行中的金额字段进行转换

BUILTIN.CONSOLIDATE 函数的作用是使用特定日期汇率将字段中存储的货币金额转换为目标货币。使用示例:

BUILTIN.CURRENCY_CONVERT(sales.amount) BUILTIN.CURRENCY_CONVERT(sales.amount, 1) BUILTIN.CURRENCY_CONVERT(sales.amount, 1, TO_DATE('2019-01-30', 'YYYY-MM-DD'))

BUILTIN.CURRENCY_CONVERT 函数使用下列参数:

  1. 原始金额字段名称

  2. 目标货币(可选;默认值是母公司货币),接受下列值:

    • Number

    • Date

  3. 使用汇率的日期(可选;默认值为今天的日期)

Powered by Gridea