이전 포스팅에서 기본적인 테이블 생성을 해보았다면, 그에 따른 설정 가능한 속성들을 살펴보자.
아래 항목들을 살펴보면 테이블에 관한 중요 설정은 살펴 본 것이라 하겠다.
-. 금액과 수량 필드의 참조 필드
-. Foreign key와 Check Table
-. Search Help
금액과 수량 필드의 참조 필드
ABAP에서는 금액과 수량을 위해서 아래의 두 가지 Data Type을 기본 제공한다.
금액 : CURR (Currency field, stored as DEC)
수량 : QUAN (Quantity field, points to a unit field with format UNIT)
논리적으로 생각해보면 금액 1000 이것은 한화(KRW) 냐 미화(USD) 냐에 따라 그 값어치가 많이 다를 것이다.
마찬가지로
수량 1000이 KG 인지 G 인지에 따라서도 마찬가지이다.
금액인 CURR 형식의 필드는 통화 키가 무엇인지를 정해주는 것이 필요하고, 수량인 QUAN 형식의 필드는 그 수량단위가 무엇인지 정해주느것이 필요하다.
그것을 세팅하는 곳이 Currency/Quantity Fields탭이 되겠다.
CURR, QUAN이라는 Data Type 은 기본 데이터형인 DEC (Counter or amount field with comma and sign)로 기술되어있다.
CURR을 사용한 13자리에 소수점 2자리 포함 필드는 DEC 13,2로 선언해도 같은 필드가 되겠다.
테스트를 위하여
Data Element로 생성한 금액/수량 필드 2개
Pre-defined Type으로 DEC를 사용한 금액/수량 필드 2개
비교를 위해 Data Element로 생성한 금액/수량 필드 2개
그리고 통화키 필드(Data Element WAERS), 수량단위 필드(Data Element MEINS)로 생성한 필드 2개를 생성하자.
1000원(KRW) 이라는 데이타를
DMBTR 필드에 '1000', WAERS 필드에 'KRW'
으로 저장한다면, 조회 이용시에도 금액과 화폐단위를 알 수 있게된다.
이 처럼 DMBTR 필드의 화폐단위는 WAERS 필드에 있다고 알려주는 설정을 하는곳이 Currency/Quantity Fields탭이 되겠다. 수량 필드도 마찬가지 이다.
여기에 함정이 있다. Reference table 필드가 있다는 것은 꼭 테이블이 자신이 아닐 수 있다는 얘기다.
그럼 다른 테이블의 통화키를 참조해 보자. DMBTR2, MENGE2는 다른 테이블 필드를 참조했다. 테이블을 활성화하면 오류 없이 활성화가 될 것이다.
둘은 서로 어떻게 다를까?
자기 테이블을 참조한 경우는 테이터가 있는 라인의 통화 키를 읽어서 라인별로 참조를 하게 된다.
아래 그림을 보자.
값은 모두 12000.12를 넣었다.
DMBTR : 자기 테이블의 WAERS 참조
DMBTR2 : 관련 없는 테이블의 WAERS 참조
DMBTR은 해당 국가의 통화가 소수점이 있고 없고에 따라 화면에 소수점이 달리 표현된다.
그러나 DMBTR2는 참조한 다른 테이블의 몇 번째 라인의 통화 키가 참조되는지에 대한 특정이 불가능하므로 통화 키 참조가 안된 것처럼 표시된다.
어떤 테이블의 금액 필드가 모두 특정 국가의 기본통화 키를 참조한다 와 같은 광의적인 표현으로 사용할 때 유용하다.
의도적으로 통화 키를 참조 않고 금액을 넣거나 소수점을 사용하여 숫자를 저장하고 싶으면 DEC Type으로
직접 필드 길이와 소수점 길이를 지정하여 사용이 가능하다.
이때는 참조키 필드가 없어도 테이블을 활성화하는데 지장을 받지 않는다. 같은 금액이지만 DMBTR1이 그러한 경우이겠다.
수량인 MENGE 필드도 위와 같이 사용된다.
DMBTR의 12000.12가 왜 KRW와 만나면 소수점이 없어지고 1,200,012로 보이는지는 긍금하신 분이 있다면 빙고다.
SAP를 처음 접했을 때 이상한 부분 중 하나였다.
SE11에서 테이블을 조회한 후 Setting -> User Parameters... 에서 SE16 Standard List를 선택하고 보면 아래와 같이
모두 같은 값들이 들어가 있는 것을 볼 수 있다.
SE16 Standard List 보기는 DB에 실제로 들어가 있는 값을 그대로 보여준다. 통화 키에 따라 소수점을 없애거나 앞에 필요 없는 0을 없애고 보여주는 등의 화면 표시를 위한 변환을 하지 않고 실제 데이터를 봐야 할 때 사용하면 되겠다.
KRW 원화는 원 이하 단위가 없다 (이전에는 있었다 '전' ㅜㅜ 오래된 사람 ㅎ) USD 달러는 달러 밑에 센트가 있다 100 센트는 1달러이다. 영국은 1파운드(pound)는 100펜스(pence)이다.
이처럼 하위 소수점 통화가 있는 경우가 있고 우리나라처럼 없는 경우가 있다. 또한 우리나라는 화폐단위가 큰 나라에 속한다. 천원, 만원, 십만원 인플레가 무지막지만 후진국에나 있을 큰 단위이다. ( 일제 해방기에 일본의 만행이다 마구 돈을 찍어 우리 경제를 파탄내고 도망갔다.)
한화 KRW의 경우 DB에 소수점 두자로 변환해서 저장한다. 나누기 100 해서 넣는다는 얘기다. 보일 때는 *100 해서 화면에 뿌리면 된다. 대부분 프로그램에서 통화키를 참조하여 사용한다면 저절로 그렇게 보인다.
TCURX(Decimal Places in Currencies) 테이블을 보면 화폐별 소수점이 몇 자리 인지 나온다. 영국 파운드나 달러는 없다. 아마 표준이라서 없는 것 같다.
KRW -> '0'으로 나온다.
이런 특성은 프로그램에서 입력받은 값을 DB에 넣을 때 생각을 해봐야 한다는 것이다 잘못하면 *100 된 금액을 보며 얼굴을 붉힐 수 있다.
이후 금액의 변환은 실제 코딩에서 자세히 한 번 더 다루겠다.
이상으로 Table의 Currency/Quantity Fields탭 설명을 마치겠습니다.
긴 글 읽어 주셔서 감사합니다.
'ABAP' 카테고리의 다른 글
[SAP ABAP 강좌 6] 테이블 (Table) - Search Help (0) | 2020.12.01 |
---|---|
[SAP ABAP 강좌 5] 테이블 (Table) - Check Table (0) | 2020.11.29 |
[SAP ABAP 강좌 3] 테이블 (Table) 생성 (2) | 2020.11.27 |
[SAP ABAP 강좌 2] 데이타 엘리먼트 (Data Element) (0) | 2020.11.25 |
[SAP ABAP 강좌 1] 도메인 (Domain) (0) | 2020.11.24 |
최근댓글