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.
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.
출처 :http://cafe.naver.com/abapsung/20