목표: 항공사 예약 프로그램 만들기
SBOOK 테이블
SCARR 테이블
SCUCTOM 테이블
- 출력 조건 및 필드
- 출력 필드
- SBOOK 테이블: CARRID, CONNIDE, FLDATE, BOOKID, CUSTOMID, LOCCURAM, LOCCURKEY, ORDER_DATE, CANCELLED
- SCARR 테이블: SCARRNAME
- SCUCTOM 테이블: NAME, TELEPHONE, CUSTTYPE
- 검색 조건
- 파라미터: CARRID(필수 입력/초기값: 'AA'), CONNID(필수 입력/초기값: '0017'), FLDATE(필수 입력/초기값: '20171219')
- 셀렉트 옵션: CUSTOMID
- 라디오버튼 그룹(rad1): r1(All Booking), r2(Valid Booking), r3(Cancelled Booking)
- 라디오버튼 조건절:
IF r1 = 'X'.
AND CANCELLED = ''
ELSEIF r2 = 'X'.
AND CANCELLED <> 'X'.
ELSEIF r3 = 'X'.
AND CANCELLED = 'X'.
ENDIF.
- 라디오버튼 조건절:
- ALV 필드 옵션
- 고정 열 처리(key = 'X'): CARRID, CONNID, FLDATE, BOOKID
- 하이퍼링크 처리(hotspot = 'X'): CUSTOMID
- 조인 조건
- CARRNAME: SBOOK-CARRID = SCARR-CARRID 조건으로 INNER JOIN
- NAME, TELEPHONE, CUSTTYPE: SBOOK-CUSTOMID = SCUSTOM-ID 조건으로 INNER JOIN
- 출력 필드
- 구현 코드
*&---------------------------------------------------------------------*
*& Report Z8WEEK_ASSN
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT Z8WEEK_ASSN.
TABLES: sbook.
TYPE-POOLS: slis.
*Data Declaration
*----------------
TYPES: BEGIN OF t_sbook,
carrid TYPE sbook-carrid,
carrname TYPE scarr-carrname,
connid TYPE sbook-connid,
fldate TYPE sbook-fldate,
bookid TYPE sbook-bookid,
customid TYPE sbook-customid,
name TYPE scustom-name,
telephone TYPE scustom-telephone,
custtype TYPE scustom-custtype,
loccuram TYPE sbook-loccuram,
loccurkey TYPE sbook-loccurkey,
order_date TYPE sbook-order_date,
cancelled TYPE sbook-cancelled,
END of t_sbook.
DATA: it_sbook TYPE STANDARD TABLE OF t_sbook,
wa_sbook TYPE t_sbook.
*ALV data declarations
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_repid LIKE sy-repid.
DATA : t TYPE slis_t_sp_group_alv.
*SELECT OPTION
SELECTION-SCREEN BEGIN OF BLOCK part1 WITH FRAME TITLE text-001.
PARAMETERS p_carrid TYPE sbook-carrid OBLIGATORY DEFAULT 'AA'.
PARAMETERS p_connid TYPE sbook-connid OBLIGATORY DEFAULT '0017'.
PARAMETERS p_fldate TYPE sbook-fldate OBLIGATORY DEFAULT '20171219'.
SELECTION-SCREEN END OF BLOCK part1.
SELECTION-SCREEN BEGIN OF BLOCK part2 WITH FRAME TITLE text-002.
SELECT-OPTIONS s_cid FOR sbook-customid.
PARAMETERS: r1 RADIOBUTTON GROUP rad1 DEFAULT 'X',
r2 RADIOBUTTON GROUP rad1,
r3 RADIOBUTTON GROUP rad1.
SELECTION-SCREEN END OF BLOCK part2.
START-OF-SELECTION.
PERFORM data_retrieval.
PERFORM build_fieldcatalog.
PERFORM build_layout.
PERFORM display_alv_report.
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
* Build Fieldcatalog for ALV Report
*----------------------------------------------------------------------*
FORM build_fieldcatalog.
fieldcatalog-fieldname = 'CARRID'.
fieldcatalog-seltext_m = 'Airline Code'.
fieldcatalog-col_pos = 0.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CARRNAME'.
fieldcatalog-seltext_m = 'Airline name'.
fieldcatalog-col_pos = 1.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CONNIDE'.
fieldcatalog-seltext_m = 'Flight Connection Number'.
fieldcatalog-col_pos = 2.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'FLDATE'.
fieldcatalog-seltext_m = 'Flight date'.
fieldcatalog-col_pos = 3.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'BOOKID'.
fieldcatalog-seltext_m = 'Booking number'.
fieldcatalog-col_pos = 4.
fieldcatalog-key = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CUSTOMID'.
fieldcatalog-seltext_m = 'Customer Number'.
fieldcatalog-col_pos = 5.
fieldcatalog-hotspot = 'X'.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'NAME'.
fieldcatalog-seltext_m = 'Customer name'.
fieldcatalog-col_pos = 6.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'TELEPHONE'.
fieldcatalog-seltext_m = 'Telephone number of flight customer'.
fieldcatalog-col_pos = 7.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CUSTTYPE'.
fieldcatalog-seltext_m = 'Customer type'.
fieldcatalog-col_pos = 8.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'LOCCURAM'.
fieldcatalog-seltext_m = 'Price of booking in local currency of airline'.
fieldcatalog-col_pos = 9.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'LOCCURKEY'.
fieldcatalog-seltext_m = 'Local currency of airline'.
fieldcatalog-col_pos = 10.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'ORDER_DATE'.
fieldcatalog-seltext_m = 'Booking Date'.
fieldcatalog-col_pos = 11.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
fieldcatalog-fieldname = 'CANCELLED'.
fieldcatalog-seltext_m = 'Cancelation flag'.
fieldcatalog-col_pos = 12.
APPEND fieldcatalog TO fieldcatalog.
CLEAR fieldcatalog.
ENDFORM. " BUILD_FIELDCATALOG
*&---------------------------------------------------------------------*
*& Form BUILD_LAYOUT
*&---------------------------------------------------------------------*
* Build layout for ALV grid report
*----------------------------------------------------------------------*
FORM build_layout.
gd_layout-no_input = 'X'.
gd_layout-colwidth_optimize = 'X'.
gd_layout-zebra = 'X'.
* gd_layout-info_fieldname = 'LINE_COLOR'.
* gd_layout-def_status = 'A'.
ENDFORM. " BUILD_LAYOUT
*&---------------------------------------------------------------------*
*& Form DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
* Display report using ALV grid
*----------------------------------------------------------------------*
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_sbook
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " DISPLAY_ALV_REPORT
*&---------------------------------------------------------------------*
*& Form DATA_RETRIEVAL
*&---------------------------------------------------------------------*
* Retrieve data form EKPO table and populate itab it_ekko
*----------------------------------------------------------------------*
FORM data_retrieval.
DATA: ld_color(1) TYPE c,
gs_where(20).
IF r1 = 'X'.
gs_where = ''.
ELSEIF r2 = 'X'.
gs_where = `CANCELLED <> 'X'`.
ELSEIF r3 = 'X'.
gs_where = `CANCELLED = 'X'`.
ENDIF.
SELECT
sb~carrid
sc~carrname
sb~connid
sb~fldate
sb~bookid
sb~customid
cu~name
cu~telephone
cu~custtype
sb~loccuram
sb~loccurkey
sb~order_date
sb~cancelled
INTO TABLE it_sbook
FROM sbook AS sb
INNER JOIN scarr AS sc ON sb~carrid = sc~carrid
INNER JOIN scustom AS cu ON sb~customid = cu~id
WHERE sb~carrid = p_carrid AND sb~connid = p_connid AND sb~fldate = p_fldate
AND (gs_where).
ENDFORM. " DATA_RETRIEVAL
- 구현 결과
'강의 > SAP ERP' 카테고리의 다른 글
6주차 보충 자료 (0) | 2025.08.06 |
---|---|
4주차 보충 자료 (0) | 2025.08.06 |
[7주차 과제] 항공사 예약 프로그램(1) (0) | 2025.07.30 |
[6주차 과제] 검색 화면 만들기 (0) | 2025.07.30 |
[5주차 과제] 도움말 및 검색창 출력 (0) | 2025.07.30 |