ERP/SAP/R/3

select-option 과 range 변수의 차이

파란실버라이트 2011. 4. 5. 18:57
RANGES : 개발자가 프로그램 내에서 직접 핸들링 할 수 있다.
SELECT-OPTIONS : 시스템이 관리하는 변수


select-option으로 선언된 변수하고 ranges 로 선언된 변수의 구조를 디버깅해서 봐봐.. 둘다 구조가 똑같애.

이것도 일종의 인터널 테이블이라고 생각하면 되지

select-option s_vbeln for vbak-vebln. 요놈하고

ranges s_vbeln like vbak-vbeln. 이렇게 한거하고 변수 구조로만 보면 똑같다는 거야... 단지 두개의 용도가 다른거지..

select-option 실행할때 입력받는 화면에 나타나는 변수고

range로 선언하면 그냥 프로그램안에서 변수처럼 사용한다는 차이가 있어.

range는 말그대로 범위라는 의미라서 특정 범위 from ~ to 값으로 데이터 추출하고 할때 쓰는거고

그런 범위 개념으로 사용할수 있는 변수를 range 변수라고 말하는거야....

니가 짠 펑션에서는 sales order 번호 한개만 입력받아서 그 정보를 리턴하는건데.....
너처럼 select-option으로 선언된 변수로 하게되면

사용자가 s/o번호를 1 에서 10까지 입력할때 어떻게 처리할거지? 상식적으로 생각해봐....
이럴땐 1에서 10까지의 s/o 번호를 루프로 한번씩 돌려서 펑션을 콜해야 하는거지......

그럴려면 펑션 콜하기전에 입력한 s/o번호를 itab에 담아서 그놈을 루프돌리며 s/o 번호 하나씩 넣어가며 콜하면 되는거야....

help 찾아보면 이렇게 나오는데 요렇게 인터널 테이블 선언한거랑

DATA: BEGIN OF rtab OCCURS 0,
sign TYPE c LENGTH 1,
option TYPE c LENGTH 2,
low LIKE dobj,
high LIKE dobj,
END OF rtab.

ranges s_vbeln like vbak-vbeln. 이렇게 ranges로 선언한거랑 똑같은 구조야.....

s_vbeln 이 변수 이름이라고 하면 아래와같은 구조의 인터널 테이블로 변수가 생성되는거고

사용자가 1 ~ 10 으로 범위값을 입력하면 이 변수에 값이 이렇게 들어가.....

sign option low high

----------------------------

'I' 'BT' '1' '10'

sign은 그냥 'I' 가 무조건 들어간다고 생각하면 되고.....

option 의 BT는 Better Then의 약자야 1부터 10까지... 라는 의미고

low는 화면의 필드에서 앞에 입력한 값이고 high는 뒤에 입력한 값

사용자가 앞의 필드에 특정 번호 하나만 입력하고 실행하면 이렇게 들어가.. EQ = Equal 같은..이라는 뜻

sign option low high

----------------------------

'I' 'EQ' '1'

개념을 알라나 몰라...

아무튼 그 펑션으로 수행하려면 이렇게 짜면 되지.....

빨간색이 내가 추가한 로직이야......

DATA : BEGIN OF ITAB OCCURS 0.
INCLUDE STRUCTURE ZSDSVBAK_VBAP.
DATA : END OF ITAB.

DATA: BEGIN OF IT_SO OCCURS 0,

VBELN LIKE VBAK-VBELN,

END OF IT_SO.

SELECT-OPTIONS : S_VBELN FOR VBAK-VBELN.

SELECT VBELN INTO CORRESPONDING IT_SO

FROM VBAK WHERE VBELN IN S_VBELN.

LOOP AT IT_SO.
CALL FUNCTION 'ZSD_VL_DISPLAY_2' EXPORTING

* I_VBELN = S_VBELN
I_VBELN = IT_SO-VBELN
TABLES
LS_VBAK_VBAP = ITAB.

ENDLOOP.

출처 :http://cafe.naver.com/abapsung/20