728x90
반응형
ALV 출력하기 위해서는 2가지의 작업을 해야한다.
- 인터널테이블 선언
- 데이터의 구조(필드 카탈로그)
*필드 카탈로그 : ALV GRID
ALV의 구성
SCREEN > CONTAINER > ALV GRID
ALV 인스턴스를 화면에 보이게 하기 위해선 컨테이너 컨트롤이 필요하다.
데이터 선언
TABLES: ZVBAK10.
DATA : OK_CODE(10).
DATA : GT_HD LIKE ZVBAK10 OCCURS 0 WITH HEADER LINE,
GT_IT LIKE ZVBAP10 OCCURS 0 WITH HEADER LINE.
DATA : G_ALV TYPE REF TO CL_GUI_ALV_GRID,
G_CUSTOM_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
초기화면 구성
SELECT-OPTIONS : S_VBELN FOR ZVBAK10-VBELN.
- 실행하면 Sales order값을 From ~ to 범위로 입력 할수 있는 선택 창 실행
parameters 가 1개의 값만 지정 할수 있는 반면,
Select-options는 범위 값을 다양하게 입력 할 수 있다.
- 선언 방법 : For + table이름 -field 이름
- 이때 Table이름은 tables로 선언되어 있어야 한다.
ALV를 사용하기 위한 data class
DATA : G_HD_ALV TYPE REF TO CL_GUI_ALV_GRID,
G_HD_CUSTOM_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
* 오더 항목을 위한 데이터 선언
* Header line을 더블 클릭하면 해당 오더의 항목이 조회 되도록 한다.
DATA : G_IT_ALV TYPE REF TO CL_GUI_ALV_GRID,
G_IT_CUSTOM_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
* alv에서 event를 처리 하기 위해 선언하는 local class
CLASS LCL_ALV_EVENT_RECEIVER DEFINITION.
PUBLIC SECTION.
METHODS:
EVT_DOUBLE_CLICK FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
IMPORTING E_ROW "행
E_COLUMN "열
ES_ROW_NO. "넘버의 값 가져온다
ENDCLASS.
- 더블클릭하면 아래 서브루틴이 실행된다. 더블클릭 이벤트
- E_ROW : 더블클릭된 열 번호
- E_COLUMN : 더블클릭된 컬럼 이름
CLASS LCL_ALV_EVENT_RECEIVER IMPLEMENTATION.
METHOD EVT_DOUBLE_CLICK. "더블클릭이벤트 감지를 하면
PERFORM SHOW_ITEM_DISPLAY USING E_ROW "더블클릭된 열 번호
E_COLUMN "더블클릭된 컬럼 이름
ES_ROW_NO.. "펑션 실행
ENDMETHOD.
ENDCLASS.
- local class로 선언된 내용을 처리하기 위해 object를 선언한다.
DATA : G_APPLICATION TYPE REF TO LCL_ALV_EVENT_RECEIVER.
실행 화면 로직
START-OF-SELECTION.
SELECT * INTO TABLE GT_HD
FROM ZVBAK10 WHERE VBELN IN S_VBELN.
IF SY-SUBRC = 0.
CALL SCREEN 100. "alv를 출력할 화면 실행
ELSE.
WRITE : / 'No data'.
ENDIF.
- 만약 데이터가 없다면 No data를 화면에 뿌려준다.
메뉴버튼과 타이틀 바 지정
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS 'S100'.
SET TITLEBAR '100'.
ENDMODULE. "STATUS_0100 OUTPUT
ALV
- PBO Module이 실행될때 마다 실행되면 안되므로 Check 로직으로 한번만 실행되도록 제어한다.
- 초기화는 한번만 진행, CHECK를 해서 초기값이면 실행 초기값이 아니면 실행하지말아라
MODULE SET_ALV OUTPUT. CHECK G_HD_CUSTOM_CON IS INITIAL.
- 화면 100에 생성한 HD_CON을 참조하여 오브젝트 생성
CREATE OBJECT G_HD_CUSTOM_CON EXPORTING CONTAINER_NAME = 'HD_CON'. "레이아웃에서 그렸던 컨테이너 이름
- ALV_CON위에 ALV 오브젝트를 생성한다.
CREATE OBJECT G_HD_ALV EXPORTING I_PARENT = G_HD_CUSTOM_CON.
- 더블클릭 이벤트 생성
CREATE OBJECT G_APPLICATION. SET HANDLER G_APPLICATION->EVT_DOUBLE_CLICK FOR G_HD_ALV.
- ALV 출력
``` - 반드시 ALV한번은 실행되게 하는로직, 한번실행되면 또 실행 X
CALL METHOD G_HD_ALV->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING I_STRUCTURE_NAME = 'ZVBAK10' "ALV구조가 ZVBAK10 구조로 실행된다 CHANGING IT_OUTTAB = GT_HD[]. "ALV OBJECT에 출력할 데이터를 넘길때는 헤더가 아닌 RECORD를 넘겨야한다 ENDMODULE. "SET_ALV OUTPUT
더블클릭 이벤트
- 더블클릭 이벤트 발생한 위치의 ROW 행의 값을 가져와 해당 행에 위치한 데이터 불러온다.
FORM SHOW_ITEM_DISPLAY USING P_E_ROW P_E_COLUMN P_ES_ROW_NO.
READ TABLE GT_HD INDEX P_E_ROW.
* 데이터가 존재하면 0, 체크가 0이아니라면 해당 프로그램 종료
CHECK SY-SUBRC = 0.
SELECT * INTO TABLE GT_IT FROM ZVBAP10
WHERE VBELN = GT_HD-VBELN.
CHECK SY-SUBRC = 0.
SORT GT_IT BY POSNR.."SELECT에서도 가능
CALL SCREEN 200 STARTING AT 1 1 ENDING AT 100 15.
ENDFORM. " SHOW_ITEM_DISPLAY
더블클릭 화면 200 ALV
- Header 부분을 만든 내용과 달리 check 문을 만들지 않고
IF문으로 ALV object만 생성 하는 부분을 한번만 실행되게 헸다 - G_IT_ALV->SET_TABLE_FOR_FIRST_DISPLAY 는 더블 클릭하여 선택된 Item내용이 변경되며 출력되기 때문에 더블클릭할때마다 실행되어야 한다
MODULE SET_IT_ALV OUTPUT.
IF G_IT_CUSTOM_CON IS INITIAL.
- 화면 200에 생성한 IT_CON을 참조하여 오브젝트 생성
CREATE OBJECT G_IT_CUSTOM_CON EXPORTING CONTAINER_NAME = 'IT_CON'.
- ALV_CON위에 ALV 오브젝트를 생성한다.
CREATE OBJECT G_IT_ALV EXPORTING I_PARENT = G_IT_CUSTOM_CON. ENDIF.
- ALV 출력
CALL METHOD G_IT_ALV->SET_TABLE_FOR_FIRST_DISPLAY EXPORTING I_STRUCTURE_NAME = 'ZVBAP10' CHANGING IT_OUTTAB = GT_IT[].
ENDMODULE. " SET_IT_ALV OUTPUT
### POPUP 창 종료
* 표준화면에서 ‘LEAVE TO SCREEN 0’를 사용하면 프로그램이 종료된다.
* 그러나 위의 경우처럼 POPUP SCREEN에서 사용하면 프로그램이 종료되지 않고 POPUP SCREEN만 종료되어 다시 MAIN 화면으로 돌아온다.
MODULE USER_COMMAND_0200 INPUT.
CASE OK_CODE.
WHEN 'OK'.
LEAVE TO SCREEN 0.
ENDCASE.
ENDMODULE. " USER_COMMAND_0200 INPUT
```
728x90
반응형
'ABAP' 카테고리의 다른 글
[Smartform] Preview, PDF 기능 (0) | 2023.03.02 |
---|---|
Text editor object (0) | 2023.03.02 |
[SD] Sales Order Update/Delete BAPI (0) | 2023.03.01 |
Pop-up Message (POPUP_TO_CONFIRM) (0) | 2023.03.01 |
[Smartform] (0) | 2023.03.01 |
댓글