代码之家  ›  专栏  ›  技术社区  ›  Mr Shoubs

多货币最佳实践与实施[关闭]

  •  56
  • Mr Shoubs  · 技术社区  · 16 年前

    我发现很难找到任何关于处理多种货币的最佳实践的讨论。有人能提供一些帮助的见解或链接吗?

    我知道有很多方法可以做到这一点——要么在交易中按原样存储输入的值,要么在功能上按原样转换为基本利率。在这两种情况下,需要存储汇率,以涵盖未来可能需要转换的每种货币的交易时间。

    我喜欢事务性方法的灵活性,它允许以后输入旧的汇率信息,但可能比功能性方法有更多的开销(因为您必须存储更多的汇率数据)。

    性能和可扩展性是主要因素。我们有(all.net)一个Win&Web客户端、一个报告套件和一组Web服务,它们为数据库后端提供功能。如果需要,我可以将汇率信息缓存在某个地方(例如客户机上)。

    编辑:我真的想链接到一些文件,或回答包括“gotchas”从以前的经验。

    5 回复  |  直到 14 年前
        1
  •  38
  •   Dennis Williamson    16 年前

    我找不到任何明确的讨论,所以我把我的发现贴出来,希望它能帮助一些人。

    货币表应包括文化代码,以利用任何全球化类。

    事务处理方法

    • 以客户本地货币存储,并存储交易发生时应用的交易货币的多个转换率。
    • 每种货币需要多种汇率
    • 站点设置表将存储输入货币
    • 客户端级别的值的输入和输出将没有开销,因为可以假定该值使用正确的货币。
    • 要应用汇率,您需要知道输入值的货币(对于跨客户报告可能不同),然后将其乘以在交易时间段内有效的关联实体汇率。

    函数法

    • 存储在一个基础货币中,保留该货币随时间变化的转换率
    • 需要考虑前端和数据库之间的点是转换值的最佳位置
    • 投入绩效受到轻微影响,因为需要转换为基础货币。可以在客户端上缓存汇率(请注意,每个实体可能使用不同的汇率)
    • 这需要一套汇率(从基础货币到所有其他所需货币)
    • 要应用汇率,每个交易都需要在基础货币和所需货币之间进行转换。

    混合成的

    • 在事务点,存储事务值和功能值,这样就不需要存储汇率信息。(这不适合作为一个解决方案,因为它有效地限制您在任何给定价值下使用两种货币)

    比较

    实际上,您必须在函数方法和事务方法之间进行选择。两者都有各自的优点和缺点。

    函数方法不需要为事务存储本地货币,需要将当前DB值转换为基本货币,只需要一组汇率,实现和维护起来稍困难,但需要的存储量较少。

    交易方法更加灵活,尽管它确实需要更多的汇率信息,并且每个交易都需要与输入货币相关联(尽管这可以应用于一组客户而不是每个交易)。它通常不会影响已经在生产中的代码,因为本地货币仍将在本地级别使用,使得该解决方案易于实施和维护。尽管很明显,任何需要转换成不同货币的报告或价值都会受到影响。

    在这两种情况下,每一笔交易都需要将其需要转换为“美元”的每一种货币在交易时的汇率。这在功能性方法的交易点上是需要的,但是交易性方法允许更大的灵活性,因为过去的汇率数据可以随时输入(允许使用任何货币)。 也就是说,你失去了在函数方法中使用其他汇率的能力。

    结论

    货币管理的事务性方法将提供一种灵活的方法,避免对客户机性能的任何负面影响和零客户机代码修改。如果需要不同的货币,报告中可能会出现负面的性能影响,所有这些都需要返工。 每个客户机站点都需要存储一个说明其输入货币是什么的货币引用。 应该可以避免将汇率存储在较高的水平(例如,一组客户网站等),这将使存储的数据量最小化。如果需要较低级别的汇率信息,则可能会出现问题。

        2
  •  17
  •   Frederik    16 年前

    没有单一的答案,因为这在很大程度上取决于企业如何处理这些货币的交易。一些公司使用相当复杂的方法来管理外汇。我建议你仔细阅读多货币会计。

    要做的主要事情是捕获单位、价值和日期中的数据,在这些单位、价值和日期中,业务事务是在不进行任何转换的情况下完成的,或者您可能会在转换过程中丢失某些内容。 对于显示和报告,使用原始汇率或任何其他汇率(取决于用户的意图)按需转换。

    使用“十进制”(C)类型的值存储和计算-不要使用float/double,否则会导致舍入错误。

    例如,我以前使用多货币应用程序的方式是:

    • 每天,都会设置当天的汇率,并将其存储在数据库中,并缓存在应用程序中进行转换。
    • 所有交易都将被捕获为价值+货币+日期(即没有转换)
    • 以用户的货币显示事务是即时完成的。明确表示这不是交易货币,而是显示货币。这类似于你度假时的信用卡账单。它显示了外汇交易金额,以及最终以本国货币计算的成本。
        3
  •  9
  •   Philippe Grondier    16 年前

    我们公司经营多种货币的会计和预算。我们实现的解决方案是非常直接的,包括以下内容:

    1. 一个货币表,包含几个字段,包括货币要考虑的小数位数(是的,有些货币必须用3个小数管理…)和一个汇率值,这除了在评估“未执行”或“待处理”金融交易时作为“建议/默认汇率”之外没有其他含义(见下文)。

    2. 在此货币表中,其中一个记录的汇率为1。这是我们系统中的主要/主要货币

    所有财务交易或具有财务维度的所有运营(我们用自己的语言称为承诺)要么排序为“待定”要么排序为“已执行”:

    1. 例如,待处理交易是指在某一日期预期收到一定金额的发票。在我们的预算跟踪系统中,这些金额总是根据货币表中可用的“建议/默认汇率”进行重新评估。

    2. 执行的交易记录始终与执行日期、金额、货币一起保存。 和 输入执行数据时必须确认/输入的汇率。

        4
  •  2
  •   Piskvor left the building Rohit Kumar    16 年前

    (我假设您已经知道您绝对不应该将货币数据存储为浮动数据以及原因)

    在我看来,使用单一基础货币可能更容易;但是,您应该保存原始金额、原始货币、兑换率和基础货币金额,否则您的会计部门可能会活活地吃掉您,因为它们可能会将不同的货币分开存放。

        5
  •  1
  •   btreat    16 年前

    由于汇率波动,如您所述,一种方法是存储一个未转换的“按原样输入”金额,但显示一个仅显示并显示已转换金额的配套字段。为了进行转换,需要一个汇率表及其适用的日期范围。如果它的大小很小,可以选择在客户机上缓存。否则,需要远程调用才能执行转换。