gpt4 book ai didi

database - 多种货币-存储什么以及何时转换?

转载 作者:行者123 更新时间:2023-12-03 12:40:55 25 4
gpt4 key购买 nike

我已经阅读了关于多种货币的关于SO的不同问答,但是我不清楚它们还是没有提供关于我的用例的足够详细信息。

方案:

Raddo公司在英国,法国和美国设有3个分支机构。 Raddo具有基础货币美元。预算以美元创建。 Raddo将支持的货币汇率存储在数据库中。

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

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

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

问题3:如果有人说2年后将基础货币从美元更改为澳大利亚元,对现有数据有什么影响?

问题4:处理多种货币的最佳方法是什么,以便应用程序处理最少的转换?

最佳答案

请记住,您收到的答案将是主观的。有了这个免责声明,这就是我要建立这样一个系统的方式。

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列的组合将代表唯一记录。
  • 建议每当输入一对货币记录(USD-> GBP)时,也要插入等价的反向记录(GBP-> USD),或者使用真实汇率(一种转换可能使用不同的汇率)比率),或者与原始记录相反。
  • 对于一对货币,连续的行必须显示日期的连续性(即,对于一对货币,绝对不能在同一行中的日期不介于VALID_FROM_DATEVALID_TO_DATE之间)。
  • 为方便起见,还输入一行('USD', 'USD', 1, smallest_date, largest_date),其中包含数据库支持的最小日期和最大日期。这样就更易于处理以基本货币本身进行输入的情况。
  • 您将需要确定用于该表的货币外汇汇率的来源以及更新频率。例如,您的财务团队可能发布每周外汇汇率表(即使货币市场中的值(value)每天都在变化)。

  • 样本表如下所示。尽管看起来在一行的结束日期和下一行的开始日期之间存在重叠,但是查找操作仅检查一列是否相等(即 >= VALID_FROM_DATE AND < VALID_TO_DATE)
    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

    采购订单表中的

    在采购订单表中,保留以下字段:
    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_TXN_DATE是采购订单上金融交易的日期。根据您的业务规则,这可能是(也可能不是)创建/提起采购订单的日期。
  • ORDER_VALUE_LOC是使用本地货币的交易值。
  • ORDER_CURRENCY_LOC是本地货币的货币代码。
  • 这三个字段将用于查找外汇汇率表。
  • 通过在 ORDER_VALUE_USD表中查找汇率来填充
  • FX_RATES:

  • 下面的伪代码演示了如何填充 ORDER_VALUE_USD
    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问题的解答

    Q1: What should be stored in Purchase Orders/Order items database table - Branch location currency and current exchange rate or converted amounts in base currency US dollars? Please keep in mind that exchange rate must be the one at the time of PO created.



    如前所述,在采购订单表中存储本地货币值,交易日期,本地货币名称;还要以基础货币(USD)计算和存储值。如果需要,可以再次查询汇率,无需在此处多余地存储汇率。

    USD值存储在此处,以便更轻松地以一种货币进行汇总(例如,生成一份报告,以显示要发送给总部的未完成PO的总值(value))。如果对这种用例的需求很少,那么就不需要存储USD值,可以从FX汇率表中计算出所需的时间。但是,以下问题暗示将有合理的需要获取基础货币(USD)的值(value)。

    Q2: What to convert and when, to be able to generate reports in US dollars/base currency?



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

    Q3: What is the impact on the existing data if someone - say after 2 years - changes the base currency from US dollars to AUD Australian dollar?



    从技术上讲,如果预期会发生这种变化,则不要使用 USD命名任何数据库结构,而应使用诸如 BASE这样的通用名称。 :-)

    如果进行了此类更改,则公司的财务部门将指导您如何重述财务数据-例如您应该基于交易时的汇率来重新计算基值,还是仅使用固定转换因子?无论如何,一旦做出此决定,您只需要在 FX_RATES表中输入适当的转换因子,然后运行一次流程即可重新填充 PURCHASE_ORDERS.ORDER_VALUE_BASE列。除了FX速率外,此查询的所有其他信息在 PURCHASE_ORDERS表中已经存在且未更改。

    Q4: What is the best way to deal with multiple currencies so application handles minimum amount of conversions?



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

    另外,由于您不会丢弃任何数据,因此如有需要,您始终可以重新计算财务状况。在某些情况下可能需要这样做:
  • 做出公司决定,即在提高PO时使用当时的汇率来计算基础货币,但是在关闭PO或开具发票时将重新计算基础(USD)货币。在这种情况下,您将在关闭PO时使用其他日期查询FX_RATES表。
  • 如果英镑突然下跌,并且从1 GBP = 1.25 USD变为1.5 GBP = 1 USD,您可能需要计算这种更改对美元的影响。然后,您可以使用ORDER_VALUE_USD表中的当日汇率获取储值FX_RATES和重新计算的值之间的差,以确定这种转变对美元的影响。

  • Q5: Can't the exchange rate at the time of transaction be stored in the purchase orders table? This way, system wont need to look up the exchange rate in FX rates table. (Asked via a follow-up comment)



    可以肯定地将汇率而不是美元金额存储在PO表中。在PO表中存储汇率本质上没有“错误”,而在存储美元金额方面也没有“正确”。

    当然,这将引出一个问题-如果不首先将其存储在某些查询表中,那么从哪里获得汇率以便将其填充到PO表中。请记住,在大型/全局公司中,很可能不会通过LOB应用程序本身来填充汇率,这将是一些外部来源,例如确定公司中要使用的汇率的汇率团队。在这种情况下,将FX汇率存储在单独的表中更为方便。

    我在下面列出了不同方法的一些好处。您需要根据需要选择要使用的一个或多个。
  • 在PO表中存储美元的好处:美元金额直接可用,无需任何进一步的计算(即,在运行报告时无需计算ORDER_VALUE_LOC x EXCHANGE_RATE)。
  • 单独的外汇汇率表的好处:外汇汇率集中存储在单个表中,从而更易于更新和查看(请记住,大公司可能拥有单独的团队来确定在整个公司范围内使用的外汇汇率)并进行验证(例如,检查汇率的连续性-在上面的示例中,通过将连续行中的有效起始日期/截止日期并入字符串,检查是否存在汇率的差距非常简单)。外汇汇率不会分散在多个表格中。
  • 在FX表中存储汇率的好处:不需要单独的FX_RATES表。

  • 当然,您可以多余地存储其他信息(不使用存储)以获得好处(例如,在PO表中存储本地货币金额,FX汇率和USD金额,以及保留单独的FX汇率表。使您可以轻松打印出显示本地货币金额的PO文档,以及用于将其转换为USD金额的FX汇率。同时,FX汇率表仍是权威的汇率来源)。

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

    关于database - 多种货币-存储什么以及何时转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42939751/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com