SAP/ABAP

ABAP 금액 변환 방법 및 함수

그녀는애교쟁이 2014. 8. 22. 13:18
반응형

SAP 는 글로벌하게 쓰이는 솔루션이다. 그래서 금액을 저장하는 방식이 각 나라의 통화에 따라 다르기 때문에 화면에 출력하기 위해서는 별도의 조치를 취해 줘야한다. 특히 달러와 원하는 표현하는 방식이 다르기 때문에 ( 달러는 1.00 달러, 원화는 1000원 ) 이 다르기 때문에 별도의 변환하는 로직을 넣어주어야 한다. 


특히 테이블에 저장 될 때는 통화 필드는 별도의 통화단위를 가지는 필드를 엮어 주는데 테이블에 저장될 때 원화의 경우에도 달러와 같이 소숫점으로 저장을 해야 한다. 예를 들면 1000원을 테이블에 저장할 때 10.00 으로 저장이 되어야 나중에 추가로 계산을 하거나 통화필드와 연동해서 보여줄때 1000원이라고 정상적으로 표현이 가능하다. 


오늘은 통화를 1000원을 10.00 으로 바꾸는 방법을 포스팅 하려고 한다 . 간단하게 하자면 /100을 해버리면 간단하지만 SAP에서는 여러가지 방식을 지원하는데 많이 사용하는 두가지 방식을 포스팅 하려고 한다. 


Write 구문을 이용한 방식


테이블에서 조회를 하면 금액은 소수점으로 표시된 것을 원화로 표시하는 방식이다. 기존에도 많이 사용한 방식이고 현재도 많이 사용하고 있다. 간단한 Write 구문을 이용하여 원화로 출력을 할 수 있다. 처음에 이 코드를 왜 쓰나 했는데 차츰 지나고 나서 SAP가 글로벌 솔루션이 되기 위한 장치라고 생각하니 이해가 되었다. 


" 60.50 을 KRW 원화로 6050원으로 출력
DATA : L_ORIGINAL(15) TYPE P DECIMALS 2,
       L_TARGET(15)   TYPE N.

L_ORIGINAL = '60.50'.

WRITE L_ORIGINAL TO L_TARGET CURRENCY 'KRW'.
WRITE L_TARGET.


Standard Function 을 이용한 방식 - BAPI_CURRENCY_CONV_TO_INTERNAL


나는 function 을 이용하는 방식을 선호하는데 이것이 스텐다드에서 제공하는 Function 이라 믿음도 가고 보기에도 좋아서 사용하는 편이다. Function 명은 BAPI_CURRENCY_CONV_TO_INTERNAL 이다. 반대로 바꾸는 함수명은 BAPI_CURRENCY_CONV_TO_EXTERNAL 이다. 적절한 위치에 잘 넣어서 사용하면 되겠다.


  DATA : EXTERNAL LIKE  BAPICURR-BAPICURR.

  EXTERNAL = L_VALUE.

  " 금액을 변환한다. KRW 6,000 -> 60.00 로 변환
  CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_INTERNAL'
       EXPORTING
            CURRENCY             = L_WAERS  " L_WAERS 는 KRW
            AMOUNT_EXTERNAL      = EXTERNAL
            MAX_NUMBER_OF_DIGITS = 15
       IMPORTING
            AMOUNT_INTERNAL      = L_VALUE.

2020-10-05 추가


function currency_amount_sap_to_idoc 도 사용가능하다. ( SAP -> External )

function currency_amount_idoc_to_sap ( External -> SAP )