메뉴 건너뛰기

SAP 한국 커뮤니티



ABAP [Selection Screen]에 대한 고찰01

문바이 2011.05.13 10:36 조회 수 : 44171 추천:1

Selection Screen 의 화면구성중 이런경우가 발생할수.

 

고객으로 부터 이런화면을 구성해 줄것을 요구 받았다.

요구조건 : 유사한 유형의 검색화면을 화면하나로 구성해 줄것.

Selection Screen의 구성방법 :

  1) 아래와 같이 Frame 을 2개로 구성한다.

  2) 첫번재 Frame1 에는 [화면명]을 List-up해준다.

  3) 사용자가 Frame1의 라디오버튼을 클릭하면 해당 검색조건이 검색조건이 Frame2에 활성화 된다.

 

화면선택

 ( ) 첫번재 메인화면  /* 라디오 버튼임 */

 ( ) 두번째 메인화면

 ( ) 세번째 메인화면

 

검색조건

   검색조건[1]

   검색조건[2]

   검색조건[3]

   검색조건[4]

 

Selection Screen의 논리적 구성 ( 2진법을 활용한 화면구성)

논리표

검색조건1

검색조건2

검색조건3

검색조건4

첫번째화면

O

O

X

X

두번째화면

O

X

O

X

세번째화면

O

X

X

O

2진수

111

100

010

001

10진수

7

4

2

1

설명 : 첫번재화면은    검색조건1,검색조건2   만 활성화 한다.

            두번재화면은   검색조건1,검색조건3    만 활성화 한다.

           세번째화면은    검색조건1,검색조건4    만 활성화 한다.

          따라서 검색조건1은 2진정보 111을 가지고있으면 되고 이것은 10진수로 7을 의미한다.

          따라서 검색조건2은 2진정보 100을 가지고있으면 되고 이것은 10진수로 4을 의미한다.

          따라서 검색조건3은 2진정보 010을 가지고있으면 되고 이것은 10진수로 2을 의미한다.

          따라서 검색조건4은 2진정보 001을 가지고있으면 되고 이것은 10진수로 1을 의미한다.

 

  

Selection Screen의 코드구성 ( 2진법을 이용한 코드처리방법)

** 화면의 구성 **

SELECTION-SCREEN BEGIN OF SCREEN 1003 AS SUBSCREEN.

  SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE text-S01.
    PARAMETERS :  ps_01 RADIOBUTTON GROUP rad2 USER-COMMAND CHECK,                  

    "이벤트 발생을 위핸 User-Command 명령을 삽입하였다
                  ps_02 RADIOBUTTON GROUP rad2 ,                                       "
                  ps_03 RADIOBUTTON GROUP rad2 .                                       "
  SELECTION-SCREEN end of BLOCK B1.


  SELECTION-SCREEN BEGIN OF BLOCK B2 WITH FRAME TITLE text-S02.

      "검색조건을 모두 나열한다. 이때 첫번째 검색조건 SS01 은 부가정보 G07를 할당받는다.

      "G : Grouping된것을 알려주기위해 서두문자로 넣었다.

      "G07 : Groping되었으며 정보는 07이다. 이 07은 앞선 논리표에서 설명하였다.

      "MODIF ID XXX : 3자리만 기억시킬수 있는 태생적 한계가 있다.

      SELECT-OPTIONS : ss1 FOR sflight-carrid NO-EXTENSION                  MODIF ID G07,
                       ss2 FOR sflight-carrid NO-EXTENSION     NO INTERVALS MODIF ID G04 ,
                       ss3 FOR sflight-carrid NO-EXTENSION                  MODIF ID G02,
                       ss4 FOR sflight-carrid NO-EXTENSION     NO INTERVALS MODIF ID G01.
  SELECTION-SCREEN end of BLOCK B2.

SELECTION-SCREEN END OF SCREEN 1003.

 

 

 

 

 

 

 

 

 

** 이번트의 처리 **

"모든 Selection-Screen Event의 호출을 마친후 이 Event가 호출된다.
  LOOP AT SCREEN.

    if screen-group1+0(1) = 'G'.   "Group인 항목만 찾는다.
      lv_i1 = screen-group1+1(2).  "10진수 정보 2자리를 가져온다.
      mdec2bin 3 lv_i1 lv_s1.      "10진정보를 2진 정보를 치환한다.

      if ( lv_s1+0(1) = '0' and ps_01 = 'X' ) or ( lv_s1+1(1) = '0' and ps_02 = 'X' ) or ( lv_s1+2(1) = '0' and ps_03 = 'X' ).
        screen-invisible = 'X'.  "조건을 화면에서 보이게 할지 사라지게 할지 결정한다.
        SCREEN-ACTIVE = '0'.
        SCREEN-INPUT  = '0'.
        MODIFY SCREEN.
      endif.

    endif.

  ENDLOOP.

 

 

Selection Screen의 장단점

장점 :

  1) 코딩라인이 줄어든다.

  2) 동일검색조건을 계속 재활용 함에 따라 DATA를 SELECT할때 접근할 Parameter/Select-Option의 수가

     한정되어 Data Select의 프로그램 코딩라인을 줄일수 있다

 

단점

  1) 개발자가 논리표를 그려서 2진수를 10진수로 변환해야 한다.

  2) 프로그램 수정시 논리표를 재 확인해 보아야 한다. (가독성이 떨어진다)

 

 

첨언

코딩을 하다보면 자판기와 같다는 생각을 많이 합니다.

입력과 결과물은 동일할수 있으나, 그 과정은 개발자 마다 다르게 구성할수 있으니까요.

지금 설명한 방법은 재 개인적인 방법으로 이렇게도 구성할수 있음을 보여주고자 했습니다.

따라서 꼭 이렇게 사용하기를  권장하는 것이 아님을 밝혀드립니다.

 

감사합니다.