728x90
반응형
초기화면
1. 초기화면 생성
TABLES: vbap.
SELECT-OPTIONS p_vbeln FOR vbak-vbeln.
VBELN
는 판매문서 번호
ALV 출력화면
2. 데이터 SELECT
데이터를 담아줄 구조와 인터널테이블을 먼저 만들어준다.
DATA: gs_tab TYPE vbak,
gt_tab LIKE TABLE OF gs_tab.
실행했을때 ALV를 뿌려주고 그 ALV에 데이터가 담겨있어야하기 때문에 프로그램의 START-OF SELECTION
에서 데이터를 가져온다.
SELECT * FROM vbak
INTO CORRESPONDING FIELDS OF TABLE gt_tab
WHERE vbeln IN p_vbeln.
3. ALV 출력할 화면 100 생성
ALV를 뿌려줄 화면을 하나 생성한다. 레이아웃에는 ALV가 들어갈 컨테이너를 그려준다. HD_CON
데이터를 가져온뒤 ALV를 뿌려줄거기 때문에 SELECT문 뒤에서 화면 100을 불러온다.
CALL SCREEN 100.
4. ALV 관련 데이터 선언
DATA: g_alv TYPE REF TO cl_gui_alv_grid,
g_custom_con TYPE REF TO cl_gui_custom_container,
DATA: gs_fieldcat TYPE lvc_s_fcat,
gt_fieldcat TYPE lvc_t_fcat, "필드 카탈로그
gs_layo TYPE lvc_s_layo, "레이아웃 옵션
gs_sort TYPE lvc_s_sort, "정렬
gt_sort TYPE lvc_t_sort,
5. 오브젝트 생성
CHECK g_custom_con IS INITIAL.
"화면 100에 생성한 컨테이너 참조해 오브젝트 생성
CREATE OBJECT g_custom_con
EXPORTING
container_name = 'HD_CON'.
"ALV_CON위에서 ALV 오브젝트 생성
CREATE OBJECT g_alv
EXPORTING
i_parent = g_custom_con.
6. 필드 카탈로그 구성
핫스팟 이벤트를 일으킬판매문서
필드에 핫스팟을 사용한다는 구문을 넣어준다.
gs_fieldcat-fieldname = 'VBELN'.
gs_fieldcat-coltext = '판매문서'. "필드헤더 텍스트
gs_fieldcat-just = 'C'. "가운데정렬, L는 왼쪽정렬, R는 오른쪽정렬
gs_fieldcat-key = 'X'. "키값 고정
gs_fieldcat-hotspot = 'X'. "핫스팟
APPEND gs_fieldcat TO gt_fieldcat. CLEAR: gs_fieldcat.
gs_fieldcat-fieldname = 'NETWR'.
gs_fieldcat-coltext = '정가'.
gs_fieldcat-just = 'C'.
* gs_fieldcat-currency = 'KRW'. "통화필드 하드코딩
gs_fieldcat-cfieldname = 'WAERK'. "참조한 통화단위에 대한 필드이름, 통화필드 참조해서 출력
APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.
gs_fieldcat-fieldname = 'WAERK'.
gs_fieldcat-coltext = '통화'.
gs_fieldcat-just = 'L'.
APPEND gs_fieldcat TO gt_fieldcat. CLEAR gs_fieldcat.
7. 판매문서 필드 정렬
gs_sort-spos = 1. "정렬할 열 순서
gs_sort-fieldname = 'VBELN'.
gs_sort-down = 'X'. "내림차순
APPEND gs_sort TO gt_sort.
CLEAR gs_sort.
8. 레이아웃
gs_layo-zebra = 'X'.
gs_layo-smalltitle = 'X'.
gs_layo-cwidth_opt = 'X'. "너비 최적화
gs_layo-no_merging = 'X'. "셀병합 불가능
9. ALV 출력
필드 카탈로그 구성, 정렬, 레이아웃 로직은 가독성을 위해 FORM문으로 빼주었는데 ALV를 출력하기 전에 PERFORM해주어야 한다.
PERFORM make_fieldcat. "필드카탈로그 구성
PERFORM sort. "정렬
PERFORM layo. "레이아웃
CALL METHOD g_alv->set_table_for_first_display "인스턴스명
EXPORTING
is_layout = gs_layo
CHANGING
it_outtab = gt_tab
it_fieldcatalog = gt_fieldcat
it_sort = gt_sort
ALV 팝업 (Hotspot)
10. 핫스팟ALV 화면200 생성
핫스팟ALV를 뿌려줄 화면을 생성한다. 레이아웃에는 ALV가 들어갈 컨테이너를 그려준다. HD_CON2
11. 핫스팟ALV 관련 데이터 선언
DATA: gs_tab2 TYPE vbap,
gt_tab2 TYPE TABLE OF vbap.
DATA: g_alv2 TYPE REF TO cl_gui_alv_grid,
g_custom_con2 TYPE REF TO cl_gui_custom_container.
DATA: gs_fieldcat2 TYPE lvc_s_fcat,
gt_fieldcat2 TYPE lvc_t_fcat.
12. 이벤트 생성
CLASS lcl_event DEFINITION.
PUBLIC SECTION. "다른프로그램에서 접근가능
METHODS : handler_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING e_row_id e_column_id es_row_no.
ENDCLASS.
CLASS lcl_event IMPLEMENTATION.
METHOD handler_hotspot_click.
PERFORM hotspot_click USING e_row_id e_column_id.
ENDMETHOD.
ENDCLASS.
DATA : g_application TYPE REF TO lcl_event.
13. 핫스팟 구문
FORM hotspot_click USING p_row_id p_column_id.
DATA: l_col(40).
FIELD-SYMBOLS <fs>.
READ TABLE gt_tab INTO gs_tab INDEX p_row_id.
CHECK sy-subrc = 0.
CONCATENATE 'GS_TAB-' p_column_id INTO l_col.
ASSIGN (l_col) TO <fs>.
CHECK NOT <fs> IS INITIAL.
CASE p_column_id.
WHEN 'MATNR'.
SET PARAMETER ID 'MAT' FIELD gs_tab-matnr. "다른프로그램으로 값 넘겨줄 필드, GET은 받을 프로그램의 필드
CALL TRANSACTION 'ZMARA_11_2'AND SKIP FIRST SCREEN.
ENDCASE.
FREE MEMORY ID 'MAT'.
ENDFORM.
14. 오브젝트 생성
IF g_custom_con2 IS INITIAL.
CREATE OBJECT g_custom_con2
EXPORTING
container_name = 'HD_CON2'.
CREATE OBJECT g_alv2
EXPORTING
i_parent = g_custom_con2.
ENDIF.
15. 핸들러 등록
화면100의 ALV에서 이 이벤트가 발생하기 때문에 화면100의 ALV를 출력하기 전에 핸들러를 등록하는 구문을 넣어준다.
CREATE OBJECT g_application.
SET HANDLER g_application->handler_hotspot_click FOR g_alv.
16. 이벤트 발생할 필드에 옵션 추가
화면100의 판매문서
를 클릭했을때 이벤트가 발생하므로 필드카탈로그를 구성하는 판매문서 필드에 HOTSPOT 옵션 기능을 추가한다.
gs_fieldcat-fieldname = 'VBELN'.
gs_fieldcat-coltext = '판매문서'.
✔ gs_fieldcat-hotspot = 'X'.
APPEND gs_fieldcat TO gt_fieldcat. CLEAR: gs_fieldcat.
17. ALV 출력
오브젝트 생성하는 IF문 안에 ALV출력 구문을 넣어준다. 클릭했을때마다 해당하는 데이터를 가져와야하기 때문에 REFRESH구문을 넣어준다.
CALL METHOD g_alv2->set_table_for_first_display "인스턴스명
EXPORTING
i_structure_name = 'VBAP'
CHANGING
it_outtab = gt_tab2
ELSE.
CALL METHOD g_alv2->refresh_table_display.
CALL METHOD cl_gui_cfw=>flush.
[실행 화면]
판매문서를 더블클릭하면 판매문서에 대한 정보가 다른창으로 나온다.
아이콘이나 체크박스, 줄색깔, 열색깔은 이후 다룰 alv 레이아웃 제어에서 해볼거다.
728x90
반응형
'ABAP' 카테고리의 다른 글
ALV 5 (SPLIT) (0) | 2023.02.16 |
---|---|
ALV 4 (Layout) (0) | 2023.02.16 |
ALV 2 (이벤트) (0) | 2023.02.16 |
ALV (0) | 2023.02.16 |
엑셀 업로드 + BDC (0) | 2023.02.16 |
댓글