当前位置: 首页 > 知识库问答 >
问题:

多货币-存储什么和何时转换?

宰父浩漫
2023-03-14

我读过不同的Q

脚本:

Raddo公司在英国、法国和美国设有3个分支机构。拉德多有基础货币美元。预算是以美元编制的。Raddo商店支持数据库中的库伦奇汇率。

英国员工以英镑创建采购订单,法国员工以欧元创建采购订单。

问题1:采购订单/订单项目数据库表中应存储哪些内容-分行所在地货币和当前汇率或以基础货币美元表示的换算金额?请记住,汇率必须是创建采购订单时的汇率。

问题2:转换什么以及何时能够生成美元/基础货币的报告?

Q3:如果有人说两年后将基础货币从美元换成澳元,对出口数据有什么影响?

问题4:处理多种货币的最佳方式是什么,这样应用程序就能处理最小的兑换量?

共有2个答案

谯德佑
2023-03-14

通常你使用公司基地所在国家的货币并缴纳税款。所以你应该在交易时用有效的汇率将其他货币兑换成美元。一旦获得所有数据,就会进行转换。改变货币的影响是未知的,因为它可以改变许多事情,而不仅仅是货币。我不知道什么是最好的方法,但是每当任何交易发生时,跟踪所有的汇率似乎是合乎逻辑的,这样你就可以给出适当的数据。

拓拔高畅
2023-03-14

记住,你得到的答案是主观的。有了这个免责声明,我就可以开始建立这样一个系统了。

TL;DR:使用汇率表存储不同货币和日期的汇率(如果适用)。以当地货币和计算的美元价值存储金额。

汇率表

创建以下格式的货币表(外汇汇率):

FX_RATES 
-------- 
SOURCE_CURRENCY  -- e.g. USD, GBP, EUR 
TARGET_CURRENCY  -- as above 
EXCHANGE_RATE    -- a suitable decimal field representing the conversion 
VALID_FROM_DATE  -- date range when the above exchange rate is valid 
VALID_TO_DATE    -- as above 
  • 前4列的组合将代表一个独特的记录

示例表如下所示。虽然一行的结束日期和下一行的开始日期之间似乎存在重叠,但查找操作仅检查一列的相等性(即

SOURCE_CURRENCY TARGET_CURRENCY EXCHANGE_RATE          VALID_FROM_DATE VALID_TO_DATE 
--------------- --------------- ---------------------- --------------- -------------- 
GBP             USD             1.250000               06-Mar-2017     13-Mar-2017 
GBP             USD             1.260000               13-Mar-2017     20-Mar-2017 
GBP             USD             1.240000               20-Mar-2017     27-Mar-2017 
GBP             USD             1.250000               27-Mar-2017     03-Apr-2017 
USD             GBP             0.800000               06-Mar-2017     13-Mar-2017 
USD             GBP             0.793651               13-Mar-2017     20-Mar-2017 
USD             GBP             0.806452               20-Mar-2017     27-Mar-2017 
USD             GBP             0.800000               27-Mar-2017     03-Apr-2017 
USD             USD             1.000000               01-Jan-1900     31-Dec-9999 

PO表中的列

在“采购订单”表中,保留以下字段:

PURCHASE_ORDERS 
--------------- 
... other fields 
PO_TXN_DATE         -- Date for the PO that represents the financial transaction 
ORDER_VALUE_LOC     -- Decimal field with the order value in local currency 
ORDER_CURRENCY_LOC  -- The currency used for ORDER_VALUE_LOC (e.g. GBP/EUR) 
ORDER_VALUE_USD     -- The order value in USD (as this is the company's base currency) 
... other fields 

填充PO列

已经有一个填充PO表的流程,必须对其进行扩展以填充以下字段:

  • PO_TXN_DATE是PO上的财务交易的日期。根据您的业务规则,这可能是也可能不是创建/引发PO的日期。
  • ORDER_VALUE_LOC是以当地货币计算的交易价值。
  • ORDER_CURRENCY_LOC是当地货币的货币代码。
  • 这三个字段将用于查找外汇汇率表。
  • ORDER_VALUE_USD通过在FX_RATES表中查找汇率来填充:

下面的伪代码演示了填充订单\价值\美元

ORDER_VALUE_USD = PURCHASE_ORDERS.ORDER_VALUE_LOC * FX_RATES.EXCHANGE_RATE 
                  WHERE 
                        FX_RATES.SOURCE_CURRENCY = PURCHASE_ORDERS.ORDER_CURRENCY_LOC 
                    AND FX_RATES.TARGET_CURRENCY = 'USD' 
                    AND PURCHASE_ORDERS.PO_TXN_DATE >= FX_RATES.VALID_FROM_DATE 
                    AND PURCHASE_ORDERS.PO_TXN_DATE <  FX_RATES.VALID_TO_DATE 

OP问题解答

问题1:采购订单/订单项目数据库表中应存储哪些内容-分行所在地货币和当前汇率或以基础货币美元表示的换算金额?请记住,汇率必须是创建采购订单时的汇率。

如上所述,在采购订单表中存储当地货币值、交易日期、当地货币名称;同时计算并存储基础货币(美元)的价值。如果需要,可以再次查找汇率,无需在此处冗余存储。

美元价值存储在此处,以便于以单一货币进行汇总(例如,生成一份报告,显示要发送给总部的未付款POs的总价值)。如果对这样一个用例的需求很低,那么就不需要存储美元值,它可以根据需要的时间从外汇汇率表中计算出来。然而,下面的问题意味着,将有一个合理的需要,以获得基础货币(美元)的价值。

问题2:转换什么以及何时能够生成美元/基础货币的报告?

通过以基础货币和美元存储价值,此类报告将大大简化。这就是我们计算和存储美元价值的一次性成本的原因,因此它可以被多次读取。

Q3:如果有人——比如说两年后——将基础货币从美元改为澳元,对存量数据有什么影响?

从技术上讲,如果预期会发生这样的变化,那么不要用USD来命名任何数据库结构,而是使用一些通用的东西,比如BASE。:-)

如果进行了此类变更,公司财务部门将指导您如何重述财务数据——例如,您是应该根据交易时的现行汇率重新计算基准值,还是只使用统一的换算系数?在任何情况下,一旦做出此决定,您只需在FX_RATES表中输入适当的换算系数,然后运行一次性流程重新填充采购订单。订单_值_基列。除了汇率,此查询的所有其他信息都已存在于采购订单表中,且未作更改。

问题4:处理多种货币的最佳方式是什么,这样应用程序就能处理最小的兑换量?

这将再次由您的业务需求驱动,而不是技术决策。如果需要经常报告当地货币和基础(美元)货币,则有助于以两种货币存储相关交易价值。通过计算一次并存储它,您可以从以后访问存储的数据中获益。

此外,由于您没有丢弃任何数据,因此如果需要,您可以随时重新计算财务状况。可能需要这样做的一些情况是:

  • 公司决定使用提出采购订单时的现行汇率计算基础货币,但在采购订单关闭或开具发票时重新计算基础货币(美元)。在这种情况下,您应该在关闭采购订单时使用不同的日期来查找FX_RATES

问题5:交易时的汇率不能存储在采购订单表中吗?这样,系统就不需要在外汇汇率表中查找汇率。(通过后续评论询问)

汇率绝对可以存储在PO表中,而不是美元金额。在订单表中存储汇率本质上没有什么“错误”,相反,存储美元金额也没有什么“正确”。

当然,这将导致一个问题——如果你不首先将汇率存储在某个查找表中,那么为了将其填充到PO表中,你从哪里获取汇率。请记住,在大型/全球性公司中,汇率很可能不会通过LOB应用程序本身填充,而是由一些外部来源,例如确定整个公司使用的汇率的汇率团队。在这种情况下,将汇率存储在单独的表格中更方便。

我在下面列出了不同方法的一些好处。你需要根据你的需要选择你使用的那个。

  • 在PO表中存储USD的好处:无需任何进一步的计算(即在运行报告时无需计算ORDER_VALUE_LOCxEXCHANGE_RATE)即可直接获得USD金额。
  • 单独的外汇费率表的好处:外汇费率集中存储在一个表中,更容易更新

当然您可以冗余地存储额外信息(交换存储)以获得好处(例如,在采购订单表中,您存储当地货币金额、汇率和美元金额,并保留一个单独的汇率表。这允许您轻松打印采购订单文档,其中显示当地货币金额,以及用于将其转换为美元金额的汇率。同时,汇率表仍然是一个权威来源。)(汇率)。

记住,问题及其答案是主观的,所以没有对也没有错。根据您的要求和公司的标准定制所有这些建议。

 类似资料:
  • 问题内容: 我正在应用程序中处理许多不同的货币,我想知道将它们存储在SQLite3数据库中的“最佳”方法是什么。 我倾向于定点表示(即,将它们存储为整数,其中$ 3.59被存储为359,¥400被存储为40000)。这是一个好主意吗?如果我的输入数据以后更改并且需要更高的精度怎么办? 问题答案: 鉴于SQLite 3将最多使用8个字节来存储INTEGER类型,除非您要使用大于10 ^ 16的数字,

  • 问题内容: 在一个新项目中,我正在以CSV格式导入到mysql表中的数据。列之一是价格字段,该字段以欧洲格式(即,欧元)存储货币。345,83。我遇到的问题是存储此十进制分隔符。在大多数欧洲货币中,十进制分隔符为“,”,但是当我尝试在字段中插入十进制数字(例如345,83)时,出现以下错误:“行’row#的列’column_name’的数据被截断了’”。如果我使用“。” 而不是“,”可以正常工作。

  • 本文向大家介绍什么是加密货币?相关面试题,主要包含被问及什么是加密货币?时的应答技巧和注意事项,需要的朋友参考一下 回答:加密货币是一种数字资产,可以用作使用加密功能进行金融交易的交换媒介。加密货币利用区块链技术获得透明度,去中心化和不变性。加密货币可使用公钥和私钥在两方之间直接发送,而手续费极低。

  • 我试过... 但那就不允许便士条目了。 我想要增量按钮控制在英镑上升,但仍然想要输入便士的能力。 谢谢,1DMF

  • 在我们继续之前,我们需要先来知道“菲亚特”或“菲亚特货币”的含义。 菲亚特货币由政府宣布为其控制的领土内的法定货币。仅因政府监管或法律而具有价值的菲亚特货币不受黄金或白银等实物商品的支持。法定货币的价值来自供需关系和发行政府的稳定性,而不是支持它的商品的价值。它基于经济的信念和信誉。大多数现代纸币都是法定货币。 每个加密货币的新手都想知道如何兑现比特币或从比特币中提取到法定货币(美元,欧元,印度卢

  • 问题内容: 我在字符串变量中有美元 我如何将其转换为小数而不是字符串,以便可以对其进行操作,例如向其中添加美元? 问题答案: 有一个简单的方法: