안녕하세요. 다른 분이 짜놓은 프로그램을 분석중인데 프로그램 중에 number_get_next 라는 함수가 있습니다.
해당소스에서 pattern 누르고 검색해 보면 설명란에 Number range : Assings next free number 라고 되어 있던데
이함수가 구체적으로 몰 하는 함수 인지 알기가 힘드네요. 다른 함수도 마찬가지이지만 이 해당 함수에 대한
좀 자세한 헬프나 이런걸 볼수 있는 방법이 혹시 있는지 궁금합니다.
그리고 아래 함수에 보면 Exporting 이 두가지가 nr_range_nr, object 몰 넘겨주는 부분인지 이해가 안가네요.
매번 도움만 요청 드리는 것 같은데 아시는 분 답변 부탁드려요...
CONSTANTS: gc_nro_nr_09 VALUE '09' TYPE inri-nrrangenr. "App. Doc no.
CONSTANTS: gc_nro_object_log VALUE 'ZKCANRO001' TYPE inri-object.
FORM number_get_next USING value(iv_nro_interval) LIKE
inri-nrrangenr
value(iv_nro_object) LIKE inri-object
CHANGING value(ev_nro_next).
CLEAR: ev_nro_next.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = iv_nro_interval
object = iv_nro_object
IMPORTING
number = ev_nro_next
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
OTHERS = 7.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " NUMBER_GET_NEXT
댓글 4
-
nanta
2009.03.25 00:29
-
Jaden
2009.03.25 00:45
SNRO에서 생성한 넘버레인지를 이용하여 채번을 하는 펑션입니다.
보통 exporting 의 nr_range_nr과 object를 이용하여 값을 보내면 importing으로 순차적으로 iv_nro_object 이녀석에 맞는
넘버레인지의 오브젝트값에서 다음번호를 리턴받게 됩니다.
nr_range_nr = 넘버레인지에서 쓰이는 넘버레인지의 범위값 중 어떤부분에서 채번할지 쓰입니다
object = 넘버레인지의 이름입니다. (이녀석과 위의 nr_range_nr은 SNRO에서 미리 생성해주셔야합니다)
Ex) nr_range_nr = '01' / object = 'Z_TEST' 라고 한다면
'Z_TEST' 라는 넘버레인지중 '01'의 INTERVALS에 해당하는 번호의 다음번호를 import 값으로 얻을수 있습니다
-
mm_dsshin
2009.03.25 04:04
쉽게 말해서 일련 번호를 부여하는 함수 입니다. 번호 체계는 설정할 수 있으면 (snro에서) 0001 . 0002 , 0003 ~~ 이렇게 레코드 값이 생길 때만다 번호를 붙여 줍니다.
예 ) 전표를 하나씩 생성할 때 마다 1 , 2, 3 ~~ 이렇게 번호를 자동으로 부여 해주는 거져 ( 여태까지 발행된 전표 수를 기억해 줌)
-
ID
2009.03.25 19:03
시스템에서 자동적으로 일련번호를 해주는 거고요..
일반적으로 SAP 에서 사용하는 키값(자재문서번호, 전표번호, 오더번호, 등등...)을 번호형태로 생성하는 역할을 한다고 보시면 됩니다. 물론 사용자가 임의로 만들어 사용할 수도 있구요. 이것은 number range buffer를 사용하여 메모리에 현재번호를 저장하여 매번 database에서 읽어오지 않고 다음번호가 필요하면 현재 메모리에 있는 번호에 번호간격(다음번호를 생성하기위해 이전값에 더해질 값)을 더해 다음번호를 만들고 메모리에 저장하는 형태로 사용되며 메모리에 없을 경우 NRIV 테이블에서 읽어오도록 되어 있습니다. number range buffer 와 NRIV 를 동기화하는 작업은 number range 에서 하는 것이므로 신경쓰지 않으셔도 됩니다. 장점은 메모리에서 읽어오니 속도가 빠르겠죠?(a thousand times quicker...) 그리고 지정된 메모리를 사용하기 때문에 이 메모리의 내용이 데이터베이스에 commit 되기전까지 다른사용자는 대기상태로 있고 완료될 때까지 사용할 수 없으므로 중복의 여지가 없습니다. number range별로 서로 다른 번호가 생성되므로 deadlock 이 발생하는 것을 막아주기도 합니다. (apab scool 펌)
그리고 여기 보시면 번호범위 오브젝트(SNRO) 생성법이 나와있어요.
http://e-abap.servebbs.net/zb/bbs/zboard.php?id=ONEPAPER&no=129
tcode: snro 에서 number range값들이 카운트 됍니다.
그 값을 카운트 시키면서 가져오는거죠..
머.. 한마디로 글로벌하게 number range를 관리한다고 할까...
못알아들으시겠으면.. tcode: snro 여기가보시면 압니다..