[ABAP] [ALV] 스크린 필드 입출력 제어 (LOOP AT SCREEN, MODIFY ID)

홍예림·2023년 11월 13일
1

SAP ABAP 코딩하기

목록 보기
5/8
post-thumbnail

🛑 개념

The name of modification group key should be a three-character variable name without quotation marks.
The MODIF ID addition always assigns key to the screen-group1 column of internal table screen.
Parameters assigned to a modification group can be processed as an entire group with the LOOP AT SCREEN and MODIFY SCREEN statements during the AT SELECTION-SCREEN OUTPUT event.

  • 제어 그룹의 이름은 반드시 3개의 문자로 표현해야 한다. 큰따옴표로 묶지 않는다.
  • MODIF ID의 제어 그룹 이름은 항상 screen-group1에 입력된다.
  • screen은 인터널테이블이다.
  • AT SELECTION-SCREEN OUTPUT 에서 동작하며, LOOP AT SCREEN 과 MODIFY SCREEN 구문을 통해서만 접근 가능하다.

인터널테이블 타입인 SCREEN

컴포넌트설명
NAME제어 대상의 이름. SO~ 또는 PA~
GROUP1MODIFY ID 가 저장된다
INPUTT/F : 0(False) → 입력 불가
ACTIVET/F : 0(False) → 필드 칸 자체가 사라진다

SE11 -> SCREEN 스트럭처를 검색하면 볼 수 있다.


AT SELECTION-SCREEN OUTPUT.

INITIALIZATION.START-OF-SELECTION. 사이에 위치


셀렉트옵션즈(SO)와 파라메터(PA)

  • Select-Options는 인터널테이블이므로 LOW, HIGH값까지 입력해야 조건이 설정된다.
  • Parameters는 매개변수이므로 변수명만 적어도 조건 설정 가능.

🛑 개별 입력 제어

screen-name

AT SELECTION-SCREEN OUTPUT.
	PERFORM modity_screen.
FORM modify_screen .

  LOOP AT screen.

    CASE screen-name.
      WHEN 'PA_BUKRS' OR 'PA_GJAH' 
            OR 'SO_BELN-HIGH' OR 'SO_BELN-LOW'. <"셀렉트옵션즈는 ITAB이므로 LOW, HIGH가 있다.>

        screen-input = '0'. <"값이 거짓이다. -> 입력 불가>

        MODIFY SCREEN.      <"해당 스크린이 변경되면 바로 modify 한다.>

    ENDCASE.

  ENDLOOP.

ENDFORM.

🛑 그룹 입력 제어

screen-group1

  1. 셀렉션스크린 정의문에서 제어하고자 하는 필드(PA 또는 SO) 뒤에 MODIF ID 아이디를 입력한다.
    • ID는 반드시 3글자 문자열. 큰따옴표는 입력하지 않는다.
    • ID는 자동으로 screen-group1에 저장된다.
    • 커스텀 컨테이너를 이용해 그린 ALV인 경우, screen-group1은 스크린페인터(SE51 또는 Layout)에서도 설정할 수 있다.
  1. 마스터 REPORT 에서 screen-group1 = <아이디>인 경우를 찾아 CASE문으로 분기한다.
  1. LOOP AT SCRREN 실행문으로 screen-action = '0'을 입력한다.
    셀렉션스크린에서 MODIFY ID GJR 를 입력해 그룹을 지정한 필드는 숨김 처리 된다.

라디오버튼 선택에 따라 Display

특정 라디오버튼을 선택했을 때만 스크린에 보이거나 입력 활성화되도록 만들어보자.

SELECTION-SCREEN 선언

  1. 라디오버튼에 DEFAULT 'X' 지정
  2. 첫번째 라디오버튼 선언에 USER-COMMAND 3글자이름
    • 버튼 선택 시 자동으로 스크린 변경되도록 만드는 기준 키
  3. 나타나고 사라질 그룹 지정 MODIF ID 3글자이름
  4. 스크린 필드 중 OBLIGATORY 필수값 선언한 곳이 있는 경우, 프로그램 실행 시 필수값이 비어있으면 라디오버튼을 클릭하더라도 스크린 변경이 작동하지 않는다. 따라서, 반드시 VALUE 구문 또는 INITIALIZTION 블록을 통해 필드 기본값을 지정해준다.
REPORT zc525lr0001 MESSAGE-ID zc5m25.

TABLES : mara, marc.

SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE TEXT-t01.
  PARAMETERS     : pa_rb1 RADIOBUTTON GROUP rg1 DEFAULT 'X' USER-COMMAND btn,
                   pa_rb2 RADIOBUTTON GROUP rg1.
SELECTION-SCREEN END OF BLOCK bl1.


SELECTION-SCREEN BEGIN OF BLOCK bl2 WITH FRAME TITLE TEXT-t02.
  SELECT-OPTIONS : so_matn FOR  mara-matnr MODIF ID mar,
                   so_mtar FOR  mara-mtart MODIF ID mar,
                   so_matk FOR  mara-matkl MODIF ID mar,
                   so_ekgr FOR  marc-ekgrp MODIF ID mac.
  PARAMETERS     : pa_disp TYPE marc-dispo MODIF ID mac,
                   pa_dism TYPE marc-dismm MODIF ID mac.
SELECTION-SCREEN END OF BLOCK bl2.

AT SELECTION-SCREEN OUTPUT의 로직 설정

AT SELECTION-SCREEN OUTPUT.

  LOOP AT SCREEN.

    CASE 'X'. <" ------------- 첫번째(라디오버튼) CASE문 >
    
      WHEN PA_RB1.
        CASE screen-group1. <" ---- 두번째(MODIFY그룹) CASE문 >
          WHEN 'MAC'.
            screen-active = '0'.
            MODIFY SCREEN.
        ENDCASE.

      WHEN PA_RB2.
        CASE screen-group1. <" ---- 두번째(그룹) CASE문 >
          WHEN 'MAR'.
            screen-active = '0'.
            MODIFY SCREEN.
        ENDCASE.

    ENDCASE.

  ENDLOOP.
  1. LOOP AT SCREEN 으로 스크린에 루프 설정
  2. 바깥 CASE 구문
    • 라디오버튼 선택에 따른 분기 설정 (DEFAULT 'X')
  3. CASE 구문
    • 그룹 선택에 따른 분기 설정 (MODIF ID)
  4. 제어 옵션 입력
    • screen-input = '0' : 입력 불가
    • screen-active = '0' : 숨기기
    • 개별 제어, 그룹제어 시 모두 적용 가능함.
  5. MODIFY SCREEN. :스크린에 적용

🛑 참고 자료

profile
SYNC 3기 5반 2023.07 - 2023.12

0개의 댓글