25 / 03 / 27
我们在 NetSuite 中常常会遇到下列的问题:
为什么系统中的总账报表、合并报表和事务处理单据的金额不一致?
为什么系统中的总账报表、合并报表中的借贷金额会不平?
为什么事务处理搜索中的金额字段和事务处理单据的金额字段不一致?
……
那么产生这些问题的原因的是什么呢?
要回答上述的这些问题,我们需要了解 NetSuite 中货币和汇率之间是什么关系?以及汇率类型是如何决定事务处理金额在总账报告、合并报告中的表现方式的?
在弄清楚 NetSuite 报告中的货币影响时,必须先了解货币的 3 个基础机制:
货币转换:当事务处理单据中的交易货币与子公司基础货币的货币不同,NetSuite 记录总账影响时,将按照汇率字段中包含的汇率将金额转换为基础货币金额。
货币重估:对现有外币事务处理进行重新估值。
货币重估其实是计算汇兑损益,汇兑损益有 2 种:
已实现的汇兑损益:指在外币交易完成并结算后,根据实际的兑换汇率差异导致的损益。例如,公司购买外国货币支付货款,然后再将外国货币兑换成本地货币时,如果实际兑换汇率高于购买时的汇率,将导致已实现的汇兑损失;反之则为已实现的汇兑盈利
未实现的汇兑损益:指在外币交易尚未完成或结算前,根据当前市场汇率变动所引起的资产或负债价值变动而导致的损益。例如,公司持有外币资产或负债,但尚未进行兑换或结算,此时外币价值的变动将导致未实现的汇兑损益。
货币换算:运行合并报表或已保存搜索时,子公司货币金额是转换为有权访问最近公共祖先的货币。值得注意的是:与前两个机制相比,该机制不是事务性质的,仅仅是报告的表现方式。
例如,子公司基础货币为欧元,母公司基础货币为美元,运行合并报表时,子公司的欧元在报表中将被转换为美元。
假设公司层级如下:
如果,我们只能访问新加坡和日本子公司,那么所有货币金额均以英镑为单位,因为 Wolfe UK 是这两家子公司的 LCP。如果我们可以访问日本和德国子公司,货币金额将以美元显示。
NetSuite 中有 2 套汇率表,其中货币汇率表用于货币重估,合并汇率表用于货币换算。
货币转换使用事务处理单据中的汇率字段值,该字段值来源于货币汇率表,但可以手动修改。
货币汇率表 | 合并汇率表 | |
---|---|---|
应用 | 事务处理 | 合并报告; 事务处理的已保存搜索 |
日期范围 | 自生效日期起 | 会计期间 |
转换机制 | 子公司的基础货币和事务处理的交易货币之间转换 | 子公司之间的基础货币转换 |
系统路径 | 列表 > 会计 > 货币汇率 ![]() | 列表 > 会计 > 合并汇率![]() |
更新机制 | 手动添加新的货币汇率; 使用货币汇率集成功能进行每日自动更新 | 手动编辑合并汇率表; 点击合并汇率表的自动计算 |
货币汇率表只能维护本位币与本位币、本位币与非本位币之间的汇率假设系统有如下币种:
USD,本位币
CNY,本位币
GBP,非本位币
那么就会产生如下的货币汇率表
本位币 | 原币 | 汇率 |
---|---|---|
USD | CNY | 0.14104186 |
USD | GBP | 1.31309726 |
CNY | USD | 7.09009373 |
CNY | GBP | 9.30998263 |
假设公司层级结构如下:
A 公司
B 公司
C 公司
D 公司
E 公司
来源公司 | 目标公司 | 是否为间接汇率 | 当前汇率 | 平均汇率 | 历史汇率 |
---|---|---|---|---|---|
D | C | 否 | 2.1 | 2.1 | 2.1 |
E | C | 否 | 3.4 | 3.4 | 3.4 |
C | A | 否 | 1.5 | 1.5 | 1.5 |
D | A | 是 | 3.15 | 3.15 | 3.15 |
E | A | 是 | 7.14 | 7.14 | 7.14 |
合并汇率有 3 种类型,上表为了方便计算,将 3 种汇率类型值统一。实际情况中,3 种汇率类型值可能不相同
从公司层级角度来看,合并汇率分为 2 种:
直接汇率: 母公司和直接子公司之间的汇率,例如 A 公司和 B 公司。该汇率可以直接编辑或点击自动计算
间接汇率(派生汇率):超过一级的公司之间的汇率,例如 A 公司和 D 公司。该汇率由系统更新
⚠️抵销公司的汇率无法被编辑
间接汇率等于子公司到最顶层母公司之间汇率的乘积。
例:A公司与D 公司的合并汇率 = A 公司与 C 公司的合并汇率 x C 公司与 D 公司汇率 = 1.5 x 2.1 = 3.15
合并汇率表有 3 种类型:
即期(Current) :取截至报告期间最后一天的汇率,通常用于资产类科目和负债类科目
平均(Average) :取报告期间的加权平均汇率,通常用于费用类科目、收入类科目
历史(Historical):取报告期间的加权平均汇率,通常用于权益类科目
关于科目类型,可以查看总账模型 的内容
假设公司层级结构如下:
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
每个科目类型都有 2 个合并汇率类型值:
现金流汇率类型 Cash Flow Rate Type:用于现金流量报表
一般汇率类型 General Rate Type:用于财务报表、已保存搜索等
NetSuite 在报表中使用合并汇率类型进行货币换算,不同类型的科目采用的汇率不同,因此在本币时报表是平的,换算为外币时可能会导致报表不平。
针对这种情况,在财务报表中需要一个特殊调整科目进行平衡,这个科目就是累积折算调整(CTA:Cumulative Translation Adjustment)
CTA 代表合并汇率类型与实际汇率之间的差异所产生的金额
CTA 本质是对子公司的净投资产生的累计外币收益或损失
CTA 用于跨不同合并汇率类型的科目进行合并的地方,例如合并试算表、合并资产负债表等。例如:
在资产负债表中对应标题为“累计折算调整”的行
在现金流量表中对应标题为“汇率对现金的影响”的行
报告中的 CTA 科目金额是动态计算的,并非真正过账的数据
在货品、税码、关联记录或大多数事务处理中无法选择 CTA 科目,但在日记帐分录中可以选择 CTA 科目。
假设公司层级结构如下:
A 公司为母公司,本位币为美元 USD($)
B 公司为子公司,本位币为英镑 GBP(£)
B 公司的合并资产负债表如下:
金额(GBP) | 综合费率类型 | 合并汇率 | 计算 | 合并金额(USD) | |
---|---|---|---|---|---|
Assets 资产 | £250 | 当前 | 2.0 | 250 × 2 | $500 |
Liabilities 负债 | (£100) | 当前 | 2.0 | 100 × 2 | ($200) |
Retained Earnings 留存收益 | (£100) | 平均 | 2.5 | 100 × 2.5 | ($250) |
Equity 权益 | (£50) | 历史 | 3.0 | 50 × 3 | ($150) |
Balance in GBP 英镑余额 | £0 | CTA | ($100) |
CTA 计算公式:CTA = 净资产 × 当前汇率 -( 所有者权益 × 历史汇率 + 净利 × 平均汇率)
代入上表数据:CTA = ( 250 * 2 - 100 * 2 ) - ( 100 * 2.5 + 50 * 3 ) = -100
报表中没有直接提供设置合并汇率类型的选项,而是使用科目中设置的汇率类型。货币使用 LCP 货币。
一般汇率类型:
即期(Current) :资产类科目、负债类科目
平均(Average) :费用类科目、收入类科目
历史(Historical):权益类科目
现金流汇率类型:
总结:
资产负债表由资产类科目、负债类科目、权益类科目组成:
资产类科目和负债类科目使用当前汇率
权益类科目使用历史汇率
利润表(损益表)有费用类科目、收入类科目组成,都使用平均汇率
总账报表则根据实际科目类型,使用对应的汇率类型
个人思考
以下皆为简单理解,更加深层次的原因需要更多的财务知识,暂不作深究
利润表是反映企业在一段会计期间的经营成果的财务报表。由于它反映的是某一期间的情况,所以需要使用平均汇率。
历史汇率和平均汇率都是加权平均值
留存收益 也称 未分配利润
事务处理搜索的结果子选项卡中的合并汇率字段可以让我们选择合并汇率类型,这一点相对报表有所不同,货币同样是 LCP 货币。
即期(Current) :使用事务处理发生期间的历史综合汇率
平均(Average) :使用所选日期范围/期间的当前合并汇率,如果未选择期间或日期,则使用运行搜索日期的当前汇率
历史(Historical):使用事务处理发生期间的历史合并汇率
按科目(Per-Account):使用为事务处理中科目的一般汇率类型,可以是平均汇率、当前汇率或历史汇率。此选项是默认选项。
**无(None):**使用事务处理单据上的子公司基础货币,汇率为事务处理单据中的汇率字段值
数据集和工作簿中的金额字段可能会显示多种货币的数据,要统一查看这些金额字段,必须将字段值合并或转换为单一货币:
在事务处理会计行(TransactionAccountingLine) 中,金额字段中的货币值以事务处理子公司的基础货币存储。事务处理会计行中的金额字段只能进行合并,默认情况下,当工作簿表格视图、数据透视表和图表中包含交易会计行的金额字段时,将启用货币合并。
在事务处理和事务处理行中,金额字段中的货币值以事务处理的货币存储。事务处理和事务处理行金额字段值只能进行转换。货币转换是工作簿中提供的附加工具,能够将字段的值从一种货币转另一种货币。
货币合并功能使用的科目中的一般汇率类型在合并汇率表中对应的汇率值
在数据集生成器中,可以使用上下文值#currency_consolidated
创建自定义公式字段合并货币字段值
例如:合并交易会计行记录类型中的净额字段值,可以使用以下公式:
// 事务处理行关联事务处理会计行的净额 TO_NUMBER({transactionlines.accountingimpact.netamount#currency_consolidated})
在工作簿界面中,事务处理会计行金额字段默认启用货币合并。如果要停用,可以在数据集中找到事务处理会计行金额字段,然后去掉筛选器窗口的合并字段框。
货币转换功能可以将金额字段的值转换为任一货币,使用的是货币汇率表中的汇率值
在数据集生成器中,可以使用上下文值#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]});
我们可以从工作簿界面转换事务处理和事务处理行中金额字段的货币值。需要注意的是,该功能在数据集中不可用。
要从工作簿界面应用转换,可以单击字段旁边的菜单,然后选择货币,提供了以下选项:
显示原始内容:以事务处理所用的原始货币显示每笔金额。在表视图和数据透视表中,这是事务处理和事务处理行金额字段的默认选项。
应用转换:使用在“转换为窗口”中选择的货币和日期转换每个金额。在图表中,这是事务处理和事务处理行金额字段的默认选项。
转换选项: 打开“转换为窗口”,然后选择“应用转换”选项时要使用的货币和日期。换算中使用的汇率取自货币汇率表。
SuiteQL 提供了 BUILTIN.CONSOLIDATE
和 BUILTIN.CURRENCY_CONVERT
两个内置函数用于货币值操作
BUILTIN.CONSOLIDATE 函数相当于工作簿中的
currency_consolidated
,只能对事务处理会计行中的金额字段进行转换
BUILTIN.CONSOLIDATE 函数的作用是将字段中存储的货币金额转换为目标货币。使用示例:
BUILTIN.CONSOLIDATE(TransactionAccountingLine.Amount, 'LEDGER', 'DEFAULT', 'DEFAULT', 1, 325, 'DEFAULT')
BUILTIN.CONSOLIDATE 函数使用下列参数:
原始金额字段名称
视图类型,选项值:
LEDGER
INCOME
目前只能根据名称推测:LEDGER 是总账、INCOME 是损益表
这两者具体有什么区别?目前所能查阅的所有资料都没有说明!!!
合并汇率类型,选项值:
DEFAULT
STANDARD
,合并报告使用“合并汇率”表
BUDGET
,包含预算和实际金额的报告(预算损益表、预算损益表详细信息以及预算与实际)使用单独的预算汇率表来换算预算金额
子公司汇率类型,选项值:
DEFAULT
CURRENT
HISTORICAL
AVERAGE
SQL EXPRESSION
若设置为DEFAULT,则会根据科目的一般汇率类型自动获取合并汇率表中的汇率值
目标子公司,默认值是母公司
子公司内部 ID
SQL EXPRESSION
期间,默认是所选期间,如果未选择期间则是运行 SuiteQL 的期间
期间内部 ID
SQL EXPRESSION,例如:使用BUILTIN.PERIOD 函数
账簿,默认是主账簿
DEFAULT
SQL EXPRESSION
除了原始金额字段名称和视图类型之外,其它参数都可以使用'DEFAULT'作为参数值
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 函数使用下列参数:
原始金额字段名称
目标货币(可选;默认值是母公司货币),接受下列值:
Number
Date
使用汇率的日期(可选;默认值为今天的日期)