Generar rango de número

0
Los rangos de números es una forma que tiene el sistema SAP para asignar un número consecutivo de manera automática (Autoincrementar), se suele usar cuando se quiere que el número generado no se repita para otro usuario. Los rangos de números hacen referencia a objetos que pertenecen a una clase determinada, por ejemplo, cuentas de mayor, ordenes, solicitudes de pedido, documentos contables, materiales, entre otros.

En los programas ABAP se hace uso de los rangos de números para tomar un número consecutivo de manera automática para poder trabajar con él, su uso básicamente permite insertar registros únicos dentro de tablas, donde por lo general el número obtenido del rango de números se usa como llave única o compuesta de las tablas.

1. Se ingresa a la transacción SNRO. En objeto, se coloca el nombre del mismo. Por ejemplo: ZVIAJE. Presionamos el botón Crear


2. En la pestaña intervalo, seleccionamos los sgtes datos.

3. Luego presionamos el botón intervalo para agregar el rango de números
En la columna Nro se coloca 01 como primer rango, en la segunda columna va el primer número de inicio y en la segunda columna se coloca el último número.

01      3000000001   3099999999


Modo de empleo en programación ABAP
Para hacer uso de los rangos de números disponemos de módulos de función, los siguientes son los módulos de función mas utilizados para la gestión de rangos de números:

1. NUMBER_RANGE_ENQUEUE: Este módulo de función coloca un bloqueo del rango de números, lo usamos cuando queremos bloquearlo para hacer modificaciones sobre él, en cuanto a gestión de intervalos y grupos relacionados con el rango de números, esto se hace para evitar que otras rutinas intenten modificar el rango de números al mismo tiempo.

2. NUMBER_RANGE_INTERVAL_UPDATE: Está función hace modificaciones en los intervalos de un rango de números, ya sea  crear uno nuevo o modificar uno existente, esta función coloca el rango de números tal como se indica en la tabla interna, es decir si el rango actualmente tiene 10 intervalos y la tabla interna que se llama tiene 8 al finalizar el rango de números quedaría con 2 intervalos menos, es una eliminación implícita. Siempre antes de usar esta función se debe llamar la función que efectúa el bloque.

3. NUMBER_RANGE_GROUP_UPDATE: Esta función modifica los grupos del rango de números, al igual que la anterior debemos bloquear el rango de números a modificar antes de llamarla.

4. NUMBER_RANGE_UPDATE_CLOSE: Las funciones NUMBER_RANGE_INTERVAL_UPDATE y NUMBER_RANGE_GROUP_UPDATE cuando se ejecutan y si todo es correcto se almacenan los cambios en la memoria intermedia, para que estos se vean reflejados en la base de datos debemos hacer uso de esta función, prácticamente lo que hace es ejecutar un COMMIT.

5. NUMBER_RANGE_DEQUEUE: Después de modificar los rangos de números se debe eliminar el bloqueo para permitir que los rangos puedan modificarse posteriormente.

6. NUMBER_GET_NEXT: Este módulo de función retorna el siguiente número libre de un rango de números, se indica el intervalo del rango de números que deseamos tomar, para nuestro ejemplo basta con usar esta función en nuestro programa.

Después de tener claro las funciones que se usan, ahora vamos a utilizar en el programa la que interesa en nuestro caso, la cual es NUMBER_GET_NEXT, las otras funciones para el ejemplo expuesto no son de interés, pero si quisieramos que en nuestro programa se creara el intervalo de manera automática en caso de que no exista, para este caso debemos hacer uso de los otros módulos de función para crear el intervalo y con esto nuestro programa no presentaría errores al intentar llamar un rango de números para el que no existen intervalos, permitiendo crear los intervalos de manera dinámica, esta parte no la abarcaremos en nuestro ejemplo.

Para llamar la función y genere el correlativo se realiza lo sgte:      
        
DATA LV_CORRE TYPE CHAR10.
        CALL FUNCTION 'NUMBER_GET_NEXT'
          EXPORTING
            NR_RANGE_NR                   = '01'
            OBJECT                        = 'ZVIAJE'
            IGNORE_BUFFER                 = 'X'
          IMPORTING
            NUMBER                        = LV_CORRE.
Nota. Es necesario generar el rango en todos los mandantes manualmente
Tags

Publicar un comentario

0Comentarios
Publicar un comentario (0)