콘텐츠
ABAP WRITE 문
오랜만에 ABAP 포스팅 입니다. 이번에 메인 PC 에서 이클립스(Eclipse) 관련 설치를 진행 하던 도중 뭔가 꼬였는지 아무리 재 설치 해도 되지 않아서 PC 를 포멧 하느라 설치 해 두었던 SAP 개발 서버를 다시 설치해야 되었는데 귀찮아서 엊그제야 다시 설치 했습니다.
그래서 얼른 다시 ABAP 관련 포스팅을 하려다 선택한 것이 가장 기본적인 출력 문인 ‘WRITE 문’ 관련 포스팅 입니다.
WRITE 문은 자바(Java)로 치면 System.out.println 이고 자바스크립트(JavaScript) 로 치면 console.log 입니다. 프로그래밍한 문자열, 숫자, 변수의 값 등을 출력하게 됩니다.
단, 조금 다른 점은 위의 두 문장이 단순히 데이터를 ‘콘솔’ 이란 텍스트 출력 공간에 출력하기 위한 용도로 사용할 때 WRITE 문은 단순한 텍스트 출력이 아닌 리스트 뷰어에서 볼 수 있는 출력입니다.
그래서 WRITE 문을 이용해 보고서를 만드는 등(마치 HTML Table 처럼) 여러 형태로 출력할 때 활용이 가능합니다.
ABAP WRITE 문 기본 사용
WRITE 문의 기본 구조는 다음과 같습니다.
WRITE: <value>.
ABAP이 <value> 영역에는 텍스트, 숫자 등도 가능하며 변수 명을 입력해 값을 출력할 수도 있습니다.
예를 들어 다음 구문는 문자열 Hello, World 를 출력합니다.
문자열 출력
WRITE: 'Hello, World!'.
ABAP출력 결과는 다음 이미지와 같습니다. (위에 WRITE 문 테스트는 생성한 프로그램의 Description 입니다.)
다음은 한번 문자열 변수를 선언하고 값을 부여한 후 출력해 보겠습니다.
변수 출력
DATA: LV_TEXT TYPE C LENGTH 13 VALUE 'Hello, World!'.
WRITE: LV_TEXT.
ABAPWRITE 문: 다양한 출력 옵션
날짜 출력 옵션
WRITE 문에선 날짜 타입의 변수를 출력 할 때 원하는 형식으로 출력할 수 있는 옵션이 있습니다. 사용법도 간단한데 변수 뒤에 출력하고 싶은 형태의 옵션을 입력하면 됩니다. 다음 코드를 봅시다.
DATA: LV_TODAY TYPE D. "날짜 타입 변수 선언
LV_TODAY = SY-DATUM. "SY-DATUM 은 오늘 날짜가 담긴 System 변수 입니다.
WRITE: LV_TODAY DD/MM/YYYY. "미국식 날짜 형태로 표시하기
ABAP이 구문은 다음처럼 출력 됩니다.
이처럼 날짜 변수의 표시 형태는 아예 자유로운 것은 아니고 제가 테스트한 결과 다음과 같은 형식들이 지원되고 있습니다. 의아한 것은 YYYYMMDD 등의 형식도 지원할 법 한데 활성화 시 오류가 발생합니다.
그리고 주의할 점은 /(슬래시) 부분이 슬래시로 표시되는게 아니라 출력 후엔 .(온점) 으로 표시 됩니다.
- YYMMDD
- MMDDYY
- MM/DD/YY
- MM/DD/YYYY
- DDMMYY
- DD/MM/YY
- DD/MM/YYYY
정렬 옵션
출력 내용의 정렬 옵션 입니다. 다음 옵션은 우측 정렬 옵션 입니다. 다음 코드를 출력해 봅시다.
DATA: LV_TEXT TYPE C LENGTH 13 VALUE 'Hello, World!'.
WRITE: LV_TEXT RIGHT-JUSTIFIED.
ABAP어라 근데 출력을 해보니 위의 옵션이 없을 때랑 차이가 없네요? 그 이유는 출력 된 내용이 차지 하는 칸은 변수에 설정된 길이의 최대 만큼 차지해서 그렇습니다. 이미 값 출력에 13의 길이를 전부 사용한 셈이죠.
그럼 TYPE C 의 길이를 늘려줘 볼까요? 그럼 늘려진 길이의 우측에 맞춰 정렬되는 것을 확인 가능합니다.
DATA: LV_TEXT TYPE C LENGTH 20 VALUE 'Hello, World!'.
WRITE: LV_TEXT RIGHT-JUSTIFIED.
ABAP이 정렬 옵션에는 다음과 같은 옵션들이 있습니다.
- LEFT-JUSTIFIED: 좌측 정렬
- RIGHT-JUSTIFIED: 우측 정렬
- CENTERED: 중앙 정렬
출력 길이 지정
변수의 출력 시 길이를 지정하는 방법도 있습니다. 바로 변수(숫자) 를 통해 가능합니다. 예를 들어 위의 13 길이를 지닌 LV_TEXT 를 출력할 때 괄호 뒤에 숫자를 5를 줘서 출력해 보겠습니다. 그럼 Hello 만 출력 됩니다.
DATA: LV_TEXT TYPE C LENGTH 13 VALUE 'Hello, World!'.
WRITE: LV_TEXT(5).
ABAP그럼 기존 13을 넘어서는 길이 값을 지정해 봅시다. 그러면 활성화 단계에서 오류가 발생하게 됩니다.
통화 형식 옵션
통화 관련 형식을 지정할 수 있는 옵션으로 기본 형태는 WRITE 변수명 CURRENCY ‘통화명’. 입니다. 예를 들어 USD 는 기본적으로 소숫 점 둘째 자리(예: 123.45)를 지니는 숫자로 되어있습니다. 그래서 LV_PRICE 변수에 123.45 란 숫자 값이 담겨 있을 때 USD 로 출력하게 되면 다음과 같습니다.
DATA: LV_PRICE TYPE P DECIMALS 2 VALUE '123.45'.
WRITE: LV_PRICE CURRENCY 'USD'.
ABAP단, 애초에 값이 소숫점 둘째 자리까지의 값이라 변화는 없네요. 그럼 한국식 통화인 KRW 를 입력해 봅시다. 그럼 다음과 같이 출력 됩니다.
DATA: LV_PRICE TYPE P DECIMALS 2 VALUE '123.45'.
WRITE: LV_PRICE CURRENCY 'KRW'.
ABAPABAP 을 다루다 보면 대부분 금액과 관련된 숫자 값을 출력하게 되는데 이 때 특히 소숫 점이 없는 우리나라에선 이 옵션을 자주 사용하게 될 수 있습니다.
그리고 또 특이한 점이 SAP 는 독일 태생이라 그런지 소숫점에 쉼표를, 천 단위 구분자에 점을 쓰는 점 입니다. 이는 유럽에서 주로 사용하는 통화 표기법이죠. 실제 업무 환경에선 본적 없는 현상인데 개발 용 에디션이라 아무래도 기본 지역으로 독일이 설정되어 있는 것 같습니다.
줄 바꿈
여러 변수를 출력해 보시면 알겠지만 한 줄로 출력 되는 것을 알 수 있습니다.
DATA: LV_TEXT1 TYPE C LENGTH 5 VALUE 'TEXT1',
LV_TEXT2 TYPE C LENGTH 5 VALUE 'TEXT2'.
WRITE LV_TEXT1.
WRITE LV_TEXT2.
ABAP이는 마치 자바(Java) 에서 System.out.print 와 같이 말이죠. 근데 println 출력 문 마다 줄 바꿈이 이루어 지는 것처럼 WRITE 문도 가능 합니다. 그건 변수 명 앞에 /(슬래시) 를 입력하는 것입니다.
DATA: LV_TEXT1 TYPE C LENGTH 5 VALUE 'TEXT1',
LV_TEXT2 TYPE C LENGTH 5 VALUE 'TEXT2'.
WRITE / LV_TEXT1.
WRITE / LV_TEXT2.
ABAP출력 포멧 설정
값을 자신이 원하는 포멧에 맞춰 출력할 수 있는 옵션으로 EDIT MASK 가 존재 합니다. 이는 예를 들어 숫자 값을 카드번호, 사업자등록 번호의 표기 형식에 맞게 표현할 수 있습니다.
이 때 변수의 길이는 최종적으로 출력 될 길이(아래의 경우 – 가 포함된)가 되어야 정상적으로 출력 되었습니다.
DATA: LV_NUMBER TYPE C LENGTH 13 VALUE '1234567890'.
WRITE: LV_NUMBER USING EDIT MASK '___-__-_____'.
ABAPWRITE 문: 시각적 옵션
위는 출력 되는 형태에 따른 옵션들이면 아래는 색상, 밑줄 등 강조와 관련 된 시각적인 옵션들 입니다.
색상과 스타일(COLOR 옵션)
COLOR 옵션은 말 그대로 출력 결과에 색상을 부여하는 옵션 입니다. 1~7 까지 의 값을 부여할 수 있습니다.
WRITE '제목에 색상 부여' COLOR 1.
ABAP다음은 1~7 까지의 값의 출력 결과를 모아봤습니다.
강조 옵션
강조 옵션 INTENSIFIED 옵션으로 원래 제가 알기론 OFF 가 기본 인 것으로 아는데 OFF 가 오히려 색상이 다르고 ON 과 기본 상태가 같았습니다. 이 부분은 좀 더 알아봐야 할 것 같아요. 테마의 영향도 있을 수 있다고 들었습니다.
DATA: LV_TEXT TYPE C LENGTH 5 VALUE 'TEXT'.
WRITE:/ LV_TEXT COLOR 1 INTENSIFIED ON,
/ LV_TEXT COLOR 1 INTENSIFIED OFF,
/ LV_TEXT COLOR 1.
ABAP아이콘 표시
해당 구문은 SAP 내의 ICON 코드를 WRITE 를 통해 출력할 때 사용합니다.
WRITE: / '@08@' AS ICON.
ABAPICON 코드는 T-CDOE: SE38 에서 SHOWICON Program 을 입력하고 F8 을 눌러 실행합니다. 그리고 sorted according to attributes 를 선택한 상태로 다시 실행 버튼을 누르거나 F8을 누릅니다. 그럼 ICON 목록이 보입니다.
여기서 코드는 internal 필드의 두 자리 코드를 @ 사이에 두면 됩니다. 예를 들어 ICON_NEXT_VALUE 의 경우 @OI@ 가 됩니다.
심볼 표시
심볼은 특정 기호를 표시하는 옵션 입니다. 다음 코드로 출력 가능 합니다.
WRITE / '! ' AS SYMBOL.
ABAP사용할 수 있는 기호 목록은 다음과 같습니다.
기호 목록 보기
WRITE: ‘ ‘ AS SYMBOL,
‘! ‘ AS SYMBOL,
‘” ‘ AS SYMBOL,
‘# ‘ AS SYMBOL,
‘$ ‘ AS SYMBOL,
‘% ‘ AS SYMBOL,
‘& ‘ AS SYMBOL,
”’ ‘ AS SYMBOL,
‘( ‘ AS SYMBOL,
‘) ‘ AS SYMBOL,
‘* ‘ AS SYMBOL,
‘+ ‘ AS SYMBOL,
‘, ‘ AS SYMBOL,
‘. ‘ AS SYMBOL,
‘/ ‘ AS SYMBOL,
‘0 ‘ AS SYMBOL,
‘1 ‘ AS SYMBOL,
‘2 ‘ AS SYMBOL,
‘3 ‘ AS SYMBOL,
‘4 ‘ AS SYMBOL,
‘5 ‘ AS SYMBOL,
‘6 ‘ AS SYMBOL,
‘7 ‘ AS SYMBOL,
‘8 ‘ AS SYMBOL,
‘9 ‘ AS SYMBOL,
‘: ‘ AS SYMBOL,
‘; ‘ AS SYMBOL,
‘< ‘ AS SYMBOL,
‘= ‘ AS SYMBOL,
‘> ‘ AS SYMBOL,
‘? ‘ AS SYMBOL,
‘A ‘ AS SYMBOL,
‘B ‘ AS SYMBOL,
‘C ‘ AS SYMBOL,
‘D ‘ AS SYMBOL,
‘E ‘ AS SYMBOL,
‘F ‘ AS SYMBOL,
‘G ‘ AS SYMBOL,
‘H ‘ AS SYMBOL,
‘I ‘ AS SYMBOL,
‘J ‘ AS SYMBOL,
‘K ‘ AS SYMBOL,
‘L ‘ AS SYMBOL,
‘M ‘ AS SYMBOL,
‘N ‘ AS SYMBOL,
‘O ‘ AS SYMBOL,
‘P ‘ AS SYMBOL,
‘Q ‘ AS SYMBOL,
‘R ‘ AS SYMBOL,
‘S ‘ AS SYMBOL,
‘T ‘ AS SYMBOL,
‘U ‘ AS SYMBOL,
‘V ‘ AS SYMBOL,
‘W ‘ AS SYMBOL.