[ABAP] simple tree + alv grid 2

펭귄안녕·2025년 5월 16일

abap

목록 보기
12/14

1. 스크린 숨기기/보여주기

초기화면

근태나 연도 아무튼 노드를 클릭할 시 alv가 나옴

  • 검색창
    AT SELECTION-SCREEN OUTPUT.
//* 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.
  • 탭+alv
    MODULE SET_TAPSTRIPS_600 OUTPUT.
  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.

2. 추가 검색창 팝업

    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.
  • 620 유저커맨더
  CASE SAVE_OK.
    WHEN 'ENTER'.

    CLEAR: GT_ZPDCTTST4_600, GT_ZPDCTTST4_600[].
    PERFORM GET_ZPDCTTST4_600_ALV.

  ENDCASE.

퍼폼 600 alv로 퉁쳤다

3. 트리 > 탭 > 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
  • 모드 변경하면 조회 <-> 수정 이렇게 되는 거 하고 있는데
    왜... 바로 화면 새로고침이 안 될까?

0개의 댓글