RANGE 변수는 참으로 신기한 변수 형태이다. 다른 언어에서는 없는 특이한 변수형이긴 하다. ABAP 에서도 특이한 부분인데 Internal Table 도 아닌 것이 그렇다고 변수도 아닌 것이 그 중간쯤의 형태를 가지고 있다. 오늘 포스팅 하고자 하는 내용은 이 특이한 RANGE 변수를 PERFORM 문에서 파라메터로 사용하는 방법이다. 결론부터 말하자면 RANGE 변수도 TABLE 처럼 PERFORM 문에 사용하면 된다는 것이다. 프로그래밍 할 때 RANGE 변수를 선언 하는 부분을 제외하면 Internal Table 로 생각하고 개발을 한다면 더 쉽게 개발을 할 수 있다.
RANGE 변수는 성능 개선을 위해 사용하기도 하는데, RANGE 변수에는 데이터가 무한대로 들어가는게 아니라는게 중요하다. 얼마인지 기억이 안나지만 10,000건은 안 들어가고 에러가 나서 FOR ALL ENTRIES 로 변경했던 경험이 있었다. 이건 다른 이야기는 이만 줄이고 나중에 포스팅 할 기회가 된다면 그 때 다뤄 보도록 하겠다.
아래의 코드를 설명하자면 TOP 에 전역변수로 RANGE 변수를 선언한 이후에 Perform 문에서 파라메터 부분에 Table 을 넣듯이 Tables ~ Structure 구문을 이용하여 선언하면 되겠다. 그리고 RANGE 변수는 SIGN, OPTION, LOW, HIGH 를 가진 Table 구조로 인식하여 1일~말일까지의 날짜를 넣어주었다.
" Include ***Top 에 전역 변수로 Ranges 로 변수를 선언한다. RANGES : GR_DATE FOR SY-DATUM. " Include ***F00 에 Perform 문에 테이블을 파라메터로 사용하는 것과 같이 선언한다. FORM GET_DATE_RANGE TABLES PR_BUDAT STRUCTURE GR_DATE. DATA LR_BUDAT LIKE RANGE OF SY-DATUM WITH HEADER LINE. LR_BUDAT-SIGN = 'I'. LR_BUDAT-OPTION = 'BT'. CONCATENATE P_GJAHR SO_MONAT-LOW '01' INTO LR_BUDAT-LOW. CALL FUNCTION 'RP_LAST_DAY_OF_MONTHS' EXPORTING DAY_IN = LR_BUDAT-LOW IMPORTING LAST_DAY_OF_MONTH = LR_BUDAT-HIGH EXCEPTIONS DAY_IN_NO_DATE = 1 OTHERS = 2. APPEND LR_BUDAT TO PR_BUDAT. ENDFORM. " GET_DATE_RANGE
반응형
'SAP > ABAP' 카테고리의 다른 글
ABAP Class ALV Checkbox 변경시 Data Changed Event 실행 (0) | 2014.12.15 |
---|---|
ABAP Class ALV Cell 별 색상 넣기 (0) | 2014.12.10 |
ABAP 파일 업로드, 다운로드시 파일 선택 팝업 생성 (0) | 2014.11.18 |
ABAP Report 프로그램 실행시 Tcode 체크 (0) | 2014.11.17 |
ABAP Parameters 에 소숫점 및 마이너스 금액 입력 (0) | 2014.10.21 |
ABAP Field Symbol 의 사용 (0) | 2014.09.03 |
ABAP Collect 의 사용 가이드 (0) | 2014.09.01 |
ABAP 금액 변환 방법 및 함수 (0) | 2014.08.22 |
ABAP 문자열 대문자, 소문자로 변환하는 방법 Translate (0) | 2014.08.07 |
CR 이 Lock 걸렸을 때 푸는 방법 ( SE09 사용 ) (0) | 2014.08.06 |