다중 통화 모범 사례 및 구현
여러 통화를 다루는 모범 사례에 대한 토론을 찾기가 어렵습니다. 누구든지 도움을 줄 수있는 통찰력이나 링크를 제공 할 수 있습니까?
이 작업을 수행하는 방법에는 여러 가지가 있음을 이해합니다. 입력 된 값을있는 그대로 저장하는 트랜잭션 방식이나 기본 요율로 변환하는 기능적 방식입니다. 두 경우 모두 미래에 변환해야 할 각 통화에 대한 거래 시간을 포괄하는 환율을 저장해야합니다.
이전 환율 정보를 나중에 입력 할 수 있지만 기능적 접근 방식보다 더 많은 오버 헤드 (더 많은 환율 데이터를 저장해야하므로)가 더 많은 트랜잭션 접근 방식의 유연성이 마음에 듭니다.
성능 및 확장 성은 주요 요소입니다. 우리는 (모든 .net) win & 웹 클라이언트, 보고서 세트 및 데이터베이스 백엔드에 기능을 제공하는 웹 서비스 세트를 가지고 있습니다. 필요한 경우 환율 정보를 어딘가 (예 : 클라이언트)에 캐시 할 수 있습니다.
편집 : 나는 일부 문서에 대한 링크 또는 이전 경험의 'gotchas'를 포함하는 답변을 정말로 원합니다.
확실한 토론을 찾을 수 없었기 때문에 결과를 게시하고 누군가에게 도움이되기를 바랍니다.
통화 테이블에는 모든 세계화 클래스를 사용하기위한 문화 코드가 포함되어야합니다.
거래 방법
- 고객에게 현지 통화로 저장하고 거래 발생시 적용된 거래 통화에 대해 여러 변환율을 저장합니다.
- 각 통화에 대해 여러 환율이 필요합니다.
- 사이트 설정 테이블은 입력 통화를 저장합니다.
- 고객 수준에서 값의 입력 및 출력은 값이 올바른 통화로 가정 될 수 있으므로 오버 헤드가 없습니다.
- 환율을 적용하려면 입력 된 값의 통화 (교차 클라이언트 보고서의 경우 다를 수 있음)를 알고이를 거래 기간 동안 유효한 관련 엔티티 환율로 곱해야합니다.
기능적 방법
- 하나의 기본 통화로 저장하고 시간이 지남에 따라 적용되는이 통화에 대한 환율을 유지합니다.
- 값을 변환하는 가장 좋은 장소는 프런트 엔드와 데이터베이스 사이의 지점에서 고려해야합니다.
- 입력 성능은 기준 통화로의 변환이 필요하므로 약간의 영향을받습니다. 환율은 클라이언트에 캐시 될 수 있습니다 (각 엔티티는 다른 환율을 사용할 수 있음)
- 여기에는 한 세트의 환율이 필요했습니다 (기본에서 다른 모든 필수 통화로).
- 환율을 적용하려면 모든 거래가 기본 통화와 필수 통화간에 변환되어야합니다.
합성물
- 거래 시점에서 거래 가치와 기능 가치를 저장하면 환율 정보를 저장할 필요가 없습니다. (이것은 주어진 가치에 대해 두 개의 통화로 효과적으로 제한하기 때문에 적절한 해결책이 아닙니다.)
비교
현실적으로는 기능과 트랜잭션 방법 중에서 선택해야합니다. 둘 다 장점과 단점이 있습니다.
기능적 방법은 거래를 위해 현지 통화를 저장할 필요가 없으며 현재 db 값을 기본 통화로 변환해야하며 한 세트의 환율 만 필요하며 저장 공간이 적지 만 구현 및 유지 관리가 약간 더 어렵습니다.
거래 방법은 훨씬 더 유연하지만 더 많은 환율 정보를 보유해야하며 각 거래는 입력 통화와 연결되어야합니다 (이는 각 거래가 아닌 고객 그룹에 적용될 수 있음). 이 솔루션을 쉽게 구현하고 유지 관리 할 수 있도록 로컬 통화가 여전히 로컬 수준에서 사용되므로 일반적으로 이미 생산중인 코드에는 영향을 미치지 않습니다. 분명히 다른 통화로 변환해야하는 보고서 나 값은 영향을받습니다.
두 경우 모두, 각 거래는 변환이 필요한 각 통화에 대한 거래 시간에 대한 환율이 필요합니다. 기능적 방법의 경우 거래 시점에 필요하지만 거래 방법은 과거 환율 데이터를 입력 할 수 있으므로 더 많은 유연성을 허용합니다. 언제든지 (모든 통화 사용 허용), 즉 기능적 방법에서 다른 환율을 사용할 수있는 능력을 잃게됩니다.
결론
통화 관리의 트랜잭션 방법은 유연한 접근 방식을 제공하여 클라이언트 성능에 부정적인 영향을주지 않고 클라이언트 코드 수정이 전혀 없습니다. 다른 통화가 필요한 경우 모두 재 작업이 필요한 보고서에서 부정적인 성능 영향이 발생할 수 있습니다. 각 클라이언트 사이트는 입력 통화가 무엇인지 나타내는 통화 참조를 저장해야합니다. 높은 수준 (예 : 고객 사이트 그룹 등)에 환율을 저장하는 것이 가능해야 저장되는 데이터의 양을 최소화 할 수 있습니다. 낮은 수준에서 환율 정보가 필요한 경우 문제가 발생할 수 있습니다.
비즈니스가 해당 통화로 거래를 처리하는 방식에 따라 달라지기 때문에 단일 답변은 없습니다. 일부 회사는 외화를 관리하기 위해 상당히 정교한 방법을 사용합니다. 다중 통화 회계에 대해 읽어 보는 것이 좋습니다.
가장 중요한 것은 비즈니스 거래가 변환없이 수행되는 단위, 가치 및 날짜의 데이터를 캡처하는 것입니다. 그렇지 않으면 번역에서 무언가를 잃을 위험이 있습니다. 표시 및보고의 경우 원래 환율 또는 사용자의 의도에 따라 다른 환율을 사용하여 요청시 변환합니다.
값을 'Decimal'(C #) 유형으로 저장하고 계산합니다. float / double을 사용하지 마십시오. 그렇지 않으면 반올림 오류에 취약 해집니다.
예를 들어 전생에 다 통화 앱을 만든 방식은 다음과 같습니다.
- 매일 환율이 설정되고 데이터베이스에 저장되고 애플리케이션에서 변환을 위해 캐시됩니다.
- 모든 거래는 가치 + 통화 + 날짜로 캡처됩니다 (예 : 전환 없음).
- 거래를 사용자의 통화로 표시하는 것은 즉석에서 이루어졌습니다. 이것이 거래 통화가 아니라 표시 통화임을 분명히하십시오. 이것은 휴가를 떠났을 때의 신용 카드 명세서와 유사합니다. 그것은 외화 거래 금액을 보여주고 귀하의 모국 통화로 얼마나 많은 비용이 드는지 보여줍니다.
우리 회사는 여러 통화 회계 및 예산을 다룹니다. 우리가 구현 한 솔루션은 매우 간단하며 다음을 포함합니다.
하나의 통화 테이블, 통화에 대해 고려할 소수 자릿수를 포함하는 몇 개의 필드 (예, 일부 통화는 소수 3 자리로 관리해야 함 ...)와 환율 값 ( '제 안됨'이라는 것 외에 다른 의미 없음) '미 실행'또는 '보류'금융 거래를 평가할 때 / 기본 환율 '(아래 참조)
이 통화 테이블에서 레코드 중 하나의 환율이 1입니다. 이것은 우리 시스템의 기본 / 피벗 통화입니다.
모든 금융 거래 또는 재무 차원 (우리 언어로 약정이라고 부르는 것)이있는 모든 작업은 '보류 중'또는 '실행 됨'으로 분류됩니다.
보류중인 거래는 예를 들어 특정 날짜에 특정 금액에 대해 수신 될 것으로 예상되는 송장입니다. 당사의 예산 후속 시스템에서 이러한 금액은 항상 통화 표에서 사용할 수있는 '제안 / 기본 환율'에 따라 재평가됩니다.
실행 된 거래는 항상 실행 일, 금액, 통화, 환율 과 함께 저장되며 , 실행 데이터 입력시 확인 / 입력해야합니다.
(통화 데이터를 부동 소수점으로 저장해서는 안된다는 것을 이미 알고 있다고 가정합니다.)
In my opinion, working with a single base currency might be easier; however, you should save the original amount, original currency, conversion rate, and base currency amount - otherwise your Accounting dept. might eat you alive, as they're likely to keep different currencies sort of separately.
Since exchange rates fluctuate, one approach is as you mentioned - store an "entered as is" amount that is not converted but display a companion field which is display only and shows the converted amount. In order to do the conversion, a table of exchange rates and their applicable date ranges would be required. If the size of this is small, caching on the client is an option. Otherwise, a remote call would be required in order to perform the conversion.
참고URL : https://stackoverflow.com/questions/3150018/multi-currency-best-practice-implementation
'Programing' 카테고리의 다른 글
대기열 크기 제한 (0) | 2020.12.13 |
---|---|
통합 테스트에 필요한 데이터베이스 데이터 (0) | 2020.12.13 |
Python (.T)의 구문 (0) | 2020.12.13 |
__dict__ 클래스가 매핑 프록시 인 이유는 무엇입니까? (0) | 2020.12.13 |
서비스를 클래스에 주입하는 방법 (구성 요소가 아님) (0) | 2020.12.13 |