728x90
반응형
[실행화면]
1. 초기 화면 설정
PARAMETERS : s_month TYPE char2.
월을 나타내는 파라미터를 만들어준다. 사실 PARAMETERS : S_MONTH TYPE MONTH.
로 하면 MONTH라는 구조가 이미 F4 도움말을 가지고 있기 때문에 이걸 사용하면 더 쉽지만 연습이기 때문에 직접서치헬프를 구문으로 달아본다.
DATA: BEGIN OF gs_month,
key TYPE char2,
text(10),
END OF gs_month,
gt_month LIKE TABLE OF gs_month.
월을 담아줄 구조와 인터널테이블을 선언한다.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR S_MONTH.
PERFORM f4_month.
FORM f4_month .
DO 12 TIMES.
ADD 1 TO gs_month-key.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_month-key
IMPORTING
output = gs_month-key.
APPEND gs_month TO gt_month.
ENDDO.
1월은 1자리, 12월은 2자리로 자릿수가 다르기 때문에 1자리인 월 앞에는 0을 자동으로 넣어줘 자릿수 맞춰주는 펑션을 사용한다.
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'key' "f4하고 선택했을때 선택한값 뿌려지는 변수
dynpprog = sy-repid "어떤프로그램인지
dynpnr = sy-dynnr
dynprofield = 'S_MONTH'
value_org = 'S' "단일값 선택, COMPLEX 복합선택때는 C
TABLES
value_tab = gt_month.
ENDFORM.
2. 트리 관련 데이터 선언
DATA: gt_tab TYPE TABLE OF zs1d11t_02,
gs_tab TYPE zs1d11t_02.
DATA: g_alv_tree TYPE REF TO cl_gui_alv_tree,
g_custom_container TYPE REF TO cl_gui_custom_container.
선언후 화면100을 생성해 트리를 만들어줄 컨테이너를 생성한다. 프로그램이 시작되면 CALL SCREEN 100을 만나 화면100의 흐름로직을 탄다.
3. 트리 컨테이너 생성
CHECK g_custom_container IS INITIAL.
CREATE OBJECT g_custom_container
EXPORTING
container_name = 'TREE1'.
컨테이너가 비어있을때만 생성한다.
4. 트리 컨트롤 생성
CREATE OBJECT g_alv_tree
EXPORTING
parent = g_custom_container
node_selection_mode = cl_gui_column_tree=>node_sel_mode_single
item_selection = 'X'
no_html_header = 'X'
no_toolbar = ''.
5. 트리 헤더 생성
DATA l_hierarchy_header TYPE treev_hhdr.
PERFORM build_hierarchy_header CHANGING l_hierarchy_header.
FORM build_hierarchy_header CHANGING p_header TYPE treev_hhdr.
" 헤더 구성
p_header-heading = '서울1반 생일'(300).
p_header-tooltip = '팀원정보(ALV)'(400).
p_header-width = 40.
p_header-width_pix = ' '.
ENDFORM.
5. 트리 컨트롤 화면 출력
CALL METHOD g_alv_tree->set_table_for_first_display
EXPORTING
i_structure_name = 'ZS1D11T_02'
is_hierarchy_header = l_hierarchy_header
CHANGING
it_outtab = gt_tab.
이때 outtab
에 사용하는 인터널테이블은 빈 인터널 테이블이어야한다. 그래서 select할때 이 인터널테이블을 참조하면서 데이터를 담을 인터널테이블을 이후 로컬로 따로 또 선언해준다.
6. 트리 노드 구성 ⭐⭐⭐
ALV TREE는 NODE KEY와 RELATE KEY만 잘 생각해주면 된다!!! 노드키와 관계 키만 구성을 잘하면 할줄 아는거다. 그래서 이부분이 제일 어려우면서 중요하다.
6-1. 트리 데이터 SELECT
트리에 데이터를 먼저 SELECT로 데이터를 가져와 인터널테이블에 담아준다.
PERFORM create_hierarchy.
FORM create_hierarchy .
"노드에 사용될 노드키와 관계키, 노드의 텍스트 변수
DATA: l_rkey1 TYPE lvc_nkey,
l_nkey1 TYPE lvc_nkey,
l_text1 TYPE lvc_value,
l_rkey2 TYPE lvc_nkey,
l_nkey2 TYPE lvc_nkey,
l_text2 TYPE lvc_value,
l_rkey3 TYPE lvc_nkey,
l_nkey3 TYPE lvc_nkey,
l_text3 TYPE lvc_value.
DATA: lt_tab LIKE gt_tab,
ls_tab LIKE gs_tab,
lr_mon TYPE RANGE OF month,
ls_mon LIKE LINE OF lr_mon.
SELECT * FROM zs1d11t_02
INTO TABLE lt_tab.
IF s_month IS NOT INITIAL.
ls_mon-low = s_month.
ls_mon-sign = 'I'.
ls_mon-option = 'EQ'.
APPEND ls_mon TO lr_mon. CLEAR ls_mon.
ELSE.
CLEAR: lr_mon, lr_mon[].
ENDIF.
6-2. 트리 노드 구성 🌟
l_rkey1 = ''.
l_text1 = '서울1반'.
"1레벨 노드 추가
PERFORM add_node USING l_rkey1 l_text1 l_nkey1. "ROOT 추가
DO 12 TIMES.
ADD 1 TO gs_month-key.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = gs_month-key
IMPORTING
output = gs_month-key.
APPEND gs_month TO gt_month.
ENDDO.
"1-12월 loop돌아 2레벨 노드구성
LOOP AT gt_month INTO gs_month WHERE key IN lr_mon.
l_rkey2 = l_nkey1.
CONCATENATE gs_month-key '월' INTO l_text2. "2번노드 텍스트
"2레벨 노드 추가
PERFORM add_node USING l_rkey2 l_text2 l_nkey2.
LOOP AT lt_tab INTO ls_tab.
IF ls_tab-gbdat+4(2) = gs_month-key.
l_rkey3 = l_nkey2.
l_text3 = ls_tab-gbdat+4(4). "화면에 뿌려줄때 월일만 나오게
"3레벨 노드 추가
PERFORM add_alv_node USING l_rkey3 l_text3 ls_tab l_nkey3.
ENDIF.
* ELSE.
* CONTINUE. "다음루프 수행, 조건에 해당하지 않을때 루프 건너뛰려고
ENDLOOP.
ENDLOOP.
ENDFORM.
6-4. 2번 노드 추가하는 FORM
FORM add_node USING p_rkey p_text p_nkey.
CLEAR p_nkey.
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = p_rkey
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = p_text
IMPORTING
e_new_node_key = p_nkey. "노드키 체번
ENDFORM.
이 메소드를 사용하면 노드키를 따로 지정하지 않아도 이 메소드가 노드키를 알아서 체번한다.
6-5. 3번 노드 추가하는 FORM
FORM add_alv_node USING p_rkey
p_text
p_stru LIKE gs_tab
p_nkey.
CLEAR p_nkey.
CALL METHOD g_alv_tree->add_node
EXPORTING
i_relat_node_key = p_rkey
i_relationship = cl_gui_column_tree=>relat_last_child
i_node_text = p_text
is_outtab_line = p_stru
IMPORTING
e_new_node_key = p_nkey.
ENDFORM.
7. 화면에 생성된 노드 업데이트
CALL METHOD g_alv_tree->frontend_update.
728x90
반응형
'ABAP' 카테고리의 다른 글
레포트 프로그램 생성해보기 (0) | 2023.02.20 |
---|---|
온라인 프로그램 생성해보기 (0) | 2023.02.20 |
ALV Tree (0) | 2023.02.20 |
Simple Tree 2 (0) | 2023.02.20 |
Simple Tree (0) | 2023.02.20 |
댓글