[SAP/ABAP] SNRO (Number Ranage)

2014. 3. 25. 18:41SAP ERP System/ABAP TIP


출처 : http://www.abapgogo.com/develope/23673



티코드 SNRO의 넘버레인지 입니다.

 

일정한 규칙에 의해 채번할 수 있는 기능을 가지고 있습니다.

 

무작정 붙는 게시판글의 번호수 같은 그런 느낌이라고 이해하시면 편할 거 같습니다.

 

일단 SNRO로 들어가봅니다.

 

Z로 시작하는 임의의 넘버레인지 이름을 만들어 주시고 생성

 

 11.JPG         

 

 

 22.JPG

 

다음 화면 입니다. number length domain에 넘버레인지의 길이를 설정하고

warning에는 5라고 설정하면 넘버레인지의 전체 값중에 5%가 남았을때 경고를 해주는 그런기능이고(이건 뒤에서 그룹으로 설명)

numbers in buffer는 기본으로 10이 되어 있는데 데이터 무결성을 위해서는 1로 맞추는 것이 좋다.

 

ㄴ부연설명

버퍼란 것이 DB를 읽는 횟수를 줄이고 성능의 개선을 가져오기 위해 쓰는 것인데 물론 10으로 되있으면 1보다는

빠를 것이다. 그런데 보통의 서버들이 한대로 구성이 안되어 있듯이 SAP의 어플리케이션서버도 여러대로 구성이 되있을수 있다.

만약 2개의 어플리케이션 서버로 이루어진 SAP가 있다고 하자.

이때 버퍼를 10으로 주게되면 1첫째 어플리케이션서버(이하 AS)에서 1~10을 가져오고 2번째 AS에서 11~20 이렇게 값을 가져온다.

그래서 이때 사용자가 몰리지 않아서 1번째 AS로만 작업을 했을 경우에는 상관이 없을 수 있다. 그런데 사용자가 몰려서 DISPACHER(분배기)에

의해 사용자1은 AS1에 사용자 2는 AS2에 분배되었다고 가정할때 1,2,3, 이렇게 순차적으로 구성되어 있어야 할 넘버레인지에

갑자기 11, 12, 13 등의 버퍼에 할당된 녀석들이 갑자기 들어와서 번호가 역전될 가능성이 생기는 것이다.

(Dispacher와 Work Process는 기회가 된다면 나중에)

 

 

download?fid=642236b90cf95934533837918f38c511&name=3-tier-architecture.gif

SAP의 3TIER

 

 

 

 

 

33.JPG 

 

 구성을 하고 저장을 하게되면 상단에 Number Ranges라는 버튼이 생기게된다.

 

 

 

44.JPG

 

넘버레인지의 인터벌 값을 작성해주자!.

 

 

 

 

55.JPG

 

위에 +인터벌을 클릭!

 

 

66.JPG

 

인터벌에 따른 그룹을 만들수 있다. 1이라는 그룹에 1부터 1000까지 담을거야. 현재 값은 0이란다.

 

 

77.JPG

 

이런식으로 그룹1 과 2를 만들어보자. 

 

그럼 실제로 넘버레인지 값을 가져오기 위한 간단한 예제를 보자!

 

 

 

 

*넘버레인지에서 값을 가져오기 위해서는 NUMBER_GET_NEXT라는 펑션을 사용한다. 패턴으로 간단히 부르자.

 

  REPORT  zlist.

DATAnumber1(4TYPE n. 
"넘버레인지에서 받아올 변수

 

CALL FUNCTION 'NUMBER_GET_NEXT'
  EXPORTING
    nr_range_nr                   = '1'     "넘버레인지 No.(그룹)지정 2로도 설정해놓고 실행해보자
    object                        = 'ZLIST' "넘버레인지 이름
    quantity                      = '1'     "증가수량 1이면 1씩증가 2면 2씩증가
*   SUBOBJECT                     = ' '
*   toyear                        = '0000'  
*   IGNORE_BUFFER                 = ' '
 IMPORTING
   number                        = number1   "가져온 값을 여기다 담자!
*   QUANTITY                      = QUANTITY
*   RETURNCODE                    = RETURNCODE
 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
   buffer_overflow               = 7
   OTHERS                        = 8
          .
IF sy-subrc <> 0.                           "실패메세지
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

WRITE number1.

 

 

 

 

r1.JPG 

 

첫번째 실행 

 

 

r2.JPG

 

2번째 실행

 

 

 

r4.JPG

 

3번째 실행까지하고 SNRO에서 확인해본 현재값 역시 3이다.