Inicio > ABAP/4 > SNUM – Crear rangos de números

SNUM – Crear rangos de números

Escenario: se busca crear un rango de números para usarlo como identificador único en una tabla Z, para numerar un log de registros procesados.

Necesitaba numerar con un autonumérico los datos grabados en una tabla Z, así que me puse a investigar como crear rangos de números. Acá va, espero les sirva:

1. Ir a la SNUM, para crear un nuevo rango de números. En mi caso le llamé Z_NUMERA.

2. En las opciones, lo importante es definer el dominio para indicar que longitude tendrá el numerador, ver si depende del ejercicio contable y en Ctd.númers.en mem.interm. yo puse 0, porque en un post vi que si hay varios accesos a grabar el numerador como que puede haber saltos (adjunto links al pie).

3. Agrego ahora un intervalo de números (el 01). Como es un único numerador, va del 1 al 9999999999 empezando del cero. Ustedes pueden usar varios intervalos y luego trabajar con eso desde el código.

4. Ahora que ya está creado el numerador, puedo utilizarlo para obtener el próximo número a usar, para ello va el código.

Nota: Miren que los rangos se pasan mediante orden de transporte y los intervalos mediante la opción que está en el menú Intervalos-transportar (está en la pantalla previa a modificar intervalos), según tengo entendido.


* En programa Principal

DATA: wobjeto type tnro-object,

wnorange type inri-nrrangenr, "number range,

wsubobj type inri-subobject, "sub object

w_doc_number type char10.

wobjeto = ‘Z_NUMERA’.

wnorange = ‘01’.

wsubobj = space.

Perform obtener_prox_num using wobjeto

wnorange

wsubobj

changing W_doc_number.

*

FORM obtener_prox_num USING p_object TYPE tnro-object

p_wnorange TYPE inri-nrrangenr

p_wsubobj TYPE inri-subobject

CHANGING p_doc_number TYPE char10.

CALL FUNCTION 'NUMBER_RANGE_ENQUEUE'

EXPORTING

object = p_object " Crear con la SNUM

EXCEPTIONS

foreign_lock = 1

object_not_found = 2

system_failure = 3

OTHERS = 4.

IF sy-subrc NE 0.

* message e086 with 'Lock error' sy-subrc.

ENDIF.

CALL FUNCTION 'NUMBER_GET_NEXT'

EXPORTING

nr_range_nr = p_wnorange

object = p_object

subobject = p_wsubobj

IMPORTING

number = p_doc_number " Número generado por SAP

EXCEPTIONS

interval_not_found = 1

number_range_not_intern = 2

object_not_found = 3

quantity_is_0 = 4

quantity_is_not_1 = 5

internal_overflow = 6

OTHERS = 7.

IF sy-subrc NE 0.

* message e086 with 'NumberRange' sy-subrc.

ENDIF.

CALL FUNCTION 'NUMBER_RANGE_DEQUEUE'

EXPORTING

object = p_object.

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.

Adjunto links:

http://www.mundosap.com/foro/showthread.php?t=14895

http://www.sap-img.com/ge003.htm

http://help.sap.com/saphelp_NW70EHP1core/helpdata/en/2a/fa0331493111d182b70000e829fbfe/content.htm

Categorías: ABAP/4 Etiquetas: ,
  1. Fernanda
    01/03/2012 a las 21:35

    Gracias EDPU!

  2. Javi
    26/04/2012 a las 09:33

    Gracias, está muy bien explicado.

  1. No trackbacks yet.

Deja un comentario