분명 문제없이 돌아가던 전표 생성 배치 프로그램이 어느날 실행만 시키면 무한 로딩이 걸리는 현상이 발견되었다.
디버깅을 떠보니 전표 번호를 생성하는 로직에 들어갈 때 무한 로딩이 시작됨을 확인하였다.
매일 배치 프로그램을 돌려 전표를 자동으로 생성하고 있었는데, 전표가 생성됨에 따라 number range의 최대 범위를 넘어서는 바람에 발생하는 문제였다.
우선은 무한 로딩 현상부터 해결을 해야한다.
T-CODE : SM56으로 가서
문제가 되는 number range는 빨간색으로 표시가 된다.
현재 무한 로딩 현상이 발생하는 프로그램에서 쓰는 number range가 빨간색으로 표시가 되어있다면 2번으로
T-CODE : SNRO으로 가서 해당 넘버 레인지 object name 입력해서 체인지 버튼 클릭
buffering을 No buffering으로 변경 후 저장하면 괜찮아 짐.
3번까지 완료하면 무한 로딩 현상은 해결된다!
✚
이후 넘버 레인지 범위를 넘어가지 않도록 티코드 SNRO를 통해 직접적으로 NR Status를 초기화 시켜줬지만, 너무 비효율적이라고 생각이 들었다.
구글링을 통해 number range를 초기화하는 함수 발견!
NUMBER_RANGE_INTERVAL_INIT
해당 펑션을 이용하여, 배치 프로그램이 전표를 생성할 테이블을 확인하기 전에 전표 헤더 번호와 전표 아이템 번호의 number range를 초기화 시켜주었다.
Main 프로그램의 코드는 아래와 같다.
(생략...)
START-OF-SELECTION.
IF sy-batch IS NOT INITIAL.
PERFORM : number_range_init, "여기에서 number range를 초기화 시켰다.
check_po_table,
check_so_table,
check_rb_table,
save_data.
해당 폼(number_range_init)의 코드는 아래와 같다.
*&---------------------------------------------------------------------*
*& Form number_range_init
*&---------------------------------------------------------------------*
*& 헤더 : 전표번호, 아이템 : 아이템 변호 생성을 위한 Number range를 초기화 하는 폼.
*&---------------------------------------------------------------------*
FORM number_range_init.
"헤더 채번 초기화
CALL FUNCTION 'NUMBER_RANGE_INTERVAL_INIT'
EXPORTING
object = 'ZC103FI01'
EXCEPTIONS
no_interval_found = 1
object_not_found = 2.
"아이템 채번 초기화
CALL FUNCTION 'NUMBER_RANGE_INTERVAL_INIT'
EXPORTING
object = 'ZC103FI02'
EXCEPTIONS
no_interval_found = 1
object_not_found = 2.
ENDFORM.
number range를 초기화 시켜줬더니 다시 문제 없이 잘 돌아가는 배치 프로그램 ^___^