- Type-1 Program이나 Executable Program이라고 한다.
- 아래 그림의 흐름대로 프로그램이 처리된다.
1. runtime environment가 INITIALIZATION 이벤트를 생성하고 이에 대응하면 이벤트 블럭(소스코드에서 INITIALIZATION 구문 영역)을 호출한다. 보통 선언된 변수들을 날짜에 맞게 초기화하는 등의 작업을 한다.
- Report program은 다음과 같이 크게 3가지 구조로 분류할 수 있다.
1. 데이터 선언부와 조회 선택 화면(SELECTION SCREEN)
2. 실행 시점까지의 Event
3. 데이터를 뿌려주는 List Event
*&---------------------------------------------------------------------*
*& REPORT ZBCR0040
*&
*&---------------------------------------------------------------------*
*&라이센스 관리를 위한 유저 현황 리포트
*&
*&---------------------------------------------------------------------*
REPORT ZBCR0040.
TYPE-POOLS: icon. " TYPE-GROUP을 사용하기 위해 선언
" SALV 사용을 위한 관련 타입 변수 선언
DATA : ALV_TABLE TYPE REF TO CL_SALV_TABLE.
DATA : ALV_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE.
DATA : SINGLE_COLUMN TYPE REF TO CL_SALV_COLUMN.
" 개별 계정 현황 집계 테이블
TYPES : BEGIN OF T_INDI_USER,
BNAME LIKE USER_ADDR-BNAME, " SAP아이디
BNAME_NM LIKE USER_ADDR-NAME_TEXTC, " 사용자이름
KOSTL LIKE CSKT-KOSTL, " 코스트센터
KOSTL_NM LIKE CSKT-KTEXT, " 코스트센터 내역
LIC_TYPE LIKE USR06-LIC_TYPE, " 라이센스
LIC_TYPE_NM LIKE TUTYP-UTYPTEXT, " 라이센스 내역
UFLAG LIKE USR02-UFLAG, " 잠금생타값
UFLAG_NM TYPE ICON_D, " 잠금상태아이콘
TRDAT LIKE USR02-TRDAT, " 마지막 로그온 일자
GLTGB LIKE USR02-GLTGB, " 효력종료일
END OF T_INDI_USER.
DATA : GT_INDI_USER TYPE TABLE OF T_INDI_USER.
DATA : GS_INDI_USER LIKE LINE OF GT_INDI_USER.
" 코스트 센터별 현황
TYPES : BEGIN OF T_KOSTL_USER,
BUKRS LIKE CSKS-BUKRS, " 회사
BUTXT LIKE T001-BUTXT, " 회사명
KOSTL LIKE CSKS-KOSTL, " 코스트센터
KOSTL_NM LIKE CSKT-KTEXT, " 코스트센터명
TOTAL_CNT TYPE I, " 발급 계정 수
LOCKED_CNT TYPE I, " 잠긴 계정 수
OPEN_CNT TYPE I, " 열린 계정 수
END OF T_KOSTL_USER.
DATA : GT_KOSTL_USER TYPE TABLE OF T_KOSTL_USER.
DATA : GS_KOSTL_USER LIKE LINE OF GT_KOSTL_USER.
" 회사코드별 현황
TYPES : BEGIN OF T_BUKRS_USER,
BUKRS LIKE CSKS-BUKRS, " 회사
BUTXT LIKE T001-BUTXT, " 회사명
TOTAL_CNT TYPE I, " 발급 계정 수
LOCKED_CNT TYPE I, " 잠긴 계정 수
OPEN_CNT TYPE I, " 열린 계정 수
END OF T_BUKRS_USER.
DATA : GT_BUKRS_USER TYPE TABLE OF T_BUKRS_USER.
DATA : GS_BUKRS_USER LIKE LINE OF GT_BUKRS_USER.
" 라이센스별 현황
TYPES : BEGIN OF T_LIC_USER,
LIC_TYPE LIKE USR06-LIC_TYPE, " 라이센스
LIC_TYPE_NM LIKE TUTYP-UTYPTEXT, " 라이센스 내역
TOTAL_CNT TYPE I, " 발급 계정 수
LOCKED_CNT TYPE I, " 잠긴 계정 수
OPEN_CNT TYPE I, " 열린 계정 수
END OF T_LIC_USER.
DATA : GT_LIC_USER TYPE TABLE OF T_LIC_USER.
DATA : GS_LIC_USER LIKE LINE OF GT_LIC_USER.
" 리포트 프로그램에서 SELECTION SCREEN은 프로그래머가 직접 정의하지 않아도
" 자동으로 스크린을 생성하고 FLOW LOGIC을 구현하도록 도와준다.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE TEXT-001.
SELECTION-SCREEN BEGIN OF LINE.
" PARAMETERS는 사용자가 값을 입력하도록 INPUT 필드를 정의한다.
" 통계 종류 라디오 버튼
PARAMETERS : P_RADI_1 RADIOBUTTON GROUP RADI USER-COMMAND UCOM1 DEFAULT 'X'. " 파라미터 선언
SELECTION-SCREEN COMMENT (15) FOR FIELD P_RADI_1. " PARAMETERS와 SELECT-OPTIONS의 내역을 나타내기 위한 selection text
PARAMETERS : P_RADI_2 RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT (15) FOR FIELD P_RADI_2.
PARAMETERS : P_RADI_3 RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT (15) FOR FIELD P_RADI_3.
PARAMETERS : P_RADI_4 RADIOBUTTON GROUP RADI.
SELECTION-SCREEN COMMENT (15) FOR FIELD P_RADI_4.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLOCK1.
SELECTION-SCREEN BEGIN OF BLOCK BLOCK2 WITH FRAME TITLE TEXT-002. " 선택 블럭의 제목을 적기 위한 텍스트 심볼 선언
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT (12) FOR FIELD S_TRDAT MODIF ID ID1. " MODIF ID를 부여하여 조회 조건을 그룹화 할 수 있다.
" SELECT-OPTIONS는 2개의 INPUT 필드를 통해 다양한 조건 값을 입력받을 수 있다.
" RANGE변수와 같은 구조(인터널 테이블)를 가지고 있다.
SELECT-OPTIONS : S_TRDAT FOR GS_INDI_USER-TRDAT MODIF ID ID1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK BLOCK2.
" 이벤트 중 프로그램을 실행했을 때 가장 먼저 수행되는 이벤트
" SELECTION-SCREEN이 조회되기 전에 작동하므로 변수에 초기값을 지정할 때 사용
INITIALIZATION.
S_TRDAT-SIGN = 'I'.
S_TRDAT-OPTION = 'BT'.
S_TRDAT-HIGH = SY-DATUM.
S_TRDAT-LOW = SY-DATUM - 50.
APPEND S_TRDAT.
" SELECTION-SCREEN OUTPUT은 사용자가 버튼을 클릭했을 때 작동
" SCREEN은 STRUCTURE이며 LOOP AT SCREEN을 수행할 때 스크린 필드의 MODIF ID가져옴
" MODIF ID를 통해 스크린 필드 제어
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF P_RADI_1 EQ 'X' AND SCREEN-GROUP1 EQ 'ID1'.
SCREEN-ACTIVE = '1'.
MODIFY SCREEN.
ELSEIF P_RADI_1 NE 'X' AND SCREEN-GROUP1 EQ 'ID1'.
SCREEN-ACTIVE = '0'. " 그룹화한 MODIF ID로 묶인 필드들을 활성화/비활성화
MODIFY SCREEN.
ENDIF.
ENDLOOP.
2. 실행 시점까지의 Event