*&
*& Report ZYOUKIN
*&
*&
*&
REPORT ZYOUKIN.
TYPES:
TY_YOUKIN TYPE ZYOUKIN,
TY_T_YOUKIN TYPE STANDARD TABLE OF TY_YOUKIN,
TY_GINKOU TYPE ZGINKOU,
TY_T_GINKOU TYPE STANDARD TABLE OF TY_GINKOU.
DATA:
GT_YOUKIN TYPE TY_T_YOUKIN,
GT_GINKOU TYPE TY_T_GINKOU.
*&
*& 選択画面
*&
* チェックイン情報
SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-003.
PARAMETERS:
P_ID TYPE ZYOUKIN-ID , "IDカード
P_NAME TYPE ZYOUKIN-NAME , "名前
P_PHONE TYPE ZYOUKIN-PHONE, "電話番号
P_NUMB TYPE ZYOUKIN-NUMB . "部屋番号
SELECTION-SCREEN END OF BLOCK BLK1.
* 入金
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_BUT1 RADIOBUTTON GROUP G1
USER-COMMAND UCOM1 DEFAULT 'X'.
SELECTION-SCREEN COMMENT 3(8) TEXT-001 FOR FIELD P_BUT1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK BLK2 WITH FRAME.
PARAMETERS P_MONEY TYPE ZYOUKIN-MONEY. "入金金額
SELECTION-SCREEN END OF BLOCK BLK2.
* 返金
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS P_BUT2 RADIOBUTTON GROUP G1.
SELECTION-SCREEN COMMENT 3(8) TEXT-002 FOR FIELD P_BUT2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK BLK3 WITH FRAME.
PARAMETERS P_BUT3 RADIOBUTTON GROUP G2 "全額返金
USER-COMMAND UCOM2 DEFAULT 'X'.
PARAMETERS P_BUT4 RADIOBUTTON GROUP G2. "非全額返金
PARAMETERS P_MON_K TYPE ZYOUKIN-MONEY_K. "引落金額
SELECTION-SCREEN END OF BLOCK BLK3.
*&
*& 画面制御
*&
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-NAME = 'P_ID' "IDカード
OR SCREEN-NAME = 'P_NAME' "名前
OR SCREEN-NAME = 'P_PHONE' "電話番号
OR SCREEN-NAME = 'P_NUMB'. "部屋番号
SCREEN-REQUIRED = 2. "必須入力
MODIFY SCREEN.
ENDIF.
* 返金の場合
IF P_BUT2 = 'X'.
IF SCREEN-NAME = 'P_ID' "IDカード
OR SCREEN-NAME = 'P_NAME' "名前
OR SCREEN-NAME = 'P_PHONE'. "電話番号
SCREEN-INPUT = 0. "入力禁止
SCREEN-REQUIRED = 0. "必須入力
MODIFY SCREEN.
ENDIF.
ENDIF.
* 全額返金の場合
IF P_BUT3 = 'X'.
IF SCREEN-NAME = 'P_MON_K'. "引落金額
SCREEN-INPUT = 0. "入力禁止
MODIFY SCREEN.
ENDIF.
ENDIF.
* 入金の場合
IF P_BUT1 = 'X'.
IF SCREEN-NAME = 'P_MONEY'. "入金金額
SCREEN-REQUIRED = 2. "必須入力
MODIFY SCREEN.
ENDIF.
IF SCREEN-NAME = 'P_BUT3' "全額返金
OR SCREEN-NAME = 'P_BUT4'. "非全額返金
SCREEN-INPUT = 0. "入力禁止
MODIFY SCREEN.
ENDIF.
* 返金の場合
ELSE.
IF SCREEN-NAME = 'P_MONEY'. "入金金額
SCREEN-INPUT = 0. "入力禁止
MODIFY SCREEN.
ENDIF.
* 非全額返金の場合
IF P_BUT4 = 'X'.
IF SCREEN-NAME = 'P_MON_K'. "引落金額
SCREEN-REQUIRED = 2. "必須入力
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
*&
*& 画面チェック
*&
AT SELECTION-SCREEN.
IF P_ID = SPACE
OR P_NAME = SPACE
OR P_PHONE = SPACE
OR P_NUMB = SPACE.
MESSAGE TEXT-004 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE SCREEN.
ENDIF.
IF P_BUT1 <> SPACE
AND P_ID <> SPACE
AND P_NAME <> SPACE
AND P_PHONE <> SPACE
AND P_NUMB <> SPACE
AND P_MONEY = SPACE.
MESSAGE TEXT-005 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE SCREEN.
ENDIF.
IF P_BUT2 <> SPACE
AND P_BUT4 <> SPACE
AND P_MON_K = SPACE.
MESSAGE TEXT-006 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE SCREEN.
ENDIF.
*&
*& 主処理
*&
START-OF-SELECTION.
PERFORM F_MAIN.
*&
*& Form F_MAIN
*&
*& 主処理
*&
FORM F_MAIN .
* PERFORM F_DATA_SELECT.
* PERFORM F_DATA_EDIT.
DATA:
LS_YOUKIN TYPE TY_YOUKIN,
LS_GINKOU TYPE TY_GINKOU,
L_FLAG TYPE CHAR1.
* 入金の場合
IF P_BUT1 = 'X'.
* 銀行情報の取得
SELECT *
FROM ZGINKOU
WHERE ID = @P_ID
AND NAME = @P_NAME
AND PHONE = @P_PHONE
INTO TABLE @GT_GINKOU[].
SORT GT_GINKOU[] BY RYUSUI DESCENDING.
READ TABLE GT_GINKOU[] INTO LS_GINKOU WITH KEY ID = P_ID.
IF LS_GINKOU-MONEY < P_MONEY.
* 銀行カードには残高が足りないです。
MESSAGE TEXT-007 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ELSE.
LS_GINKOU-RYUSUI = LS_GINKOU-RYUSUI + 1.
LS_GINKOU-MONEY = LS_GINKOU-MONEY - P_MONEY.
LS_GINKOU-FLAG = '-'.
LS_GINKOU-MONEY_L = P_MONEY.
INSERT ZGINKOU FROM LS_GINKOU.
IF SY-SUBRC = 0.
ELSE.
ROLLBACK WORK.
* 銀行情報を更新することが失敗しました。
MESSAGE TEXT-008 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
LS_YOUKIN-ID = P_ID.
LS_YOUKIN-NAME = P_NAME.
LS_YOUKIN-PHONE = P_PHONE.
LS_YOUKIN-NUMB = P_NUMB.
LS_YOUKIN-DATE_IN = SY-DATUM.
LS_YOUKIN-DATE_OUT = SPACE.
LS_YOUKIN-MONEY = P_MONEY.
LS_YOUKIN-MONEY_K = 0.
LS_YOUKIN-WAERS = LS_GINKOU-WAERS.
LS_YOUKIN-CARD = LS_GINKOU-CARD.
LS_YOUKIN-FLAG_IN = 'X'.
LS_YOUKIN-FLAG_OUT = SPACE.
INSERT ZYOUKIN FROM LS_YOUKIN.
IF SY-SUBRC = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
* チェックイン情報を登録することが失敗しました。
MESSAGE TEXT-009 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
MESSAGE TEXT-012 TYPE 'S'.
* 返金の場合
ELSE.
* チェックイン情報の取得
SELECT *
FROM ZYOUKIN
WHERE ID = @P_ID
AND NAME = @P_NAME
AND PHONE = @P_PHONE
AND NUMB = @P_NUMB
INTO TABLE @GT_YOUKIN[].
* チェックイン情報が存在する場合
IF SY-SUBRC = 0.
SORT GT_YOUKIN[] BY DATE_IN DESCENDING.
READ TABLE GT_YOUKIN[] INTO LS_YOUKIN WITH KEY ID = P_ID.
IF LS_YOUKIN-DATE_OUT IS INITIAL.
L_FLAG = SPACE.
ENDIF.
* チェックイン情報が存在しない場合
ELSE.
L_FLAG = 'X'.
ENDIF.
* 銀行情報の取得
SELECT *
FROM ZGINKOU
WHERE ID = @P_ID
AND NAME = @P_NAME
AND PHONE = @P_PHONE
INTO TABLE @GT_GINKOU[].
SORT GT_GINKOU[] BY RYUSUI DESCENDING.
READ TABLE GT_GINKOU[] INTO LS_GINKOU WITH KEY ID = P_ID.
LS_GINKOU-RYUSUI = LS_GINKOU-RYUSUI + 1.
LS_GINKOU-FLAG = '+'.
IF P_BUT3 = 'X'.
LS_GINKOU-MONEY_L = LS_YOUKIN-MONEY.
ELSE.
LS_GINKOU-MONEY_L = LS_YOUKIN-MONEY - P_MON_K.
ENDIF.
LS_GINKOU-MONEY = LS_GINKOU-MONEY + LS_GINKOU-MONEY_L.
INSERT ZGINKOU FROM LS_GINKOU.
IF SY-SUBRC = 0.
ELSE.
ROLLBACK WORK.
* 銀行情報を更新することが失敗しました。
MESSAGE TEXT-008 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
IF L_FLAG = SPACE.
LS_YOUKIN-ID = P_ID.
LS_YOUKIN-NAME = P_NAME.
LS_YOUKIN-PHONE = P_PHONE.
LS_YOUKIN-NUMB = P_NUMB.
LS_YOUKIN-DATE_IN = LS_YOUKIN-DATE_IN.
LS_YOUKIN-DATE_OUT = SY-DATUM.
LS_YOUKIN-MONEY = LS_YOUKIN-MONEY.
IF P_BUT3 = 'X'.
LS_YOUKIN-MONEY_K = LS_YOUKIN-MONEY.
ELSE.
LS_YOUKIN-MONEY_K = LS_YOUKIN-MONEY - P_MON_K.
ENDIF.
LS_YOUKIN-WAERS = LS_GINKOU-WAERS.
LS_YOUKIN-CARD = LS_GINKOU-CARD.
* LS_YOUKIN-FLAG_IN = 'X'.
LS_YOUKIN-FLAG_OUT = 'X'.
UPDATE ZYOUKIN FROM LS_YOUKIN.
IF SY-SUBRC = 0.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
* チェックイン情報を更新することが失敗しました。
MESSAGE TEXT-009 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ELSE.
* チェックイン情報は存在しません。
MESSAGE TEXT-011 TYPE 'S' DISPLAY LIKE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
MESSAGE TEXT-013 TYPE 'S'.
ENDIF.
ENDFORM.