본문 바로가기
ABAP

Module-pool 6 (Subscreen, table control)

by clode 2023. 2. 14.
728x90
반응형

[실행화면]

처음엔 검색조건버튼이 나오지 않는다.

검색을 누르면 테이블 컨트롤에 해당 데이터가 나온다.

왼쪽버튼을 누르면 조회조건 탭이 나오지 않는다


[프로그램 로직]

<TOP>

PROGRAM sapmz11_13 MESSAGE-ID ZM11.

DATA: ok_code TYPE sy-ucomm.

DATA: gt_ekko TYPE TABLE OF ekko,
          gs_ekko TYPE ekko,
          gt_ekpo TYPE TABLE OF ekpo,
          gs_ekpo TYPE ekpo,
          number(4), "서브스크린 번호 저장용 변수
          g_but(4), "버튼 클릭 구분을 위한 변수
          g_ebeln type ekko-ebeln, "구매문서 번호(입력받은 값 저장)
          g_ebelp type ekpo-ebelp, "구매문서 품목
          g_txz01 type ekpo-txz01. "내역


CONTROLS ts1 TYPE TABSTRIP.
CONTROLS cont1 TYPE TABLEVIEW USING SCREEN 0100.

이제 메세지도 만들어진거 말고 내꺼 만들어서 해주자..


<화면 100>

왼쪽버튼은 OFF 오른쪽버튼은 ON으로 이름을 지정해주었다. ON버튼은 비가시로 첫화면에 안보이게 해주고 왼쪽버튼을 눌렀을때 보이게 로직처리를 해줄거다. 데이터선언문과 동일하게 테이블컨트롤 이름은 CONT1로 지정해주고 탭스트립은 TS1으로 지정해줬다.


[흐름로직]

PROCESS BEFORE OUTPUT.
 MODULE status_0100.
 MODULE setting_screen.
    CALL SUBSCREEN sub1 INCLUDING sy-repid number.
    CALL SUBSCREEN sub2 INCLUDING sy-repid number.
 LOOP AT gt_ekpo INTO gs_ekpo WITH CONTROL cont1. 
 ENDLOOP.

PROCESS AFTER INPUT.
 MODULE exit AT EXIT-COMMAND.
   CALL SUBSCREEN sub1. "SUBSCREEN 버튼 제어
   CALL SUBSCREEN sub2.
 MODULE user_command_0100.
   LOOP AT gt_ekpo.
   ENDLOOP.

<서브화면 101>

선언해준 변수로 그려준다.


<서브화면 102>


<PBO>

MODULE status_0100 OUTPUT.
  SET PF-STATUS 'S200'.
  SET TITLEBAR 'S200'.

 "SUBSCREEN TAB 설정
  CASE ts1-activetab. "현재 활성화된 탭이 어떤거냐
     WHEN 'TAB1'.
       number = '0101'. "관련 화면 번호
     WHEN 'TAB2'.
       number = '0102'.
      WHEN OTHERS. "그외 지정안했을때, 처음엔 tab1..
       ts1-activetab = 'TAB1'.
       number = '0101'.
   ENDCASE.
ENDMODULE.


"버튼 클릭시 
MODULE setting_screen OUTPUT.
LOOP AT SCREEN.
  IF g_but = 'ON'.
    IF screen-group1 = 'G1'.
       screen-invisible = 0.
    ENDIF.
    IF screen-group1 = 'G2'.
       screen-invisible = 1.
    ENDIF.

    ELSEIF g_but = 'OFF'.
    IF screen-group1 = 'G1'.
       screen-invisible = 1.
    ENDIF.
    IF screen-group1 = 'G2'.
       screen-invisible = 0.
    ENDIF.
  ENDIF.

   MODIFY SCREEN.
 ENDLOOP.
ENDMODULE.

<PAI>

MODULE exit INPUT.
   CASE ok_code.
    WHEN 'EXIT' OR 'CANC'.
      LEAVE PROGRAM.
   ENDCASE.
ENDMODULE.



MODULE user_command_0100 INPUT.
  DATA: l_txz01(42).

  CASE ok_code.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.

    "탭
    WHEN 'TAB1'.
      ts1-activetab = 'TAB1'.
      number = '0101'.
    WHEN 'TAB2'.
      ts1-activetab = 'TAB2'.
      number = '0102'.

    "버튼
    WHEN 'ON'.
      g_but = 'ON'.
    WHEN 'OFF'.
      g_but = 'OFF'.

    "서브스크린101의 검색버튼 눌렀을 때
     WHEN 'DIS'.
    SELECT * FROM ekko AS a INNER JOIN ekpo AS b
      ON a~ebeln = b~ebeln
    INTO CORRESPONDING FIELDS OF TABLE gt_ekpo
    WHERE a~ebeln = g_ebeln
      AND b~ebelp = g_ebelp.

    "서브스크린102의 검색버튼 눌렀을 때
     WHEN 'DIS2'.
      CONCATENATE '%' g_txz01 '%' INTO l_txz01.
      SELECT * FROM ekko AS a INNER JOIN ekpo AS b
          ON a~ebeln = b~ebeln
        INTO CORRESPONDING FIELDS OF TABLE gt_ekpo
       WHERE b~txz01 LIKE l_txz01.
   ENDCASE.

    if sy-subrc = 0.
    message s000 with '성공하였습니다.'.
    else.
    message s000 with '실패하였습니다.'.
    endif.
ENDMODULE.
728x90
반응형

'ABAP' 카테고리의 다른 글

Tabstrip  (0) 2023.02.14
Table control  (0) 2023.02.14
Module-pool 5 (변경/생성)  (0) 2023.02.14
Module-pool 4 (Radio button)  (0) 2023.02.14
Module-pool 3 (Domain text)  (0) 2023.02.14

댓글