ABAP 스크린(온라인) 프로그램에서 다중 선택을 구현하는 방법


ABAP 프로그램의 구문 중에 ‘SELECT-OPTIONS‘라는 구문이 있습니다.
선택 조건을 다중(Multiple Selection)으로 입력 받을 수 있는 편리한 기능을 제공하는 구문입니다.

SELECT-OPTIONS로 선언된 선택 조건 필드는 SQL문에서 ‘IN’으로 간편하게 사용할 수 있습니다.

하지만 ‘SELECT-OPTIONS‘ 구문은 ABAP의 프로그램 타입(Type) 중에 레포트(Report, List) 프로그램에서만 사용할 수 있는 구문입니다.
ABAP 프로그램 타입에 대한 설명은 ABAP 프로그램의 Type(종류)에 대한 정의와 설명 포스팅 글을 참고하시면 됩니다.

주로 관리 목적용으로 개발되는 스크린(온라인) 프로그램에는 이런 SELECT-OPTIONS와 같은 기능을 자동으로 구현해서 사용할 수가 없습니다.
프로그램 특성이 관리용이다 보니 단일 값을 사용하는 입력 데이터 필드는 화면에 배치해서 프로그램을 개발하게 됩니다.

만약 스크린 프로그램에서 SELECT-OPTIONS와 동일한 다중 선택 기능을 구현하고자 한다면 Function 모듈을 추가해서 구현할 수가 있습니다.

이번 글에서는 ABAP 스크린(온라인) 프로그램에서 다중 선택을 구현하는 방법에 대해 알아보겠습니다.

ABAP 스크린 프로그램에서 다중 선택(Multiple Selection)을 구현한 화면 예시

▼ 온라인(스크린) 프로그램에서 스크린 안에 다중 선택 버튼 아이콘을 만들고 해당 버튼을 클릭하면 다중 선택 화면이 뜨면서 다중 선택을 입력 받을 수 있도록 한 프로그램의 화면입니다.

ABAP 스크린(온라인) 프로그램에서 다중 선택을 구현하는 방법

COMPLEX_SELECTIONS_DIALOG를 활용한 다중선택 구현하기

▶ 위의 예제 화면의 다중선택 버튼을 클릭했을 때 다중 선택 화면을 띄우는 로직을 구현한 ABAP 예제 소스 입니다.

*————————————————————————————————-
*— 다중선택의 입력값을 받을 Ranges 변수를 선언합니다.
RANGES: RA_AUFNR FOR AUFK-AUFNR.
 
*————————————————————————————————-
*— 다중선택 아이콘 버튼을 클릭하면 PERFORM multi_selection 호출
 
MODULE USER_COMMAND_9000 INPUT.
  CASE SY-UCOMM.
    WHEN ‘MULTI_SELECT’.
      CLEAR SY-UCOMM.
      PERFORM multi_selection.
  ENDCASE.
  CLEAR SY-UCOMM.
ENDMODULE.                 ” USER_COMMAND_9000  INPUT
 
*————————————————————————————————-
*— 다중선택 화면을 띄우고, 입력 받은 값을 ALPHA 컨버젼 해줌(생산오더로 처리하기 위해)
FORM MULTI_SELECTION .
 
  CALL FUNCTION ‘COMPLEX_SELECTIONS_DIALOG’
    EXPORTING
      title     = ‘다중선택’
      text      = ‘TEXT’
    TABLES
      range     = RA_AUFNR
    EXCEPTIONS
      cancelled = 1.
 
  CLEAR: RA_AUFNR.
 
  IF RA_AUFNR[] IS NOT INITIAL.
    LOOP AT RA_AUFNR.
      CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
        EXPORTING
          input  = RA_AUFNR-LOW
        IMPORTING
          output = RA_AUFNR-LOW.
 
      IF RA_AUFNR-HIGH <> ”.
        CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT’
          EXPORTING
            input  = RA_AUFNR-HIGH
          IMPORTING
            output = RA_AUFNR-HIGH.
      ENDIF.
 
      MODIFY RA_AUFNR.
    ENDLOOP.
  ENDIF.
 
ENDFORM.                    ” MULTI_SELECTION
 
 
*————————————————————————————————-
*—쿼리문 사용 예
SELECT AUFNR KDAUF KDPOS MATNR PSMNG
  INTO TABLE it_list
  FROM AFKO
  WHERE AUFNR IN RA_AUFNR.
 





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기