Los rangos de numeros permiten la asignacion automatica y unica de numeros para documentos, comprobantes y otros objetos de negocio. Garantizan unicidad incluso con accesos paralelos.
Conceptos de rangos de numeros
Concepto
Descripcion
Objeto de rango de numeros
Contenedor para intervalos (SNRO)
Intervalo
Rango de numeros (desde-hasta)
Asignacion interna
El sistema asigna automaticamente
Asignacion externa
El usuario proporciona el numero
Transacciones importantes
Transaccion
Descripcion
SNRO
Mantener objetos de rango de numeros
SNUM
Mantener estados de rango de numeros
SLG1
Protocolo de rango de numeros
Ejemplos basicos
Obtener siguiente numero
DATA: lv_number TYPE char20,
lv_rc TYPE inri-returncode.
CALLFUNCTION'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr ='01'" Numero de intervalo
object='ZORDER'" Objeto de rango de numeros
IMPORTING
number= lv_number
returncode = lv_rc
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.
IFsy-subrc=0.
WRITE: /'Nuevo numero:', lv_number.
ELSE.
MESSAGE'Error en asignacion de numero' TYPE'E'.
ENDIF.
Numero con dependencia de ano
DATA: lv_number TYPE char20,
lv_year TYPE nriv-toyear.
lv_year = sy-datum(4).
CALLFUNCTION'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr ='01'
object='ZINVOICE'
toyession = lv_year " Ejercicio fiscal
IMPORTING
number= lv_number
EXCEPTIONS
OTHERS=1.
" Resultado ej.: 2025-0000001
DATA(lv_doc_number) =|{ lv_year }-{ lv_number ALPHA = IN }|.
Multiples numeros de una vez
DATA: lv_from_number TYPE char20,
lv_to_number TYPE char20,
lv_quantity TYPE iVALUE10.
CALLFUNCTION'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr ='01'
object='ZBATCH'
quantity = lv_quantity " 10 numeros
IMPORTING
number= lv_from_number
returncode = lv_rc
EXCEPTIONS
OTHERS=1.
" lv_from_number = primer numero
" lv_from_number + quantity - 1 = ultimo numero
lv_to_number = lv_from_number + lv_quantity -1.
WRITE: /'Rango de numeros:', lv_from_number, 'hasta', lv_to_number.