본문 바로가기

ABAP 프로그래밍 개념/User Interaction

2.2 SELECT-OPTIONS

PARAMETERS 문은 사용자가 단일 값을 입력할 수 있는 하나의 입력 필드를 정의합니다. 예를 들어, 사용자가 청구 문서에 대한 정보를 확인하는 보고서를 실행하고자 할 때 PARAMETERS를 사용하면 Parameter 필드가 단일 문서 번호만 입력할 수 있기 때문에 한 번에 하나의 문서에 대한 세부 정보를 확인할 수 있습니다.

하지만 사용자가 한 번에 여러 문서의 세부 정보를 확인하려는 경우 SELECT-OPTIONS가 사용됩니다. SELECT-OPTIONS는 Data Object에 대한 내부의 Range Table(범위 테이블)을 정의합니다.

SELECT-OPTIONS가 작동하는 방식을 이해하려면 먼저 Range Table(범위 테이블)을 이해해야하며, 그 다음에는 여러 선택 창에 대해 설명하겠습니다.


RANGE Table


Range Table(범위 테이블)은 "IN 관계 연산자"를 사용하여 분석할 수 있는 특수한 구조를 갖는 내부 테이블입니다. 예를 들어, 특정 자재 번호가 지정된 자재 범위 내에 있는지 확인하려면 다음 문장을 사용할 수 있습니다

IF v_matnr IN lr_matnr.
ENDIF.

이 예제에서, v_matnr에는 확인하려는 자재 번호가 포함되어 있으며, lr_matnr은 자재 범위를 포함하는 특수한 Range Table(범위 테이블)입니다. IN 연산자는 값을 범위 내에 포함되어 있는지 자동으로 검색합니다.

Range Table(범위 테이블)은 프로그램에서 TYPE RANGE OF라는 Addition을 DATA 키워드에 사용하여 정의할 수 있습니다.

DATA lr_carrid TYPE RANGE OF s_carr_id.

Range Table(범위 테이블)은 SIGN, OPTION, LOW 및 HIGH 네 개의 필드(열)를 갖습니다. 아래 사진은 디버깅 모드에서 표시된 Range Table(범위 테이블)의 구성 요소를 보여줍니다. 각 필드의 유형(Type)과 길이(Lngth)에 유의하세요.

네 개의 필드(Range Table의 구성요소)에 대한 설명은 다음과 같습니다.

■ SIGN : SIGN 필드는 TYPE c이고 LENGTH 1입니다. SIGN 필드의 내용은 각 행에 대해 LOW 및 HIGH 필드의 값을 포함할 것인지 아니면 제외할 것인지를 결정합니다. 유효한 값은 포함을 나타내는 I와 제외를 나타내는 E입니다.

■ OPTION : OPTION 필드는 TYPE c이고 LENGTH 2이며, 행의 선택 조건에 대한 관계 연산자를 포함합니다. 유효한 연산자는 HIGH 열이 초기값인 경우, EQ(동일), NE(동일하지 않음), GE(이상), GT(초과), LE(이하), LT(미만), CP(패턴 일치) 및 NP(패턴 일치하지 않음)입니다. HIGH 열이 초기값이 아닌 경우, BT(사이), NB(사이가 아님)가 유효합니다. 옵션 CP와 NP의 경우, 열 LOW 및 HIGH의 데이터 유형은 c여야합니다.

■ LOW : LOW 필드의 길이와 유형은 Range Table(범위 테이블)을 선언할 때 참조 대상으로 제시된 데이터 유형에 따라 결정됩니다. 위 예시에서 Range Table(범위 테이블)은 s_carr_id를 참조하여 정의되므로 TYPE c이고 LENGTH 3입니다. 이 열은 비교 값 또는 하한 구간 제한을 위해 지정됩니다.

■ HIGH : LOW 필드와 유사하게, HIGH 필드의 길이와 유형은 Range Table(범위 테이블)을 선언할 때 참조 대상으로 제시된 데이터 유형에 따라 결정됩니다. 이 열은 상한 구간 제한을 위해 지정됩니다.

IN 연산자와 함께 사용할 때 시스템은 자동으로 Range Table(범위 테이블)의 각 행을 분석합니다. IN 연산자는 값의 복잡한 비교가 필요한 경우 매우 유용합니다.

SELECT-OPTIONS를 사용할 때 시스템은 프로그램 내부에 헤더 라인이 있는 Range Table(범위 테이블)을 정의하고 현재 선택 화면에 하한(low)과 상한(high) 두 개의 입력 필드를 생성합니다. SELECT-OPTIONS 필드를 정의하려면, SELECT-OPTIONS 키워드 뒤에 FOR 추가 구문을 사용합니다. 시스템은 FOR 다음에 데이터 객체를 기대합니다. 예를 들어:

DATA v_carrid TYPE s_carr_id.
SELECT-OPTIONS s_carrid FOR v_carrid.

이 코드는 프로그램에서 LOW 및 HIGH 필드의 유형이 v_carrid인 헤더 라인을 가진 Range Table(범위 테이블)을 생성합니다. 또한 다중 선택 버튼(Multiple Selection Button) ③이 있는 선택 화면에서 두 개의 입력 필드 s_carrid-low① 및 s_carrid-high ②를 생성합니다. 


Multiple Selection Window


SELECT-OPTIONS를 사용하면 사용자가 값 범위를 제공하거나 복잡한 선택 기준을 입력하기 위해 다중 선택 버튼(Multiple Selection Button)을 사용할 수 있습니다. 아래 그림은 다중 선택 버튼(Multiple Selection Button)을 클릭할 때 나타나는 Dialog Box를 보여줍니다. Dialog Box에는 다음이 포함됩니다.

① Selection Tabs
② Values Eetered Here
③ Operator Selection

Multiple Selection Dialog Box는 4개의 탭을 포함하고 있으며 각 탭을 통해 조회에 범위값에 차이를 줄 수 있습니다.

■ Select Single Values
'Select Single Values' 탭은 사용자가 선택 대상이 되는 여러 단일 값을 입력할 수 있도록 합니다. 사용자는 아래 그림에 나와 있는 'Maintain Selection Options' 버튼을 사용하여 각 값에 대한 옵션도 선택할 수 있습니다.

이 탭에서 입력한 항목들은 SIGN이 I(포함)인 Range Table(범위 테이블)에 저장됩니다. OPTION은 선택된 연산자 (기본값은 EQ)이며, LOW 필드에는 입력된 값이 들어갑니다. 이 행의 HIGH 필드는 비어있을 것입니다.

아래 그림은 Select Single Values 탭에서 입력한 해당 항목들의 디버그 모드에서 보여지는 SELECT-OPTIONS Range Table(범위 테이블)의 행들을 보여줍니다. 여기에서 다음과 같은 내용을 확인할 수 있습니다.

① Selection Screen에서 만들어진 항목(Entries)
② 범위 테이블에 저장된 항목들은 다음과 같습니다. IN 연산자와 함께 사용될 때, 시스템은 SIGN, OPTION, LOW 및 HIGH 필드의 값에 따라 자동으로 행을 처리합니다.

 Select Ranges
이 탭은 검색 대상에 포함되어야 하는 범위 내 값들을 입력할 수 있도록 합니다. 연산자를 사용하여 값이 범위 내에 있는지 범위 밖에 있는지를 지정할 수 있습니다. 아래 그림은 범위에 대한 사용 가능한 옵션을 보여줍니다.

범위 테이블의 SIGN 필드는 I로 설정되며, 옵션에 따라 OPTIONS는 BT 또는 NB로 설정됩니다. LOW 필드는 낮은 값으로 채워지고, HIGH 필드는 화면에 입력한 높은 값으로 채워집니다.

화면에 입력한 높은 값은 낮은 값보다 커야 하며, 그렇지 않으면 화면에서 오류 메시지가 발생합니다. 아래 그림은 화면에 입력된 값에 대한 해당 Range Table(범위 테이블) 항목을 보여줍니다

① Selection Screen에서 만들어진 항목(Entries)
Range Table(범위 테이블)에 저장된 항목들

Exclude Single Values
이 탭의 항목들은 'Select Single Values' 탭과 유사하며, 유일한 차이점은 이 탭에서 유지되는 값들은 선택에서 제외된다는 것입니다. 다시 말해, 행의 SIGN 필드는 E (제외)로 채워질 것입니다.

Exclude Ranges
이 탭의 항목들은 'Select Ranges' 탭과 유사하며, 유일한 차이점은 이 탭에서 유지되는 값들은 선택에서 제외된다는 것입니다.

'Select Values' (단일 값 및 범위 모두)의 행의 SIGN 필드는 I로 채워지고, 'Exclude Values' (단일 값 및 범위 모두)의 행의 SIGN 필드는 E로 채워집니다.

사용자가 대금 청구 문서를 처리하는 보고서를 실행하고자 하는 요구 사항을 고려한다고 할 때, 사용자의 선택 기준은 다음과 같습니다.
1. 문서 번호 100, 122, 140을 선택합니다.
2. 200에서 400까지와 500에서 600까지의 모든 문서를 선택합니다.
3. 이전 범위에서 문서 번호 222와 320을 제외합니다.
4. 문서 번호 520에서 540까지를 제외합니다

예시 선택 기준에 따라 사용자는 아래 사진에 나와있는 것과 같이 여러 선택 창의 다른 탭에 항목들을 입력할 것입니다.

위 그림의 있는 항목들은 아래 그림에 나와있는 것과 같이 Range Table(범위 테이블)로 전송될 것입니다. 'Select' 및 'Exclude' 탭에서 입력한 항목들의 SIGN 필드에 있는 값을 주목해서 봐야합니다.

다중 선택 창의 'Select' 탭에서 입력한 항목들의 경우, SIGN 필드는 I로 채워지며, 다중 선택 창의 'Exclude' 탭에서 입력한 항목들의 경우 SIGN 필드는 E로 채워집니다. LOW 및 HIGH 필드의 값은 도메인에 연결된 변환 루틴의 도움으로 자동으로 선행 0으로 채워집니다.

아래 예시 코드에는 SELECT-OPTIONS를 사용하여 이러한 다중 문서를 처리하는 방법이 나와 있습니다. 이 코드에서는 선택 기준에서 제공된 문서의 기본 헤더 데이터를 처리합니다. 코드는 SELECT-OPTIONS의 선언을 강조하고, 사용자 선택 기준에 따라 레코드를 필터링하기 위해 SELECT 쿼리에서 IN 연산자를 사용하여 사용됩니다.

TYPES : BEGIN OF ty_vbrk,
         VBELN TYPE VBELN_VF, " Document Number"
         FKART TYPE FKART, " Billing Type"
         FKDAT TYPE FKDAT, " Billing Date"
         NETWR TYPE NETWR, " Net Value"
         KUNRG TYPE KUNRG, " Payer"
        END OF ty_vbrk.
        
DATA : it_vbrk TYPE STANDARD TABLE OF ty_vbrk,
       wa_vbrk TYPE ty_vbrk.
       
SELECT-OPTIONS s_vbeln FOR wa_vbrk-vbeln.

SELECT VBELN
       FKART
       FKDAT
       NETWR
       KUNRG
 FROM VBRK
 INTO TABLE it_vbrk
 WHERE vbeln IN s_vbeln.
 
LOOP AT it_vbrk INTO wa_vbrk.
 WRITE:/ 'DOCUMENT NUMBER:' , wa_vbrk-vbeln,
       / 'Billing Type :' , wa_vbrk-fkart.
       / 'PAYER:' , wa_vbrk-kunrg,
       / 'BILLING DATE :', wa_vbrk-fkdat,
       / 'NET VALUE :' , wa_vbrk-netwr LEFT-JUSTIFIED.
ENDLOOP.
반응형

'ABAP 프로그래밍 개념 > User Interaction' 카테고리의 다른 글

3. Messages  (0) 2023.05.11
2.4 Selection Texts  (0) 2023.05.11
2.3 SELECTION-SCREEN  (0) 2023.05.10
2.1 PARAMETERS  (0) 2023.05.09
1.User Interaction  (0) 2023.05.07