Najlepsze praktyki i wdrażanie w wielu walutach [zamknięte]

zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi.

chcesz poprawić to pytanie? Update the question so it edytując ten post.

Zamknięte 4 lata temu .

Popraw to pytanie [5]}trudno mi znaleźć dyskusję na temat najlepszych praktyk w radzeniu sobie z wieloma walutami. Czy ktoś może podać jakiś wgląd lub linki do pomocy?

I understand there czy można to zrobić na wiele sposobów - albo transakcyjnie, gdzie przechowujesz wartość wprowadzoną jako jest, lub funkcjonalnie, gdzie konwertujesz na kurs bazowy. W obu przypadkach konieczne jest przechowywanie kursu wymiany, który obejmuje czas transakcji dla każdej waluty, na którą może być konieczne przeliczenie w przyszłości.

Podoba mi się elastyczność podejścia transakcyjnego, które pozwala na wprowadzenie starych informacji o kursie wymiany w późniejszym terminie, ale prawdopodobnie ma więcej kosztów (ponieważ musisz przechowywać więcej dane o kursie walutowym) niż podejście funkcjonalne.

Wydajność i skalowalność to główne czynniki. Mamy (wszystkie. NET) klienta win & web, pakiet raportów i zestaw usług internetowych, które zapewniają funkcjonalność zaplecza bazy danych. W razie potrzeby mogę buforować informacje o kursie wymiany gdzieś (np. u klienta).

EDIT: bardzo chciałbym linki do niektórych dokumentów, lub odpowiedzi, które zawierają "gotchas" z poprzedniego doświadczenia.

 64
Author: Mr Shoubs, 2010-06-30

5 answers

Nie mogłem znaleźć żadnej ostatecznej dyskusji, więc zamieszczam swoje ustalenia, mam nadzieję, że komuś to pomoże.

Tabela walut powinna zawierać kod kultury, aby móc korzystać z dowolnych klas globalizacji.

Metoda Transakcyjna

  • przechowuj w walucie lokalnej dla klienta i przechowuj wiele kursów wymiany dla waluty transakcji, która miała zastosowanie podczas transakcji.
  • wymaga wielu kursów wymiany dla każdej waluty
  • tabela ustawień witryny przechowuj walutę wejściową
  • Dane wejściowe i wyjściowe wartości na poziomie klienta nie będą miały narzutu, ponieważ można założyć, że wartość jest we właściwej walucie
  • aby zastosować kursy walut, musisz znać walutę wprowadzanych wartości (które mogą być różne w przypadku raportów między klientami), a następnie pomnóż to przez kurs wymiany jednostki powiązanej, który obowiązywał w okresie transakcji.

Metoda Funkcjonalna

  • Przechowywać w jednej walucie bazowej, trzymać kursy wymiany dla tej waluty, które obowiązują w czasie
  • należy rozważyć w punkcie między front end I bazy danych jest najlepszym miejscem do konwersji wartości
  • wydajność wejściowa ma niewielki wpływ, ponieważ konieczna byłaby konwersja na walutę bazową. Kurs wymiany może być buforowany na kliencie (zauważ, że każdy podmiot może stosować inny kurs wymiany)
  • to wymagało jednego zestawu kursów walut (od podstawy do wszystkich innych wymaganych walut)
  • aby zastosować kursy walut, każda transakcja musi być przeliczona między walutami bazowymi i wymaganymi

Composite

  • w momencie transakcji przechowuj wartość transakcyjną i wartość funkcjonalną, w ten sposób nie trzeba będzie przechowywać informacji o kursie wymiany. (Nie byłoby to odpowiednie rozwiązanie, ponieważ skutecznie ogranicza cię do dwóch walut dla dowolnej wartości)

Porównanie

Realistycznie, musisz wybrać pomiędzy funkcją i metody transakcyjne. Oba mają swoje zalety i wady.

Metoda funkcjonalna nie musi przechowywać waluty lokalnej dla transakcji, musi przeliczać bieżące wartości db na walutę bazową, potrzebuje tylko jednego zestawu kursów wymiany, jest nieco trudniejsza do wdrożenia i utrzymania, choć wymaga mniej miejsca na dysku.

Metoda transakcji jest znacznie bardziej elastyczna, choć wymaga przechowywania większej ilości informacji o kursie walutowym, a każda transakcja musi być powiązana z danymi wejściowymi waluta (choć może to być stosowane do grupy klientów, a nie każdej transakcji). Zasadniczo nie miałoby to wpływu na kod już w produkcji, ponieważ lokalne waluty nadal byłyby używane na poziomie lokalnym, co czyniłoby To rozwiązanie łatwym do wdrożenia i utrzymania. Choć oczywiście wszelkie raporty lub wartości, które muszą być przekonwertowane na inną walutę, będą miały wpływ.

W obu przypadkach każda transakcja wymagałaby kursów wymiany dla czasu transakcji dla każdej waluty, której potrzebuje konwersja na – jest to potrzebne w momencie transakcji dla metody funkcjonalnej, jednak metoda transakcyjna pozwala na większą elastyczność, ponieważ dane dotyczące przeszłych kursów walut mogą być wprowadzane w dowolnym momencie (pozwalając na użycie dowolnej waluty), czyli tracisz możliwość korzystania z innych kursów walut w metodzie funkcjonalnej.

Podsumowanie

Transakcyjna metoda zarządzania walutą zapewni elastyczne podejście, unikając negatywnego wpływu na wydajność klienta i zerowy kod klienta modyfikacja. Negatywny wpływ na wyniki prawdopodobnie wystąpi w raportach, w których wszystkie będą wymagały przeróbek, jeśli wymagane są różne waluty. Każda witryna klienta będzie musiała przechowywać odniesienie do waluty, która określa, jaka jest ich waluta wejściowa. Powinno być możliwe uniknięcie przechowywania kursów walut na wysokim poziomie( np. grupa stron klientów itp.), co zminimalizuje ilość przechowywanych danych. Problemy mogą wystąpić, jeśli informacje o kursie walutowym są wymagane na niższym poziomie.

 41
Author: Mr Shoubs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-10 14:49:50

Nie ma jednej odpowiedzi, ponieważ bardzo zależy to od sposobu, w jaki firma obsługuje transakcje w tych walutach. Niektóre firmy stosują dość wyrafinowane sposoby zarządzania walutami obcymi. Proponuję poczytać o księgowości wielowalutowej.

Najważniejszą rzeczą do zrobienia jest przechwycenie danych w jednostce, wartości i dacie, w której transakcja biznesowa jest wykonywana bez konwersji, lub ryzykujesz utratę czegoś w tłumaczeniu. W przypadku wyświetlania i raportowania Konwertuj na żądanie, korzystając z pierwotnego kursu wymiany lub innego kursu wymiany w zależności od intencji użytkownika.

Przechowuj i obliczaj wartości jako' Decimal ' (w C#) - nie używaj float/double, bo będziesz narażony na błędy zaokrąglania.

Na przykład, sposób, w jaki zrobiłem aplikację wielu walut w poprzednim życiu był:

  • każdego dnia Kursy wymiany na dany dzień były ustalane, a to było przechowywane w bazie danych i buforowane do konwersji w podanie.
  • wszystkie transakcje byłyby ujmowane jako wartość + waluta + Data (tj. brak konwersji)
  • wyświetlanie transakcji w walucie użytkownika odbywało się w locie. Wyjaśnij, że nie jest to waluta transakcji, ale waluta wyświetlania. Jest to podobne do wyciągu z karty kredytowej, gdy wyjechałeś na wakacje. Pokazuje kwotę transakcji zagranicznej, a następnie, ile to kończy się kosztować w rodzimej walucie.
 18
Author: Frederik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 17:14:08

Nasza firma zajmuje się księgowością i budżetowaniem wielu walut. Rozwiązanie, które wdrożyliśmy, jest dość proste i obejmuje następujące elementy:

  1. Jedna tabela walut, z kilkoma polami zawierającymi liczby miejsc po przecinku, które należy uwzględnić dla danej waluty (tak, niektóre waluty muszą być zarządzane z 3 miejscami po przecinku ...) i wartość kursu walutowego, która nie ma innego znaczenia niż "proponowany / domyślny kurs walutowy" przy ocenie "niewykonany" lub "oczekujący" transakcje finansowe (zob. infra)

  2. W tej tabeli walut jeden z rekordów ma Kurs wymiany równy 1. Jest to główna / pivotowa waluta w naszym systemie

Wszystkie transakcje finansowe lub wszystkie operacje o wymiarze finansowym (to, co nazywamy zobowiązaniami w naszym języku), są sortowane jako "oczekujące" lub "wykonane":

  1. Transakcje oczekujące to na przykład faktury, które mają być otrzymane za określoną kwotę w określonym dniu. W naszym systemie monitorowania budżetu kwoty te są zawsze przeceniane zgodnie z "proponowanym/domyślnym kursem wymiany" dostępnym w tabeli walut.

  2. Wykonane transakcje są zawsze zapisywane z datą wykonania, kwotą, walutą i kursem wymiany, który należy potwierdzić / wpisać podczas wprowadzania danych wykonania.

 9
Author: Philippe Grondier,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 17:32:55

(zakładam, że już wiesz, że zdecydowanie nie powinieneś przechowywać danych walutowych jako float i dlaczego)

Moim zdaniem praca z jedną walutą bazową może być łatwiejsza; jednak powinieneś zapisać pierwotną kwotę, pierwotną walutę, kurs wymiany i kwotę waluty bazowej - w przeciwnym razie Twój dział księgowy. mogą zjeść cię żywcem, ponieważ prawdopodobnie będą trzymać różne waluty osobno.

 2
Author: Piskvor left the building,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 14:14:35

Ponieważ kursy walut zmieniają się, jedno podejście jest takie, jak wspomniałeś - przechowuj kwotę "wpisaną tak, jak jest", która nie jest konwertowana, ale wyświetla pole towarzyszące, które jest wyświetlane tylko i pokazuje przeliczoną kwotę. Aby dokonać przeliczenia, wymagana byłaby tabela kursów walut i ich obowiązujących przedziałów dat. Jeśli rozmiar jest mały, buforowanie na kliencie jest opcją. W przeciwnym razie do przeprowadzenia konwersji wymagane byłoby zdalne wywołanie.

 1
Author: btreat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-30 14:14:06