Search
✏️

5-1. 도움말 테스트 연습 3

조회화면 출력 연습

1.
조회화면 출력 연습

실습

SPFLI 테이블을 사용하여 여러 조건으로 조회 화면을 구성

*&---------------------------------------------------------------------* *& Report Z5WEEK_ASS00 *&---------------------------------------------------------------------* * *&---------------------------------------------------------------------* REPORT Z5WEEK_ASS00. TABLES: spfli. TYPE-POOLS: slis. " ALV 관련 타입 선언 *Data Declaration *---------------- * 내부 테이블에 사용할 스케줄 정보 타입 정의 TYPES: BEGIN OF t_spfli, carrid TYPE spfli-carrid, " 항공사 코드 connid TYPE spfli-connid, " 연결 번호 cityfrom TYPE spfli-cityfrom, " 출발 도시 cityto TYPE spfli-cityto, " 도착 도시 period TYPE spfli-period, " 비행 기간 END OF t_spfli. * 데이터 선언 (내부 테이블 및 작업 영역) DATA: it_spfli TYPE STANDARD TABLE OF t_spfli INITIAL SIZE 0, " 비행 정보 저장 테이블 wa_spfli TYPE t_spfli. " 작업 영역 *ALV 데이터 선언 (필드 카탈로그 및 레이아웃) DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE, " ALV 필드 카탈로그 gd_tab_group TYPE slis_t_sp_group_alv, " ALV 그룹 설정용 데이터 gd_layout TYPE slis_layout_alv, " ALV 레이아웃 구조 gd_repid LIKE sy-repid. " 프로그램 ID 저장 * 서브그룹 선언 DATA : t TYPE slis_t_sp_group_alv . *&---------------------------------------------------------------------* *& SELECT-OPTIONS // 조회화면 선언 부 *&---------------------------------------------------------------------* SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE TEXT-001. * 항공사 코드 및 연결 번호에 대한 선택 옵션 SELECT-OPTIONS s_carrid FOR spfli-carrid DEFAULT 'AA'. " 항공사 코드 기본값 'AA' SELECT-OPTIONS s_connid FOR spfli-connid. " 연결 번호 선택 옵션 SELECTION-SCREEN SKIP. * 출발 도시, 도착 도시, 비행 기간에 대한 파라미터 PARAMETERS p_cityfr TYPE spfli-cityfrom. " 출발 도시 PARAMETERS p_cityto TYPE spfli-cityto. " 도착 도시 PARAMETERS p_period AS LISTBOX VISIBLE LENGTH 50 TYPE spfli-period. " 비행 기간 (리스트 박스) SELECTION-SCREEN END OF BLOCK part1. *&---------------------------------------------------------------------* *& INITIALIZATION // 초기값 설정 *&---------------------------------------------------------------------* INITIALIZATION. " 항공사 코드 기본 값 설정 (포함, EQ 조건) s_carrid-sign = 'I'. s_carrid-option = 'EQ'. s_carrid-low = 'AA'. s_carrid-high = ''. APPEND s_carrid TO s_carrid. CLEAR s_carrid. " 항공사 코드 범위 설정 (포함, Between 조건) s_carrid-sign = 'I'. s_carrid-option = 'BT'. s_carrid-low = 'AB'. s_carrid-high = 'AZ'. APPEND s_carrid TO s_carrid. CLEAR s_carrid. " 항공사 코드 제외 설정 (Exclude, EQ 조건) s_carrid-sign = 'E'. s_carrid-option = 'EQ'. s_carrid-low = 'AB'. s_carrid-high = ''. APPEND s_carrid TO s_carrid. CLEAR s_carrid. " 항공사 코드 제외 범위 설정 (Exclude, Between 조건) s_carrid-sign = 'E'. s_carrid-option = 'BT'. s_carrid-low = 'AC'. s_carrid-high = 'AF'. APPEND s_carrid TO s_carrid. CLEAR s_carrid. *&---------------------------------------------------------------------* *& AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_period *& 리스트 박스 커스터마이징 (비행 기간에 대한 값 설정) *&---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_period. TYPE-POOLS vrm. " VRM 관련 타입 풀 사용 DATA: lt_droplist TYPE vrm_values. " 리스트 박스에 사용할 값 테이블 선언 " SPFLI 테이블에서 비행 기간(period) 값 조회 SELECT CAST( period AS CHAR ) AS key, CAST( period AS CHAR ) AS text FROM spfli INTO TABLE @lt_droplist. " 중복 제거를 위해 정렬 후 인접한 중복 값 제거 SORT lt_droplist BY key text. DELETE ADJACENT DUPLICATES FROM lt_droplist. " 리스트 박스 값 설정 CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = 'p_period' " 리스트 박스와 연결될 필드 values = lt_droplist. " 리스트 박스 값 IF sy-subrc = 0. " 필요한 오류 처리 구문 추가 가능 ENDIF. ************************************************************************ *Start-of-selection. // 메인 프로세스 시작 START-OF-SELECTION. " 데이터 조회, 필드 카탈로그 구성, 레이아웃 설정 및 ALV 출력 실행 PERFORM data_retrieval. PERFORM build_fieldcatalog. PERFORM build_layout. PERFORM display_alv_report. *&---------------------------------------------------------------------* *& Form BUILD_FIELDCATALOG *&---------------------------------------------------------------------* * ALV 출력용 필드 카탈로그 구성 *----------------------------------------------------------------------* FORM build_fieldcatalog. " 항공사 코드 필드 정의 fieldcatalog-fieldname = 'CARRID'. fieldcatalog-seltext_m = 'Airline Code'. fieldcatalog-just = 'R'. " 오른쪽 정렬 fieldcatalog-col_pos = 0. " 컬럼 위치 APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. " 연결 번호 필드 정의 fieldcatalog-fieldname = 'CONNID'. fieldcatalog-seltext_m = 'Flight Connection Number'. fieldcatalog-lzero = 'X'. " 앞의 0을 유지 fieldcatalog-just = 'R'. " 오른쪽 정렬 fieldcatalog-col_pos = 1. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. " 출발 도시 필드 정의 fieldcatalog-fieldname = 'CITYFROM'. fieldcatalog-seltext_m = 'Departure City'. fieldcatalog-just = 'R'. fieldcatalog-col_pos = 2. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. " 도착 도시 필드 정의 fieldcatalog-fieldname = 'CITYTO'. fieldcatalog-seltext_m = 'Arrival City'. fieldcatalog-just = 'R'. fieldcatalog-col_pos = 3. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. " 비행 기간 필드 정의 fieldcatalog-fieldname = 'PERIOD'. fieldcatalog-seltext_m = 'Arrival n day(s) later'. fieldcatalog-just = 'R'. fieldcatalog-col_pos = 4. APPEND fieldcatalog TO fieldcatalog. CLEAR fieldcatalog. ENDFORM. " BUILD_FIELDCATALOG *&---------------------------------------------------------------------* *& Form BUILD_LAYOUT *&---------------------------------------------------------------------* * ALV 그리드 출력 레이아웃 구성 *----------------------------------------------------------------------* FORM build_layout. gd_layout-no_input = 'X'. " 입력 비활성화 gd_layout-colwidth_optimize = 'X'. " 컬럼 폭 자동 최적화 gd_layout-zebra = 'X'. " 줄무늬 스타일 ENDFORM. " BUILD_LAYOUT *&---------------------------------------------------------------------* *& Form DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* * ALV 그리드 보고서 출력 *----------------------------------------------------------------------* FORM display_alv_report. gd_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = gd_repid is_layout = gd_layout it_fieldcat = fieldcatalog[] " 필드 카탈로그 적용 i_save = 'X' TABLES t_outtab = it_spfli " 출력할 데이터 테이블 EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. " 오류 처리 구문 추가 가능 ENDIF. ENDFORM. " DISPLAY_ALV_REPORT *&---------------------------------------------------------------------* *& Form DATA_RETRIEVAL *&---------------------------------------------------------------------* * SPFLI 테이블에서 조건에 맞는 데이터 조회 및 내부 테이블 채움 *----------------------------------------------------------------------* FORM data_retrieval. SELECT carrid connid cityfrom cityto period FROM spfli INTO CORRESPONDING FIELDS OF TABLE it_spfli WHERE carrid IN s_carrid AND connid IN s_connid AND cityfrom = p_cityfr AND cityto = p_cityto AND period = p_period. ENDFORM. " DATA_RETRIEVAL
ABAP
복사