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
Gracias EDPU!
Gracias, está muy bien explicado.