
초기화면

근태나 연도 아무튼 노드를 클릭할 시 alv가 나옴
//* 600번 초기화면 검색 필드 x
LOOP AT SCREEN.
IF SCREEN-GROUP1 ='T01'.
IF SY-UCOMM = '600'.
SCREEN-ACTIVE = 0. "화면표시 X
MODIFY SCREEN.
ELSE.
SCREEN-ACTIVE = 1. "화면표시 0
MODIFY SCREEN.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT SCREEN.
CASE SY-UCOMM.
WHEN '600'.
IF SCREEN-NAME = 'GV_TAB_600_1'
OR SCREEN-NAME = 'GV_TAB_600_2'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDCASE.
ENDLOOP.

WHEN 'ADDSEARCH'. " 추가 검색창
CALL SCREEN 620 STARTING AT 7 2 ENDING AT 80 20.
600화면 save_ok case에 추가해주고 620화면에 630서브스크린을 연결해준다
//** 620번 SUB SCREEN
SELECTION-SCREEN BEGIN OF SCREEN 0630 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK B5 WITH FRAME.
SELECTION-SCREEN BEGIN OF LINE.
//* 사원번호
SELECTION-SCREEN COMMENT 5(10) TEXT-001 MODIF ID T02.
SELECTION-SCREEN POSITION 18.
PARAMETERS : POP_PER TYPE ZPDCTTST4-PERNR MODIF ID T02.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
//* 근태 일자
SELECTION-SCREEN COMMENT 5(10) TEXT-002 MODIF ID T02.
SELECTION-SCREEN POSITION 15.
SELECT-OPTIONS : POP_DATE FOR ZPDCTTST4-PTO_DATE MODIF ID T02.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B5.
SELECTION-SCREEN END OF SCREEN 0630.
PROCESS BEFORE OUTPUT.
CALL SUBSCREEN SUBSCREEN_630 INCLUDING SY-REPID '0630'.
MODULE STATUS_0620.
PROCESS AFTER INPUT.
CALL SUBSCREEN SUBSCREEN_630.
MODULE USER_COMMAND_0620.
CASE SAVE_OK.
WHEN 'ENTER'.
CLEAR: GT_ZPDCTTST4_600, GT_ZPDCTTST4_600[].
PERFORM GET_ZPDCTTST4_600_ALV.
ENDCASE.
퍼폼 600 alv로 퉁쳤다
원래 트리 노드 클릭해서 커스텀 컨테이너에 alv를 띄우는 거 였는데
트리 노드 > 탭1 > 서브 스크린에 alv를 띄우는 거로 바꿨다
근데 그 서브 스크린에 커스텀 컨테이너를 연결해서 alv를 띄우.. ... 음
MODULE SET_TAPSTRIPS_600 OUTPUT.
CLEAR OK_CODE.
CASE SAVE_OK.
WHEN 'TAB_6001'.
GV_TAB = '0640'.
WHEN 'TAB_6002'.
GV_TAB = '0650'.
WHEN OTHERS.
GV_TAB = '0640'.
ENDCASE.
LOOP AT SCREEN.
CASE SY-UCOMM.
WHEN '600'.
IF SCREEN-NAME = 'GV_TAB_600_1'
OR SCREEN-NAME = 'GV_TAB_600_2'.
SCREEN-ACTIVE = '0'.
MODIFY SCREEN.
ENDIF.
ENDCASE.
ENDLOOP.
IF G_TABSTRIP_2-ACTIVETAB IS INITIAL.
G_TABSTRIP_2-ACTIVETAB = 'TAB_6001'.
ELSE.
G_TABSTRIP_2-ACTIVETAB = SAVE_OK.
ENDIF.
ENDMODULE. " SET_TAPSTRIPS_600
어쩌구저쩌구 얼렁뚱땅 어찌됐든 구현은 됐다네요
하도 이것저것 야금야금 바꿔봐서 ...

600번대만 몇 개인지
**------------------------------------------------------------------**
** Form GET_ZPDCTTST4_600
**------------------------------------------------------------------**
FORM GET_ZPDCTTST4_600_ALV.
DATA: LV_YEAR(5) TYPE C,
LV_NODE_KEY(5) TYPE C,
GS_DATA TYPE ZPDCTTST4,
LT_FILTER_DATA TYPE TABLE OF ZPDCTTST4.
RANGES LR_DATE FOR ZPDCTTST4-PTO_DATE.
DATE_RANGES LR_DATE 'I' 'BT' POP_DATE-LOW POP_DATE-HIGH.
//* 노드 키 값 가져오기
LV_NODE_KEY = GV_SELECTED_NODE_KEY+3(4).
CONCATENATE LV_NODE_KEY '%' INTO LV_YEAR.
//* IF RT_PER-LOW IS INITIAL.
IF ( RT_PER IS INITIAL AND SY-DYNNR EQ '600' )
OR ( POP_PER IS INITIAL AND SY-DYNNR EQ '620' ).
MESSAGE I000(ZMCPD) WITH '사원 번호를 입력해주세요.'.
EXIT.
ENDIF.
//* 부모노드 선택 시
IF GV_SELECTED_NODE_KEY CP 'PARENT*'.
CLEAR: GT_ZPDCTTST4_600, GT_ZPDCTTST4_600[].
//* 사번
SELECT *
FROM ZPDCTTST4
INTO TABLE GT_ZPDCTTST4_600
WHERE PERNR = RT_PER
OR PERNR = POP_PER //" 추가 검색 창
ORDER BY PTO_DATE DESCENDING.
//* 추가 검색창에서 일자 선택 시
IF POP_DATE IS NOT INITIAL AND POP_PER IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_ZPDCTTST4_600
FROM ZPDCTTST4
WHERE PTO_DATE IN LR_DATE
AND PERNR = POP_PER.
ELSEIF POP_DATE IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_ZPDCTTST4_600
FROM ZPDCTTST4
WHERE PTO_DATE IN LR_DATE.
ENDIF.
//* 노드 선택
//" 연도
ELSEIF GV_SELECTED_NODE_KEY CP 'P2_20*'.
CLEAR: GT_ZPDCTTST4_600, GT_ZPDCTTST4_600[].
SELECT *
FROM ZPDCTTST4
INTO TABLE GT_ZPDCTTST4_600
WHERE ( PERNR = RT_PER
OR PERNR = POP_PER )
AND PTO_DATE LIKE LV_YEAR
ORDER BY PTO_DATE DESCENDING.
//* 추가 검색창에서 일자 선택 시
IF POP_DATE IS NOT INITIAL AND POP_PER IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_ZPDCTTST4_600
FROM ZPDCTTST4
WHERE PTO_DATE IN LR_DATE
AND PERNR = POP_PER
AND PTO_DATE LIKE LV_YEAR
ORDER BY PTO_DATE DESCENDING.
ELSEIF POP_DATE IS NOT INITIAL.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE GT_ZPDCTTST4_600
FROM ZPDCTTST4
WHERE PTO_DATE IN LR_DATE
AND PTO_DATE LIKE LV_YEAR
ORDER BY PTO_DATE DESCENDING.
ENDIF.
//" 근태구분
ELSE.
PERFORM GET_ZPDCTTST4_600_GUBUN USING GV_SELECTED_NODE_KEY.
//* 추가 검색창에서 일자 선택 시
IF POP_DATE IS NOT INITIAL AND POP_PER IS NOT INITIAL.
LOOP AT GT_ZPDCTTST4_600 INTO GS_DATA.
IF ( GS_DATA-PERNR = RT_PER OR GS_DATA-PERNR = POP_PER )
AND GS_DATA-PTO_DATE IN LR_DATE.
APPEND GS_DATA TO LT_FILTER_DATA.
ENDIF.
ENDLOOP.
ELSEIF POP_DATE IS NOT INITIAL.
LOOP AT GT_ZPDCTTST4_600 INTO GS_DATA.
IF GS_DATA-PTO_DATE IN LR_DATE.
APPEND GS_DATA TO LT_FILTER_DATA.
ENDIF.
ENDLOOP.
ELSE.
LOOP AT GT_ZPDCTTST4_600 INTO GS_DATA.
IF GS_DATA-PERNR = RT_PER
OR GS_DATA-PERNR = POP_PER.
APPEND GS_DATA TO LT_FILTER_DATA.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR GT_ZPDCTTST4_600.
GT_ZPDCTTST4_600[] = LT_FILTER_DATA[].
ENDIF.
IF SY-SUBRC <> 0.
MESSAGE I000(ZMCPD) WITH '해당하는 근태 정보가 없습니다.'.
RETURN.
ENDIF.
CALL METHOD G_ALV->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_OUTTAB = GT_ZPDCTTST4_600[]
IT_FIELDCATALOG = GT_FIELDCAT6[].
ENDFORM. " GET_ZPDCTTST4_600_ALV