작성일 | 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 처리