본문 바로가기

SAP ABAP 개발 및 설명/ALV GRID

ALV GRID 템플릿만들기

ALG GRID 템플릿만들기

 

순서 1. 스크린 생성 및 스크린 설정하기.

순서 2. 데이터 선언.

순서 3. PBO 및 ALV 세팅하기.

순서 4. PAI 설정.

순서 5. 필요 데이터 가지고 오기.


스크린 생성 및 스크린 설정하기.


프로그램 생성 후 먼저 스크린 100번을 생성을 해주고. 스크린 페인터를 통해 Custom Control을 그려준다.

Screen 100 Screen Painter 설정

Custom Control의 이름은 사용자 임의로 정해줄수있으며 나는 'CON1'이라고 정해주었다. 이후 우측 하단에 Attribute에 Vertical과 Horizontal에 체크를 해주고 저장, Active해주면 된다.

 

Screen 100 Attribute 설정

화면의 최대 크기인 200 / 255로 설정해주기

 

Screen 100 Element List 설정

Element list에서 TOP문에서 선언할 SY-UCOMM을 가지는 OK_CODE를 입력해준다.


메인 프로그램 세팅


REPORT Z_ALV_TEMPLETE .

INCLUDE Z_ALV_TEMPLETE_TOP.
INCLUDE Z_ALV_TEMPLETE_C01.
INCLUDE Z_ALV_TEMPLETE_PBO.
INCLUDE Z_ALV_TEMPLETE_PAI.
INCLUDE Z_ALV_TEMPLETE_F01.




INITIALIZATION.

AT SELECTION-SCREEN.
START-OF-SELECTION.

PERFORM GET_DATA.

END-OF-SELECTION.

call screen 100. 

Include 문을 만들어주고 반드시 순서는 TOP이 맨 첫번째로 오도록, 클래스를 관장하는 C01(지금은 사용하지 않지만)이 다음 순서로 오도록 설정해준다.

 

GET_DATA PERFORM문은 지금 입력하지않고 ALV 세팅을 다 완료한 후에 필요한 데이터를 가져오는데 사용한ㄷ.


TOP 문 세팅


DATA : BEGIN OF GS_DISP,
EBELN TYPE EKKO-EBELN,       
BUKRS TYPE EKKO-BUKRS,       
BSART TYPE EKKO-BSART,      
	   END OF GS_DISP. 

DATA : GT_DISP LIKE TABLE OF GS_DISP.

//ALV 그리드를 위한 객체참조변수 2가지 선언

DATA : CON1_REF TYPE REF TO CL_GUI_CUSTOM_CONTAINER. 
DATA : g_grid TYPE REF TO Cl_GUI_ALV_GRID.

//아이콘 기능을 위한 OK_CODE
DATA : OK_CODE TYPE SY-UCOMM.

//필드 카탈로그 선언 - 테이블과 스트럭쳐 둘다 타입을 잠조해서
DATA : gt_fieldcat TYPE lvc_t_fcat.
DATA : gs_fieldcat TYPE lvc_s_fcat.

//레이아웃 선언
DATA : gs_layout type lvc_s_layo. 

템플릿을 위해 간단하게 EKKO에있는필드 3개만 가지는 Structure과 Table을 선언해주었다.

 

이후 ALV Grid를 그리기 위해 ABAP에서 제공하는 클래스를 참조하는 두 가지 객체참조변수를 선언해준다.

1. CL_GUI_CUSTOM_CONTANER을 참조하는 CON1_REF(스크린 페인터에서 설정한 Custom Control인 'CON1'을 사용)

2. CL_GUI_ALV_GRID를 참조하는 g_grid(CON_REF를 가지고 내가만든 그리드를 보여주기 위해 사용)

 

SY-UCOMM을 가지는 OK_CODE를 선언.(Srcreen Elemtents에서 사용하며 추후 아이콘에 역할을 주기 위해서 사용)

 

필드 카탈로그에서 필요한 데이터 구조 선언

CL_CUI_ALV_GRID의 메소드 중 < set_table_for_first_display>의 파라미터를 보면 FIELDCATALOG 이 존재하는데 FIELDCATALOG의 Associated TYPE을 참조하는 테이블과 Structure선언을 해준다.

 

레이아웃 설정

필드 카탈로그와 마찬가지로 CL_CUI_ALV_GRID의 메소드 중 <set_table_for_first_display>의 파라미터를 보면 LAYOUT이 존재하는데 이를 참고하여 layout 설정을 위한 Structure을 선언해준다.


SCREEN 100 PBO/ PAI 설정


Screen 100 PBO / PAI 설정


SCREEN 100 PBO


Screen 100 PBO

1. status_100 설정 -> 스크린테 표현될 버튼(아이콘)에 대해서 설정을 하는 부분.

MODULE status_0100 OUTPUT.
 SET PF-STATUS '0100'.
 SET TITLEBAR '0100'.
ENDMODULE.

2. ALV 세팅

FORM setting_alv_100 .

IF G_GRID IS INITIAL.

//인스턴스 생성
PERFORM CREATE_OBJECT.

//필드카탈로그 생성
PERFORM SET_FIELDCATALOG.

//레이아웃 세팅
PERFORM SET_LAYOUT.


//ALV 호출
PERFORM DISPLAY_ALV.
ELSE.

//G_GRID가 초기값이 아닐 경우 REFRESH"
PERFORM REFRESH_DATA.

ENDIF.
ENDFORM. 

IF G_GRID IS INITIAL

->G_GRID IS INITIAL. 처음 ALV를 만드는 것이라면 이후 작업을 띄어라 라는 의미. 만약 ALV에서 작업이 수정된다면 6번의 REFRESH로 넘어갈 수 있도록 하기 위해서 사용.


인스턴스 생성

FORM create_object .

//CONTAINER 오브젝트 생성
//CTRL + F6 / 인스턴스  : CON1_REF / 클래스 : CL_GUI_CUSTOM_CONTAINER.

CREATE OBJECT CON1_REF
EXPORTING
CONTAINER_NAME = 'CON1'.



//G_GRID OBJECT 생성 
//CTRL + F6 / 인스턴스  : g_grid / 클래스 : Cl_GUI_ALV_GRID.

CREATE OBJECT G_GRID
EXPORTING
I_PARENT = CON1_REF.
ENDFORM. 

 

필드 카탈로그 생성

FORM set_fieldcatalog.
//I_STRUCUTRE_NAME을 쓰는 것보다는 CATALOG를 사용하는 것이 더 편할 수 있음.
//요구사항에 따라서 그때그때 다르게 사용하기


//먼저 CLEAR 해주기.
CLEAR : gs_fieldcat.
CLEAR : gT_fieldcat.


GS_FIELDCAT-FIELDNAME = 'EBELN'.
GS_FIELDCAT-COLTEXT = '구매문서넘버'.
GS_FIELDCAT-KEY = 'X'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR : gs_fieldcat.
GS_FIELDCAT-FIELDNAME = 'BUKRS'.
GS_FIELDCAT-COLTEXT = '회사코드'.
APPEND gs_fieldcat TO gt_fieldcat.

CLEAR : gs_fieldcat.
GS_FIELDCAT-FIELDNAME = 'BSART'.
GS_FIELDCAT-COLTEXT = '문서유형'.
APPEND gs_fieldcat TO gt_fieldcat.

ENDFORM.

 

레이아웃 설정

FORM set_layout .
CLEAR GS_LAYOUT.

GS_LAYOUT-ZEBRA = 'X'.
GS_LAYOUT-CWIDTH_OPT = 'A'.
GS_LAYOUT-SEL_MODE = 'D'. "LAYOUT의 셀모드 중 D의 의미 - GRID 상에서 DRAG가 가능하기 때문에 사용"

ENDFORM.

 

ALV 출력

FORM display_alv .

//CTRL + F6 / CALL_METHOD 클릭.
//인스턴스  : G_GRID / 클래스 : Cl_GUI_ALV_GRID. / METHOD : set_table_for_first_display/

CALL METHOD G_GRID->set_table_for_first_display
EXPORTING
is_layout = gs_layout 

CHANGING
it_outtab = GT_DISP
it_fieldcatalog = gt_fieldcat.

ENDFORM. 

 

REFRESH ALV 설정

FORM refresh_data.

//CTRL + F6 / CALL_METHOD 클릭.
//인스턴스  : G_GRID / 클래스 :  : Cl_GUI_ALV_GRID. / METHOD : REFRESH_TABLE_DISPLAY.

CALL METHOD G_GRID->REFRESH_TABLE_DISPLAY.

ENDFORM.

 

여기까지 진행하면 PBO 단계에서 스크린의 버튼 설정과 ALV를 출력할 세팅이 완료된다.


SCREEN 100 PAI


Screen 100 PAI

 

MODULE exit_100 INPUT.
CASE OK_CODE.
  WHEN 'BACK' OR 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
ENDCASE.
ENDMODULE.

PAI 설정에서 PBO의 STATUS에서 입력한 3가지 버튼에 대해서 어떠한 역할을 할지에 대해서 설정해주었다.

 

각각 LEAVE PROGRAM, LEAGE TO SCREEN 0와 같이 역할을 다양하게 줄 수 있지만 템플릿이므로 간단하게 LEAVE PROGRAM으로 설정해주었다.

 


데이터 가져오기


SCREEN / PBO / PAI 설정이 끝났으므로 ALV 상에서 보여줄 데이터를 가져오는 작업을 진행한다.

템플릿이므로 간단하게 데이터를 가져오는 구문을 적어주고 잘 나오는지만 확인하자.

 

메인프로그램의 get_data PERFORM문을 완성.

FORM get_data .
CLEAR GT_DISP.

SELECT MATNR ERSDA ERNAM
INTO CORRESPONDING FIELDS OF TABLE GT_DISP
FROM MARA UP TO 10 ROWS. //템플릿이므로 최대 10개 까지만 가져오겠다"

ENDFORM. 

출력


잘 나오는 것을 확인 가능!


이렇게 간단히 탬플릿을 만들어놓고 이후 기본 세팅은 이 템플릿을 이용하면 쉽다.

 

추가적인 EVENT에 관련된 선언이나 필드카탈로그의 다양한 역할등에 대해서는 추후 올릴 ALV 프로젝트에서 다루도록 하겠다.

반응형

'SAP ABAP 개발 및 설명 > ALV GRID' 카테고리의 다른 글

CL_GUI_ALV_GRID 기타 메소드  (0) 2020.08.24
ALV GRID - 기타 파라미터  (0) 2020.08.24
ALV GRID 레이아웃  (0) 2020.08.23
ALV GRID 필드 카탈로그  (0) 2020.08.23
필드 카탈로그 - lvc_s_fcat 역할정리  (0) 2020.08.22