조회화면 출력 연습
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
복사