Search
📺

ABAP Module Pool 영화 예매 시스템 구현

작성일
2025.02.22
버전
1.0

1. 개요

Module Pool 방식을 활용하여 고객이 영화 상영시간을 조회하고, 예매하고, 결제내역을 확인할 수 있는 통합 영화 예매 시스템을 구현했다.
프로그램명: SAPMZD25_SOL
구현 방식: Module Pool (Dynpro) + ALV Grid (Custom Container)
사용 테이블
YTD25_CUSTOMER (고객 정보)
YTD25_MOVIE (영화 정보)
YTD25_THEATER (극장 정보)
YTD25_SHOWTIME (상영시간)
YTD25_BOOKING (예매 정보)
YTD25_PAYMENT (결제 내역)

2. 전체 UI 흐름 및 구성

고객 정보 조회 영역

고객 ID, 이름 입력 시 자동 조회
가입일, 이메일, 전화번호 표시
이름만 입력해도 조회 가능
없는 고객이면 오류 메시지 출력

영화 선택 영역

영화 ID로 검색
제목, 장르, 감독, 런닝타임, 개봉일 정보 표시
장르는 도메인 텍스트로 변환하여 보여줌

하단 탭: 상영시간 / 예매내역 / 결제내역

탭 선택 시 화면 전환 없이 Subscreen 방식으로 동작
상영시간 탭에서 예매 가능
예매 완료 시 하단 예매내역 및 결제내역 자동 갱신

3. 주요 기능 설명

3.1 상영시간 조회 (ALV Grid)

고객이 영화 선택 시, 해당 영화의 미래 상영정보를 조회하여 ALV Grid로 출력
상영정보는 극장 정보와 조인하여 극장명, 지역명, 총 좌석 수를 함께 출력
SELECT s~showtime_id s~movie_id s~theater_id s~show_date s~show_time t~theater_nm t~location t~total_seats INTO CORRESPONDING FIELDS OF TABLE gt_showtime FROM ytd25_showtime AS s INNER JOIN ytd25_theater AS t ON s~theater_id = t~theater_id WHERE s~movie_id = gs_movie-movie_id AND s~show_date >= sy-datum.
ABAP
복사
지역명(LOCATION_TXT)은 도메인 텍스트로 변환 처리
CALL FUNCTION 'STF4_GET_DOMAIN_VALUE_TEXT'
ABAP
복사
출력 시 Zebra 패턴, 컬럼 자동 최적화, 단일 선택 모드 설정
커스터마이징 필드카탈로그 설정 포함

3.2 예매 기능 (Toolbar Button: "예매")

버튼 처리 과정 요약

1.
ALV Toolbar에 "예매" 버튼을 추가
2.
유저가 상영시간 선택 → 예매 버튼 클릭 → save_booking 폼 호출
3.
내부 로직으로 예매 + 결제 정보 INSERT 처리

예매 처리 로직

예매 시 상영시간에 따라 가격 자동 지정
시간대
가격
06:00~10:59
8,000원
11:00~15:59
12,000원
그 외
15,000원
IF ls_showtime-show_time BETWEEN '06:00:00' AND '10:59:59'. lv_price = 8000. ELSEIF ...
ABAP
복사
BOOKING ID / PAYMENT ID는 최대값 기반 수동 증가 처리
각각 ytd25_booking, ytd25_payment에 INSERT 수행
SELECT MAX( book_id ) INTO lv_booking_id FROM ytd25_booking. lv_booking_id = lv_booking_id + 1.
ABAP
복사
예매일, 변경자, 변경시간은 SY-DATUM, SY-UNAME, SY-UZEIT 사용
예매 실패 시 MESSAGE로 사용자에게 알림

3.3 예매내역 / 결제내역 자동 조회

예매내역 탭에서는 고객 ID 기준으로 BOOKING 테이블에서 조회
결제내역은 BOOKING ID 기준으로 PAYMENT 테이블 조인
각각 Module GET_BOOKING, GET_PAYMENT에서 처리됨
SELECT SINGLE * INTO gs_booking FROM ytd25_booking WHERE cust_id = ytd25_customer-cust_id.
ABAP
복사
SELECT SINGLE * INTO gs_payment FROM ytd25_payment WHERE book_id = gs_booking-book_id.
ABAP
복사

4. 특징

Subscreen 방식의 탭 구현TABSTRIP을 활용해 화면 분할 처리
ALV Grid Custom Container → 상영시간을 동적으로 표현
도메인 값 변환STF4_GET_DOMAIN_VALUE_TEXT로 처리
직접 INSERT 기반 예매 처리NUMBER_GET_NEXT는 주석 처리하고 MAX 값 사용
레이아웃 설정필드카탈로그 구성 분리하여 모듈화
클래스 방식 이벤트 핸들러 구현 → Toolbar / User Command 처리

소스