62 votes

Meilleures pratiques et implémentation multi-devises

J'ai du mal à trouver toute discussion sur les meilleures pratiques pour faire face à de multiples devises. Quelqu'un peut-il fournir un aperçu ou des liens vers de l'aide?

Je comprends qu'il ya un certain nombre de façons de le faire - que ce soit un point de vue transactionnel où vous stockez la valeur entrée comme est, ou fonctionnellement où vous convertir à un taux de base. Dans les deux cas, le taux de change est nécessaire pour être stocké que couvre que les opérations de temps pour chaque devise qu'il faudra peut-être convertie à l'avenir.

J'aime la souplesse de l'approche transactionnelle, ce qui permet à l'ancien taux de change info à être entrés à une date ultérieure, mais a probablement plus généraux (comme vous l'avez à stocker plus de taux de change données) que l'approche fonctionnelle.

La Performance et l'Évolutivité sont les principaux facteurs. Nous avons (tous les .net), une victoire et le web client, un bureau et un ensemble de services web qui fournissent des fonctionnalités d'une base de données back-end. Je peux mettre en cache le taux de change de l'information quelque part (par exemple sur le client) si nécessaire.

EDIT: j'aimerais vraiment que des liens vers des documents, ou des réponses qui incluent "pièges" à partir de l'expérience précédente.

41voto

Mr Shoubs Points 2320

Je ne pouvais pas trouver toute discussion définitive, donc je poste mes résultats, j'espère que cela aide quelqu'un.

La table des devises devrait inclure le code de culture à utiliser de la Mondialisation des Classes.

Méthode

  • Magasin en monnaie locale à la clientèle et de stocker plusieurs taux de conversion de la devise de la transaction qui s'appliquait au moment de la transaction.
  • Exige de multiples taux de change pour chaque devise
  • Paramètres du Site tableau de stocker l'entrée de devises
  • D'entrée et de Sortie de valeurs au niveau du client aurait pas de frais généraux que l'on peut supposer que la valeur est dans la bonne devise
  • Pour appliquer les taux de change, il serait nécessaire de connaître la devise de l'entré des valeurs (qui peut être différent pour traverser les rapports de clients), puis multipliez ce chiffre par son entité associée à des taux de change qui était en vigueur au cours de l'transactions période de temps.

Méthode Fonctionnelle

  • Stocker dans une base de devise, tenir taux de conversion pour cette monnaie qui s'appliquent au fil du temps
  • Doivent être pris en considération au point entre l'extrémité avant et à la base de données est le meilleur endroit pour convertir des valeurs
  • D'entrée de performance est ressentie comme une conversion de la devise de base devraient avoir lieu. Le taux de change pourrait être mis en cache sur le client (veuillez noter que chaque entité peut utiliser un taux de change différent)
  • Ce besoin d'un ensemble de taux de change (de la base à toutes les autres devises)
  • Pour appliquer les taux de change, toutes les transactions doivent être convertis entre la base et le nécessaire monnaies

Composite

  • Au moment de la transaction, de stocker la valeur et de la valeur fonctionnelle, ainsi, le taux de change de l'information devrait être stocké. (Ce ne pourrait pas être une solution efficace vous limite à deux monnaies pour toute valeur donnée)

Comparaison

De façon réaliste, vous avez à choisir entre la fonction et les méthodes transactionnelles. Les deux ont leurs avantages et inconvénients.

Méthode fonctionnelle n'a pas besoin de stocker de la monnaie locale à des fins de transaction, les besoins de convertir les db les valeurs de la devise de base, seulement besoin d'un ensemble de taux de change, est un peu plus difficile à mettre en œuvre et maintenir mais nécessite moins d'espace de stockage.

Les Transactions méthode est beaucoup plus souple, même si elle nécessite plus de taux de change de l'information et de chaque transaction doit être associée à une entrée de devises (bien que cela puisse être appliquée à un groupe de clients plutôt que chaque transaction). Il serait généralement pas d'incidence sur le code déjà en production comme les monnaies locales seraient encore utilisés au niveau local, rendant cette solution facile à mettre en œuvre et à maintenir. Bien évidemment, tous les rapports ou les valeurs qui ont besoin d'être convertis en une autre monnaie en serait affectée.

Dans les deux cas, chaque transaction aurait besoin de taux de change pour le moment de la transaction pour chaque devise elle a besoin de la conversion à ce qui est nécessaire au point de la transaction pour la méthode fonctionnelle, cependant, la méthode permet une plus grande flexibilité que les derniers taux de change des données peut être saisi à tout moment (permettant à toute monnaie utilisée), c'est à dire que vous perdez la possibilité d'utiliser d'autres taux de change dans la méthode fonctionnelle.

Conclusion

Une méthode de gestion des devises serait de fournir une approche flexible, en évitant tout impact négatif sur les performances du client et client zéro modification de code. Un impact négatif sur les performances serait susceptible de se produire dans les rapports où tous auront besoin de retravailler si des monnaies différentes sont nécessaires. Chaque site client aura besoin de stocker une monnaie de référence que les membres de leur entrée monnaie. Il devrait être possible de s'en tirer avec le stockage des taux de change à un niveau élevé (par exemple, un groupe de sites de clients, etc), cela permettra de minimiser la quantité de données stockées. Des problèmes peuvent se produire si le taux de change de l'information est nécessaire à un niveau inférieur.

18voto

Frederik Points 1988

Il n'y a pas de réponse unique, car cela dépend beaucoup de la façon dont une entreprise gère les transactions dans ces devises. Certaines entreprises utilisent assez sophistiqué façons de gérer les devises étrangères. Je vous suggère de lire sur en multi devises la comptabilité.

La principale chose à faire est de saisir les données dans l'unité, la valeur et la date à laquelle l'opération est effectuée sans aucune conversion, ou vous risquez de perdre quelque chose dans la traduction. Pour l'affichage et l'enregistrement, convertir sur demande, à l'aide soit de l'original de taux de change, ou de tout autre taux de change en fonction de l'intention de l'utilisateur.

Magasin et faire des calculs avec des valeurs comme la "Virgule" (en C#) type - ne pas utiliser des float, double, ou vous laisser vous-même vulnérable aux erreurs d'arrondi.

Par exemple, le chemin que j'ai fait un multi-devises application dans une vie précédente était:

  • Chaque jour, les taux de change du jour serait fixée et c'est stockée dans une base de données et mises en cache pour la conversion dans l'application.
  • Toutes les transactions devraient être prises en compte comme valeur + monnaie + date (ie. pas de conversion)
  • L'affichage de la transaction dans un des utilisateurs de la monnaie a été fait à la volée. Clairement ce n'est pas la devise de la transaction, mais une devise d'affichage. Ceci est similaire à un relevé de carte de crédit lorsque vous êtes allé en vacances. Il montre l'étranger montant de la transaction et puis combien il finit par vous coûter dans la devise de votre pays.

9voto

Philippe Grondier Points 6697

Notre société s'occupe avec plusieurs devises la comptabilité et de budgétisation. La solution que nous avons mise en œuvre est relativement simple, et comprend les éléments suivants:

  1. une table des devises, avec un peu de domaines y compris le nombre de décimales à être considérés comme de la monnaie (et oui, certaines monnaies doivent être gérés avec 3 décimales ...) et un taux de change de valeur, qui n'a d'autre sens que d'être un "proposé par défaut/taux de change" lors de l'évaluation de la "non-exécution" ou "en attente" transactions financières (voir infra)

  2. Dans cette table des devises, de l'un des enregistrements a un taux de change de 1. C'est le principal/devise pivot dans notre système

Toutes les transactions financières, ou de toutes les opérations avec une dimension financière (ce que nous appelons des engagements dans notre langue), sont triés "en attente" ou "exécution de':

  1. Transactions en attente sont par exemple les factures qui sont susceptibles d'être reçues, pour une certaine somme à une certaine date. Dans notre budget de système de suivi, ces montants sont toujours réévalués en fonction de la "proposé par défaut/taux de change" disponible dans la table des devises.

  2. Les opérations exécutées sont toujours enregistrés avec la date d'exécution, le montant, la devise ET les taux de change, qui doit être confirmé/tapé lors de la saisie de l'exécution des données.

2voto

Piskvor Points 46986

(Je suppose que vous savez déjà que vous ne devriez absolument pas stocker les données de devise sous forme de float et pourquoi)

À mon avis, travailler avec une seule devise de base pourrait être plus facile; Toutefois, vous devez enregistrer le montant initial, la devise d'origine, le taux de conversion et le montant en devise de base - sinon, votre service de comptabilité. pourrait vous manger vivant, car ils sont susceptibles de garder les différentes devises en quelque sorte séparément.

1voto

btreat Points 1361

Comme les taux de change fluctuent, vous pouvez utiliser l'une des méthodes suivantes: stocker un montant "saisi tel quel" qui n'est pas converti, mais afficher un champ associé qui s'affiche uniquement et affiche le montant converti. Pour effectuer la conversion, un tableau des taux de change et de leurs plages de dates applicables serait nécessaire. Si sa taille est petite, la mise en cache sur le client est une option. Sinon, un appel à distance serait nécessaire pour effectuer la conversion.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X