SCREEN

SubScreen 사용방법

Subscreen 구현 방법은 3가지 절차로 이루어져있습니다.

 

1. Subscreen  생성하기

 1-1) 코딩으로 생성

 1-2) 직접 생성

2. Subscreen 출력할곳 그리기

3. Subscreen 호출하기

 

★ 참조 3개


 

 


 

1. Subscreen  생성하기

 

 1-1) 코딩으로 생성 ( Selection-Screen을 이용)

 

   SELECTION-SCREEN BEGIN OF SCREEN 1004 AS SUBSCREEN.

   SELECTION-SCREEN COMMENT 1(15)  text-t01 FOR FIELD p_matnr.  (text-t01 = '자재')    

   PARAMETER: p_matnr LIKE mara-matnr.

   SELECTION-SCREEN END OF SCREEN 1004.    


 

 1-2) 직접 생성 ( Screen생성을 한후 [SubScreen]으로 사용하는 방법.)

    

  1. SE80에서 왼쪽 Object 에서 화면 클릭 후 create 후 subscreen 체크

 

사진출처: 바른목소리

 

2. 서브스크린 레이아웃에서 변수를 생성한다.

 

 

3. TOP 부분에 화면과 동일한 이름의 변수를 선언한다.

 DATA: gv_matnr LIKE mara-matnr.

 

 ** 1004스크린과 다르게 여기서 변수를 선언하지 않으면 

    화면에서 입력한값을 변수로 받아 사용할수가 없다. 

 

 

** 1-1, 1-2 로 생성하면 아래와 같이 서브스크린이 생성된다.

사진출처: 바른목소리

 

 

2. Subscreen 출력할곳 그리기

 

메인 screen에서 subscreen 사용할곳을 레이아웃에서 그려준다.

: 서브화면 영역 클릭 ->  이름 'SUB01'

 

 

3. Subscreen 호출하기

 

 메인 스크린 PBO, PAI 에서 호출

 

  PROCESS BEFORE OUTPUT.

  MODULE init_alv.

  

  CALL SUBSCREEN sub01 INCLUDING sy-repid '1004' 또는 '0110'.

  => 서브스크린의 PBO로 넘어간다.

 

  PROCESS AFTER INPUT.

  MODULE user_command_0100.

  CALL SCREEN sub01.  => 서브스크린의 PAI로 넘어간다.

  

 

1. 화면 커서

   1번에서 1-1로 서브스크린을 생성했을 경우(SCREEN 1004)

   화면 커서가 자동으로 마지막 커서에 위치해 있다.

   왜냐하면 Selection-Screen에 parameter, select-option등을 사용해서 만든 스크린에서는

   변수간의 커서 위치를 처리해 주는 코드도 자동으로 만들어지기 때문이다.

 

   반면 1번에서 1-2로 서브스크린을 생성했을 경우(SCREEN 110) 화면 커서를 인식하지못한다.

   그래서 메인 화면(100)과 서브스크린에(100) GET. SET CURSOR 부분을 직접 추가해주어야한다.

 

  100번 화면 

  PROCESS BEFORE OUTPUT.

  MODULE set_cursor.

  MODULE init_alv.

  CALL SUBSCREEN sub01 INCLUDING sy-repid  '0110'.

 

  PROCESS AFTER INPUT.

  MODULE get_cursor.

  MODULE user_command_0100.

  CALL SCREEN sub01.  

  

 

  110번 화면 

  PROCESS BEFORE OUTPUT.

  MODULE set_cursor.

 

  PROCESS AFTER INPUT.

  MODULE get_cursor.

 

 

 MODULE set_cursor OUTPUT.

  IF gv_fname IS NOT INITIAL.

   SET CURSOR FIELD gv_fname.

  ENDIF.  

ENDMODULE.

 

 MODULE get_cursor INPUT.

  IF gv_fname IS INITIAL.

   GET CURSOR FIELD gv_fname.

  ENDIF.  

ENDMODULE.

 

==>  100,110 스크린의 PBO, PAI 흐름 순서는 직접 디버깅해보면서 확인해보길 바란다.

 

 

★2. 서브스크린 동적 호출

   한개의 서브스크린 영역에 여러개의 서브스크린을 동적으로 사용할때가 있다.

 

  DATA:  gv_dynnr TYPE sydynnr.

 

 

  IF ra01 = 'X'.

  gv_dynnr = '1004'.

  ELSE.

  gv_dynnr = '0110'.

  ENDIF.

 

  메인화면에서 서브스크린 호출하는 부분

  CALL SUBSCREEN sub01 INCLUDING sy-repid gv_dynnr.

  **gv_dynnr 이 빈값이면 덤프남.

 

 

★3서브스크린 field(p_matnr)에 대한 Validiation 처리

    PAI에서 아래에서 선택하여 Validation을 처리할수 있다.

 

     1. FIELD gv_matnr MODULE check_matnr.  

        : 빈값/동일한 값에서 엔터치더라도 무조건 check_matnr을 타게된다.

 

    2. FIELD gv_matnr MODULE check_matnr  ON REQUEST

       : 데이터가 변경됐을경우 적용된다 

         예를 들어, gv_matnr = 'aaa' 였다가 지워서 빈값으로 엔터쳤을때는 타지만

         빈값에서 또 엔터를 쳤을경우에는 타지않는다.

 

    3. FIELD gv_matnr MODULE check_matnr  ON INPUT.

       : 공백일때는 적용되지않고 값이 있는 경우에만 적용된다. (동일한 값이어도 적용)

 

 

'SCREEN' 카테고리의 다른 글

SelectionScreen 에 function key 추가  (0) 2022.01.13
Selection screen에 아이콘/글자 추가  (0) 2022.01.12
조회화면 Possible Entry, Search Help  (0) 2021.07.12