cbo 테이블에서 통화금액 필드를 curr로 하지 않고 dec 타입으로 되어 있는 데이터가 있는데
다른 스텐다드에 통화 금액과 계산해야하는 경우가 많습니다.
CBO 테이블의 KRW의 경우는 계산할때 100을 나눠서 계산을 해주고 있는데
100을 나눠줘야 하는 통화가 또 무엇이 있는지 궁금합니다.
댓글 3
-
현준탱
2008.12.05 17:30
-
노름마치
2009.08.18 00:53
원화는 곱하기 100을 한다? 흠,,, 이런 형태로 알고 계시면 안되는뎅,,,
1. config 에 보시면 화폐별로 소숫점 아랫자리 settng 부분이 있습니다.
일반적으로 USD 는 두자리, 원화는 소숫점 아래자리를 가져 가지 않지요. 물론 화폐별로 SETTING 해야 하고용...
2. 데이타 딕셔너리에서 보면 금액필드는 소숫점 아래 2자리를 물리적으로 가져가게 되어 있는데...
3. 하,,, 소숫점 2자리 이상 쓰는 화폐는 어떻게 DB에 담지?
4. 결국 단가나 금액은 컨버젼을 해서 넣고, 불러온 후에도 다시 화폐로 컨버젼을 해줘야 하지요..
5. 이런 이유로 원화인 경우에 DB에서 읽은후 곱하기 100을 한 것 인데.... 이건 아주 몹쓸 방법이구요.
아래와 같은 구문으로 확인을 하셔야 정확하죠...
물론 ....
WRITE from_amt TO to_amt CURRENCY '화폐'. 이렇게 하시는 것이 훨 낫긴 하죠...
PERFORM get_decimal_place USING itab-waers.
itab-amt = ekbe-wrbtr * decimal_point2.
FORM get_decimal_place USING waers.
decimal_point2 = 1.
SELECT SINGLE * FROM tcurx
WHERE currkey = waers.
IF sy-subrc >< 0.
tcurx-currdec = 2.
ENDIF.
IF tcurx-currdec > 2.
tcurx-currdec = tcurx-currdec - 2.
DO tcurx-currdec TIMES.
decimal_point2 = decimal_point2 / 10.
ENDDO.
ELSE.
tcurx-currdec = 2 - tcurx-currdec.
DO tcurx-currdec TIMES.
decimal_point2 = decimal_point2 * 10.
ENDDO.
ENDIF.
ENDFORM. "GET_DECIMAL_PLACE
-
노랑레몬
2010.07.17 02:58
감사합니다. 좋은 구문 잘 받아갑니다
DATA: BEGIN OF it_t001 OCCURS 0 .
DATA: waers LIKE t001-waers,
netwr LIKE vbak-netwr.
DATA: END OF it_t001.
START-OF-SELECTION.
SELECT * INTO CORRESPONDING FIELDS OF TABLE it_t001
FROM t001.
DELETE ADJACENT DUPLICATES FROM it_t001 COMPARING waers.
LOOP AT it_t001.
it_t001-netwr = 100.
WRITE:/01 it_t001-waers, it_t001-netwr CURRENCY it_t001-waers.
ENDLOOP.
END-OF-SELECTION.
이렇게 확인을 하셔도 될 것 같습니다^^;