多货币最佳实践与实施

Mr *_*ubs 59 currency

我发现很难找到有关处理多种货币的最佳做法的讨论.任何人都可以提供一些见解或链接来帮助吗?

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

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

性能和可伸缩性是主要因素.我们(所有.net)都有一个win&web客户端,一个报告套件和一组为数据库后端提供功能的Web服务.如果需要,我可以在某处(例如在客户端)缓存汇率信息.

编辑:我真的很喜欢链接到一些文件,或者包含之前经验中的"陷阱"的答案.

Mr *_*ubs 39

我找不到任何明确的讨论,所以我发布了我的发现,我希望它可以帮助某人.

货币表应包含使用任何全球化类的文化代码.

交易方法

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

功能方法

  • 以一种基础货币存储,保留适用于该货币的转换率
  • 需要在前端和数据库之间给出考虑是转换值的最佳位置
  • 由于需要转换为基础货币,因此输入业绩受到轻微影响.汇率可以缓存在客户端上(注意每个实体可能使用不同的汇率)
  • 这需要一套汇率(从基数到所有其他所需货币)
  • 要应用汇率,每笔交易都需要在基础货币和所需货币之间进行转换

综合

  • 在交易点,存储交易价值和功能价值,这样就不需要存储汇率信息.(这不适合作为解决方案,因为它有效地将您限制为任何给定值的两种货币)

对照

实际上,您必须在功能和事务方法之间进行选择.两者都有其优点和缺点.

功能方法不需要为交易存储本地货币,需要将当前的数据库值转换为基本货币,只需要一组汇率,虽然需要较少的存储空间,但实施和维护稍微困难一些.

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

在这两种情况下,每个交易都需要交易时间的汇率,以换取需要转换的每种货币 - 这在功能方法的交易点是必需的,但交易方法允许更灵活,因为过去的汇率数据可以输入任何时候(允许使用任何货币),即您在功能方法中失去使用其他汇率的能力.

结论

货币管理的交易方法将提供灵活的方法,避免对客户端性能的任何负面影响和零客户端代码修改.如果需要不同的货币,所有人都需要返工,报告可能会产生负面的业绩影响.每个客户端站点都需要存储一个货币参考,说明他们的输入货币是什么.应该可以在高水平存储汇率(例如一组客户站点等),这将最小化存储的数据量.如果在较低级别需要汇率信息,则可能出现问题.

  • 很好的资源开始。我决定在我的数据库表中记录两组数据。即为每笔交易记录`submitted_currency、submitted_amount、conversion_rate、base_amount、base_currency`,其中base_currency 是账户的默认货币。这样我就知道用户输入了什么,但我仍然可以进行求和查询,并在需要时保持一切正常化。 (3认同)

Fre*_*rik 17

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

要做的主要事情是捕获业务交易完成的单位,价值和日期中的数据而不进行任何转换,否则您可能会在翻译中丢失一些内容.对于显示和报告,可以使用原始汇率或任何其他汇率按需转换,具体取决于用户的意图.

使用值作为"十进制"(在C#中)类型存储和计算 - 不要使用float/double或者让自己容易受到舍入错误的影响.

例如,我在前一生中使用多币种应用程序的方式是:

  • 每天,将设置当天的汇率,并将其存储在数据库中并缓存以便在应用程序中进行转换.
  • 所有交易都将被捕获为价值+货币+日期(即没有转换)
  • 以用户的货币显示交易是即时完成的.明确这不是交易货币,而是显示货币.这与您去度假时的信用卡对帐单相似.它显示了外国交易金额,然后显示它以您的本国货币计算的成本.

  • 没有'每天一次汇率'.这个概念不适用于现实生活,在同一天,您可以从您的银行以2倍和2种不同的汇率购买欧元. (6认同)
  • 有趣的点.你说的大部分内容都没有考虑到这一点的开销.我们的大多数客户将拥有3-6个月的固定汇率.似乎是大型公司的做法.由于我们没有一项业务,我们需要一种标准化的方法.我对你在翻译中失去一些东西的看法并不完全 - 只要你在交易发生时有一个有效的汇率,你就不会有这个问题. (2认同)
  • #Philippe,每天使用一次汇率是一项商业决策,适合业务管理和协商其交易的方式.你说利率波动是正确的,这是因为有一个货币交易市场的结果.通常,企业不直接与市场合作,而是使用中介(银行/经纪人).根据与中间人的安排,将在汇率中添加一定的加价并在特定时间(每日,每周......)发生,这意味着不使用银行间/即期汇率@交易时间. (2认同)

Phi*_*ier 9

我们公司处理多种货币会计和预算.我们实施的解决方案非常简单,包括以下内容:

  1. 一个货币表,包括几个字段,包括要考虑用于货币的小数位数(是的,一些货币必须用3位小数管理......)和汇率值,除了是"建议"之外别无其他意义评估'未执行'或'未决'金融交易时的/默认汇率(见下文)

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

所有金融交易或具有财务维度的所有业务(我们称之为我们语言的承诺)都可以排序为"待定"或"已执行":

  1. 待处理交易是例如预期在特定日期收到特定金额的发票.在我们的预算跟进系统中,这些金额总是根据货币表中提供的"建议/默认汇率"进行重新评估.

  2. 执行的交易总是与执行日期,金额,货币汇率一起保存,在输入执行数据时必须确认/输入.