본문 바로가기

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

인사마스터 ALV 프로젝트 ver 2 (트랜잭션 설정)

그리드에서 수정가능한 필드들을 어떻게 처리할 것인가.


방법1. 필드 카탈로그에서 수정

FORM set_fieldcatalog.


"T-CODE에 따라서 열고닫기 위해 사용하는 구문."

DATA : LT_CODE TYPE C.

IF SY-TCODE = 'ZR08_0010_D'.
  LT_CODE = ''.
ELSE.
  LT_CODE = 'X'.
ENDIF.

CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = 'STAT'.
  GS_FIELDCAT-COLTEXT   = '상태'.
  GS_FIELDCAT-KEY       = 'X'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = 'EMPNO'.
  GS_FIELDCAT-COLTEXT   = '사원번호'.
  GS_FIELDCAT-KEY       = 'X'.
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = 'NAME'.
  GS_FIELDCAT-COLTEXT   = '이름'.
  GS_FIELDCAT-EDIT      = LT_CODE. "LT_CODE가 TCODE에따라서 변화됨."
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

  CLEAR GS_FIELDCAT.
  GS_FIELDCAT-FIELDNAME = 'DEPT'.
  GS_FIELDCAT-COLTEXT   = '부서'.
  GS_FIELDCAT-REF_TABLE = 'ZT00_0010'.
  GS_FIELDCAT-EDIT      = LT_CODE. "LT_CODE가 TCODE에따라서 변화됨."
  APPEND GS_FIELDCAT TO GT_FIELDCAT.

이런식으로 기존 필드카탈로그에서 EDIT = 'X'설정을 EDIT = LT_CODE로 변화시켜서 코딩하면 알아서 EDIT을 T-CODE에 따라서 변화시켜준다.

 

FORM set_fieldcatalog.


"T-CODE에 따라서 열고닫기 위해 사용하는 구문."



DATA LT_CODE TYPE C.

IF SY-TCODE 'ZR08_0010_D'.
  LT_CODE 
''.
ELSE.
  LT_CODE 
'X'.
ENDIF.

"T-CODE'_D'라면 LT_CODE''(빈칸으로) /

"T-CODE 그렇지 않은 경우에는 'X'로 제시한다. -> 수정이 가능한게 'X'

 

CLEAR GS_FIELDCAT.
  GS_FIELDCAT
-FIELDNAME 'STAT'.
  GS_FIELDCAT
-COLTEXT   '상태'.
  
GS_FIELDCAT-KEY       'X'.
  
APPEND GS_FIELDCAT TO GT_FIELDCAT.

  
CLEAR GS_FIELDCAT.
  GS_FIELDCAT
-FIELDNAME 'EMPNO'.
  GS_FIELDCAT
-COLTEXT   '사원번호'.
  
GS_FIELDCAT-KEY       'X'.
  
APPEND GS_FIELDCAT TO GT_FIELDCAT.

  
CLEAR GS_FIELDCAT.
  GS_FIELDCAT
-FIELDNAME 'NAME'.
  GS_FIELDCAT
-COLTEXT   '이름'.
  
GS_FIELDCAT-EDIT      LT_CODE. "LT_CODETCODE에따라서 변화됨.
  
APPEND GS_FIELDCAT TO GT_FIELDCAT.

  
CLEAR GS_FIELDCAT.
  GS_FIELDCAT
-FIELDNAME 'DEPT'.
  GS_FIELDCAT
-COLTEXT   '부서'.
  
GS_FIELDCAT-REF_TABLE 'ZT00_0010'.
  GS_FIELDCAT
-EDIT      LT_CODE. "LT_CODETCODE에따라서 변화됨.
  
APPEND GS_FIELDCAT TO GT_FIELDCAT.

이런식으로 기존 필드카탈로그에서 EDIT = 'X'설정을 EDIT = LT_CODE로 변화시켜서 코딩하면 알아서 EDITT-CODE에 따라서 변화시켜준다.


방법2. PBO의 SETTING ALV에서 수정


FORM setting_alv_100 .

IF G_GRID IS INITIAL.
*인스턴스 생성
PERFORM CREATE_OBJECT.

*출력필드 생성
PERFORM SET_FIELDCATALOG.

*레이아웃 세팅
PERFORM SET_LAYOUT.

*이벤트 등록
PERFORM SET_EVENT.

*ALV 호출
PERFORM DISPLAY_ALV.

ELSE.
*G_GRID가 초기값이 아닐 경우에는 REFRESH를 해주어라"
  PERFORM REFRESH_DATA.


ENDIF.

*-------------------필드 카탈로그에서 제어될수도 있고 아래 구문처럼 수행해주어도됨----------------------------"
DATA : LV_INPUT TYPE INT4. "-> TOP에 선언해주기 또는 서브루틴 최상단에 선언해주기"

  IF SY-TCODE = 'ZR08_0010_D'.
    LV_INPUT = 0. "닫기"
  ELSE.
    LV_INPUT = 1. "열기"
  ENDIF.

  CALL METHOD G_GRID->SET_READY_FOR_INPUT
  EXPORTING
    I_READY_FOR_INPUT = LV_INPUT. "티코드에 따라서 열고닫기를 제어하는 METHOD를 실행하기.

 

FORM setting_alv_100 .

IF G_GRID IS INITIAL.
*인스턴스 생성
PERFORM CREATE_OBJECT.

*출력필드 생성
PERFORM SET_FIELDCATALOG.

*레이아웃 세팅
PERFORM SET_LAYOUT.

*이벤트 등록
PERFORM SET_EVENT.

*ALV 호출
PERFORM DISPLAY_ALV.

ELSE.
*G_GRID가 초기값이 아닐 경우에는 REFRESH를 해주어라"
  
PERFORM REFRESH_DATA.


ENDIF.

*-------------------필드 카탈로그에서 제어될수도 있고 아래 구문처럼 수행해주어도됨----------------------------"
DATA LV_INPUT TYPE INT4"-> TOP에 선언해주기 또는 서브루틴 최상단에 선언해주기"

  
IF SY-TCODE 'ZR08_0010_D'.
    LV_INPUT 
0"닫기"
  
ELSE.
    LV_INPUT 
1"열기"
  
ENDIF.

  
CALL METHOD G_GRID->SET_READY_FOR_INPUT
  
EXPORTING
    I_READY_FOR_INPUT 
LV_INPUT"티코드에 따라서 열고닫기를 제어하는 METHOD를 실행하기.


PBO 설정


<T-CODE 생성 이전 구문>

MODULE status_0100 OUTPUT.

 SET PF-STATUS '0100'. 

 SET TITLEBAR '0100'.

ENDMODULE.



<T-CODE 생성 이후 구문>

MODULE status_0100 OUTPUT.

  "만약 조회모드이면 저장버튼 보이지 않게(T-CODE : ZR08_0010_D) -> 이것은 시스템 변수에 들어있음.
  IF SY-TCODE = 'ZR08_0010_D'.
    APPEND 'SAVE' TO GT_EXCLUDE.
  ENDIF.

 SET PF-STATUS '0100' EXCLUDING GT_EXCLUDE. 

"EXCLUDING 인터널 테이블을 하면 그것이 사라짐. : TOP문에서 선언해줄것.
 SET TITLEBAR '0100'.
ENDMODULE.

<T-CODE 생성 이전 구문>

MODULE status_0100 OUTPUT.

 SET PF-STATUS '0100'

 SET TITLEBAR '0100'.

ENDMODULE.

 

<T-CODE 생성 이후 구문>

MODULE status_0100 OUTPUT.

  
"만약 조회모드이면 저장버튼 보이지 않게(T-CODE : ZR08_0010_D) -> 이것은 시스템 변수에 들어있음.
  
IF SY-TCODE 'ZR08_0010_D'.
    
APPEND 'SAVE' TO GT_EXCLUDE.
  
ENDIF.

 
SET PF-STATUS '0100' EXCLUDING GT_EXCLUDE

"EXCLUDING 인터널 테이블을 하면 그것이 사라짐. : TOP문에서 선언해줄것.
 
SET TITLEBAR '0100'.
ENDMODULE.

반응형