본문 바로가기

SAP ABAP 개발 및 설명/인사 마스터만들기

인사마스터 ALV 프로젝트 ver 1.2

Screen 100 PAI


Screen 100의 PAI 전문

MODULE exit_100 INPUT.

CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
ENDCASE.


CLEAR OK_CODE.
ENDMODULE.

MODULE user_command_0100 INPUT.
CASE OK_CODE.
WHEN 'HELLO'.
PERFORM CALL_INSERT_SCREEN.


WHEN 'MODIFY'.
PERFORM CALL_CHANGE_SCREEN.

WHEN 'GOODBYE'.
PERFORM CALL_RET_SCREEN.
WHEN OTHERS.
ENDCASE.
CLEAR OK_CODE.
ENDMODULE. 
MODULE exit_100 INPUT.

CASE OK_CODE.
WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM.
ENDCASE.


CLEAR OK_CODE.
ENDMODULE.


프로그램을 나가고 종료하는 이벤트 수행시킬수 있는 EXIT-COMMAND

 

[CASE문]

CASE OK_CODE.

WHEN 'BACK' OR 'EXIT' OR 'CANC'.
LEAVE PROGRAM 혹은 상황에 맞게 LEAVE TO SCREEN 0와 같은 형식으로 선언해주기.
ENDCASE.

OK_CODE를 클리어 해주어야 이후의 수행되는 이벤트에 대해서 영향을 미치지 않는다.
CLEAR OK_CODE.

MODULE user_command_0100 INPUT.
CASE OK_CODE.
WHEN 'HELLO'.
	PERFORM CALL_INSERT_SCREEN.


WHEN 'MODIFY'.
	PERFORM CALL_CHANGE_SCREEN.

WHEN 'GOODBYE'.
	PERFORM CALL_RET_SCREEN.
WHEN OTHERS.
ENDCASE.

CLEAR OK_CODE.
ENDMODULE. 

스크린 100번에서 버튼을 눌렀을 때 수행되는 이벤트를 구분지어주는 user_command_100번 부분.

PBOSTATUS_100번에서 설정한 3개의 아이콘 명을 CASE 구문을 통해서 진행한다.

 

MODULE user_command_0100 INPUT.
->PBO에서 설정한 3개의 아이콘에 대한 설정 부분에 각각의 역할을 집어 넣는 과정.

 

[CASE문]

CASE OK_CODE.
신규 데이터 INSERT 부분 
->WHEN 'HELLO'.
PERFORM CALL_INSERT_SCREEN.

기존 데이터 MODIFY 부분
->WHEN 'MODIFY'.
PERFORM CALL_CHANGE_SCREEN.

조직 구성원 퇴직 처리하는 부분
->WHEN 'GOODBYE'.
PERFORM CALL_RET_SCREEN.

 

->WHEN OTHERS.
ENDCASE.

 

"OK_CODE를 클리어 해주어야 이후의 수행되는 이벤트에 대해서 영향을 미치지 않음"
CLEAR OK_CODE.


PAI의 각 항목에 대한 PERFORM문


INSERT에 대한 PERFORM문

FORM call_insert_screen .

CLEAR GS_ITAB_0200.

GS_ITAB_0200-STATUS = GC_STATUS_DEFAULT.      "'1'".
GS_ITAB_0200-WAERS  = GC_WAERS_DEFAULT.       "'JPY'".
GS_ITAB_0200-ENTDT  = SY-DATUM.
GS_ITAB_0200-MODE   = GC_MODE_INSERT.

CALL SCREEN '0200' STARTING AT 5 5.
ENDFORM. 

신규데이터 작성하는 버튼.

 

GS_ITAB_0200을 클리어 해주기.

CLEAR GS_ITAB_0200.


GS_ITAB_0200을 눌렀을 때 STATUS에 TOP에서 지정한 CONSTANTS를 넣어주기.
->GS_ITAB_0200-STATUS = GC_STATUS_DEFAULT.      "'1'".

GS_ITAB_0200을 눌렀을 때 WAERS에 TOP에서 지정한 CONSTANTS로 통화를 넣어주기.
->GS_ITAB_0200-WAERS  = GC_WAERS_DEFAULT.       "'JPY'".

GS_ITAB_0200을 눌렀을 때 ENTDT 즉 작성일에 대해서 SY-DATUM 현재 날짜를 넣어주기.
->GS_ITAB_0200-ENTDT  = SY-DATUM.

GS_ITAB_0200을 눌렀을 때 STATUS에 TOP에서 지정한 CONSTANTS로 INSERT라는 값을 넣어주기.
->GS_ITAB_0200-MODE   = GC_MODE_INSERT.

 

200번 스크린 부르기
->CALL SCREEN '0200' STARTING AT 5 5.

 

 

MODIFY에 대한 PERFORM문

방법1.

FORM call_change_screen.

CLEAR GS_ITAB_0200.

DATA : LT_ROW TYPE LVC_T_ROID,
	   LS_ROW TYPE LVC_S_ROID.

CALL METHOD G_GRID->GET_SELECTED_ROWS
	IMPORTING 
		ET_ROW_NO     = LT_ROW.


IF LINES( LT_ROW ) = 1. 
READ TABLE LT_ROW INTO LS_ROW INDEX 1.

READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.

CLEAR GS_ITAB_0200. 

MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200.

GS_ITAB_0200-MODE  = GC_MODE_UPDATE.
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID.

CALL SCREEN 200 STARTING AT 5 5.

ELSE.
MESSAGE S003.
ENDIF. 

ENDFORM call_change_screen.

▪변경하기 위해서는 무엇을 변경할지에 대해서 인식하는 작업이 우선적으로 필요하다.

이를 위해서 GET_SELECTED_ROW라는 메소드를 사용해서 클릭한 그 줄을 가져오는 작업을 진행해야한다.

 

우선적으로 LVC_T_ROID, LVC_S_ROID를 참조하는 데이터 LT_ROW와 LS_ROW를 선언해주어야 한다.

->"GET_SELECTED_ROWS라는 메소드에서 필요한 파라미터는 ET_ROW_NO"이고 이것의 타입 속성은 LVC_T_ROID이다. 이것은 테이블 형식이므로 이를 스트럭쳐 형식으로 구성하려면 LVC_S_ROID를 선언해주어야 한다.

 

IF LINES( LT_ROW ) = 1. READ TABLE LT_ROW INTO LS_ROW INDEX 1.

▪ 이 구문은 현재 선택한 라인이 한줄이기 때문에 한줄을 선택하면 ROW는 1 / ROW-ID는 선택한 줄의 순서가 반환된다.

예를 들어 3번째 줄을 선택했다면 ROW = 1, ROW-ID는 3이 디버깅되서 나오는 것을 확인할 수 있다.

 

READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.

 LOW정보를 가지고 GT_OUTTAB에 있는 정보를 GS_OUTTAB에 옮김.

 

 

GS_ITAB에 있는 정보를 다시 200번 스크린의 데이터인 GS_ITAB_0200에서 옮김

MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200. -> "변경화면에 출력할 WA로 데이터 이관"
    

GS_ITAB_0200-MODE  = GC_MODE_UPDATE. "모드에 UPDATE에 해당하는 CONSTANTS 넣어주기"
GS_ITAB_0200
-INDEX = LS_ROW-ROW_ID. "INDEX에 ROW-ID 넣어주기"

 

CALL SCREEN 200 STARTING AT 5 5.

 

방법2.

FORM call_change_screen.
CLEAR GS_ITAB_0200.


FORM call_change_screen.
CLEAR GS_ITAB_0200.
DATA : LT_ROW TYPE LVC_T_ROID,
	   LS_ROW TYPE LVC_S_ROID.
CALL METHOD G_GRID->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO     = LT_ROW.

IF LT_ROW IS INITIAL.

    MESSAGE S003 DISPLAY LIKE 'E'.
    EXIT.
    ENDIF.
    

READ TABLE LT_ROW INTO LS_ROW INDEX 1.
READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.
CLEAR GS_ITAB_0200. 


MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200.
CALL SCREEN 200 STARTING AT 5 5.

ENDFORM call_change_screen.

▪방법2의 코드를 보면 결과적으로 방법1과 순서의 차이일 뿐 진행하는 업무에서는 크게 차이가 나지 않기 때문에

구문을 확인해보기 바란다.

 

 

RETIRE에 대한 PERFORM문

FORM call_ret_screen .
CLEAR GS_ITAB_0200.
DATA : LT_ROW TYPE LVC_T_ROID,
       LS_ROW TYPE LVC_S_ROID.
       
CALL METHOD G_GRID->GET_SELECTED_ROWS
IMPORTING
ET_ROW_NO     = LT_ROW.

IF LT_ROW IS INITIAL.
MESSAGE S004 DISPLAY LIKE 'E'.
EXIT.
ENDIF.

READ TABLE LT_ROW INTO LS_ROW INDEX 1.


READ TABLE GT_ITAB INTO GS_ITAB INDEX LS_ROW-ROW_ID.


CLEAR GS_ITAB_0200. 

MOVE-CORRESPONDING GS_ITAB TO GS_ITAB_0200.
GS_ITAB_0200-RETDT = SY-DATUM. 
GS_ITAB_0200-STATUS = GC_STATUS_RETIRE.
GS_ITAB_0200-MODE  = GC_MODE_RETIRE.
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID.

CALL SCREEN 200 STARTING AT 5 5. 

ENDFORM call_ret_screen .

▪기본적인 구조는 UPDATE PERFORM문의 방법 2와 유사하다.

 

GS_ITAB_0200-RETDT = SY-DATUM.   "퇴직일을 현재 날짜로"
GS_ITAB_0200-STATUS = GC_STATUS_RETIRE. "STATUS를 퇴직에 해당하는 CONSTANTS로"
GS_ITAB_0200-MODE  = GC_MODE_RETIRE.  " MODE에 RETIRE에 해당하는 상수로"
GS_ITAB_0200-INDEX = LS_ROW-ROW_ID. "INDEX에 ROW-ID를 입력해준다"

 

 

 

 

반응형