我发现很难找到有关处理多种货币的最佳做法的讨论。任何人都可以提供一些见解或链接来帮助吗?
我知道有很多方法可以做到这一点 - 无论是以交易方式存储按原样输入的值,还是在功能上转换为基本费率的方式。在这两种情况下,都需要存储汇率,以涵盖将来可能需要转换为的每种货币的交易时间。
我喜欢交易方法的灵活性,它允许在以后输入旧的汇率信息,但可能比功能方法有更多的开销(因为你必须存储更多的汇率数据)。
表演&可伸缩性是主要因素。我们有(所有.net)一个胜利和一个Web客户端,报表包和一组为数据库后端提供功能的Web服务。如果需要,我可以在某处(例如在客户端)缓存汇率信息。
编辑:我非常希望链接到某些文档,或者包含之前经验中“陷阱”的答案。
答案 0 :(得分:38)
我找不到任何明确的讨论,所以我发布我的发现,我希望它可以帮助某人。
货币表应包括使用任何全球化类的文化代码。
交易方法
功能方法
复合
比较
实际上,您必须在功能和事务方法之间进行选择。两者都有其优点和优点。缺点。
功能方法不需要为交易存储本地货币,需要将当前的数据库值转换为基础货币,只需要一组汇率,虽然需要较少的存储空间,但实施和维护起来稍微困难。
交易方法更灵活,但它确实需要保留更多的汇率信息,并且每个交易都需要与输入货币相关联(尽管这可以应用于一组客户而不是每笔交易)。它通常不会影响已经在生产中的代码,因为本地货币仍将在本地使用,这使得该解决方案易于实施和维护。虽然显然任何需要转换为不同货币的报告或价值都会受到影响。
在这两种情况下,每笔交易都需要交易时间的汇率以换取需要转换的每种货币 - 这在功能方法的交易点是必需的,但交易方法允许更灵活,因为过去的汇率数据可以随时输入(允许使用任何货币), 即你在功能方法中失去了使用其他汇率的能力。
结论
货币管理的交易方法将提供灵活的方法,避免对客户端性能的任何负面影响和零客户端代码修改。如果需要不同的货币,所有人都需要返工,报告可能会产生负面的业绩影响。 每个客户端站点都需要存储一个货币参考,说明他们的输入货币是什么。 应该可以在高水平存储汇率(例如一组客户站点等),这将最小化存储的数据量。如果需要较低水平的汇率信息,可能会出现问题。
答案 1 :(得分:17)
没有单一的答案,因为它在很大程度上取决于企业处理这些货币交易的方式。一些公司使用相当复杂的方法来管理外币。我建议你阅读多币种会计。
要做的主要事情是捕获单位,价值和数据中的数据。在没有任何转换的情况下完成业务交易的日期,或者您可能会在翻译中丢失某些内容。 用于展示和展示报告,按需转换,使用原始汇率或任何其他汇率,具体取决于用户的意图。
商店&使用值作为“十进制”(在C#中)类型进行计算 - 不要使用float / double或者让自己容易受到舍入错误的影响。
例如,我在前一生中使用多币种应用程序的方式是:
答案 2 :(得分:9)
我们公司处理多种货币会计和预算。我们实施的解决方案非常简单,包括以下内容:
一个货币表,包含一些字段,包括要考虑用于货币的小数位数(是的,某些货币必须以3位小数管理...)和汇率值,这是没有其他的在评估“未执行”或“未决”的金融交易时(参见下文),而不是“建议/违约汇率”
在此货币表中,其中一条记录的汇率为1.这是我们系统中的主要/支点货币
所有金融交易或所有具有财务维度的业务(我们称之为我们语言的承诺)都可以排序为“待定”或“已执行”:
待处理交易是例如预计在特定日期收到特定金额的发票。在我们的预算跟进系统中,这些金额总是根据货币表中提供的“建议/默认汇率”进行重新评估。
执行的交易总是与执行日期,金额,货币和汇率一起保存,在输入执行数据时必须确认/输入。
答案 3 :(得分:2)
(我假设你已经知道你绝对不应该将货币数据存储为浮动和为什么)
在我看来,使用单一基础货币可能会更容易;但是,您应该保存原始金额,原始货币,转换率和基础货币金额 - 否则您的会计部门。可能会让你活着,因为他们可能会分别保留不同的货币。
答案 4 :(得分:1)
由于汇率波动,一种方法如您所述 - 存储未按原样输入的金额但显示仅显示的伴随字段并显示转换后的金额。为了进行转换,需要一个汇率表及其适用的日期范围。如果此大小很小,则可以选择在客户端上进行缓存。否则,将需要远程调用才能执行转换。