NUMBER_GET_NEXT in SM30

Por la transacción SE11 estás creando una tabla transparente y requerimos que uno de los campos clave genere un correlativo automáticamente. 

Por la transacción SM30 cuando das mantenimiento a la vista de actualización de una tabla... requieres que uno de los campos clave se genere automáticamente como un correlativo.

Por la transacción SM30 deseas que algunos campos se muestren como no-editables o mejor aún deseas ocultarlos.

Si tu caso es alguno de estos 3 puntos, este post te será de mucha ayuda.

En SAP una alternativa de solución es la siguiente:

  • Por la transacción SNRO se crea un rango de números y se específica el nombre del objeto, la longitud del número y el intervalo.
  • Por la transacción SE11 se crea la tabla, la cual uno de sus campos es campo clave y contiene la misma longitud del objeto creado. Una vez creado la vista de actualización de la tabla, se procede a crear un evento para cada nueva entrada, donde se utiliza la función NUMBER_GET_NEXT la cual retorna el último número correlativo.
  • En la dynpro de la tabla se configura los campos no-editable o sólo de salida y en el PBO (Process Before Output) se crea un módulo para vía código ABAP programar los campos que estarán ocultos en la vista de actualización de la tabla.
  • Por la transacción SM30 se actualiza la tabla
  • Por la transacción SE16/SE16N se consulta los registros existentes en la tabla y a la vez se visualiza todos los campos ya que es posible que por la SM30 algunos campos se encuentren ocultos.



Veamos paso a paso:

Ingresamos a la transacción SNRO y creamos el objeto, en mi caso tiene por nombre: ZCODE_AUTO


 Ingresamos la lóngitud, en mi caso será numérico de longitud 10 (NUM10)
Suponiendo que el intervalo se define de 1 a 1000. Si se desea mostrar una advertencia en el número 900, se ingresa 10%

Seleccionamos  sin grabación en MI

Ingresamos el intervalo de valores, en mi caso es desde 0000000001 hasta 9999999999


Para transportar el intervalo a otro ambiente de SAP, se debe realizar la siguiente secuencia:
menú Intervalo -> Transportar

Aceptamos y solicitará una OT de tipo Customizing. 
Para el Objeto ZCODE_AUTO es una OT de tipo Workbench


El objeto creado también se puede consultar por la tabla NRIV
NRIV (Intervalos de rangos de números)


Ingresamos a la transacción SE11 y creamos la tabla, en mi caso tiene por nombre ZTWM_TEST
 clase de entrega: A (Tabla aplicación)
Actual.vista tabla: Visual./Actual.permitida

Ingresamos los campos, en nuestro caso el campo que tendrá el valor correlativo es ZTWM_TEST-ZCODE
A modo de ejemplo tenemos 4 campos clave: MANDT, ZCODE, LGNUM y VLTYP
los campos ERNAM, ERDAT y ERTIM normalmente son campos para auditoria ya que tiene el usuario que insertó/modificó el registro, fecha de creación/modificación del registro y la hora.

Activamos la tabla... y creamos la vista de actualización

Dentro de la vista de actualización, ingresamos al menú Entorno->modificación->Eventos

Utilizaremos 2 eventos:

05 (Al crear una entrada nueva) -> rutina: Z_ON_CREATE
21 (Proporcionar datos a campos ocultos) -> rutina: Z_ON_CHANGE


Los eventos creados para una tabla pueden ser consultados desde la tabla TVIMF
TVIMF (Rutinas User llamadas desde la actualización de vistas)


Para cada rutina implementamos el código ABAP, pulsando en el ícono de la columna 'Editor'


Dentro de la rutina Z_ON_CREATE llamamos a otra subrutina para obtener el correlativo

Para esta Demo, la rutina F_GET_CODE llama a la función NUMBER_GET_NEXT la cual retorna el actual correlativo y ese dato lo pasamos al campo ZTWM_TEST-ZCODE



En el entorno generación de actualización de la tabla ingresamos a 'Imagen resumen'

Haremos que sólo sea editable 2 campos: ZTWM_TEST-LGNUM y ZTWM_TEST-VLTYP


Ingresamos a la transacción SM30. En el campo tabla digitamos el nombre de nuestra tabla, en mi caso es: ZTWM_TEST


Ingresamos nuevos registros

Observamos que sólo se muestran editables los campos ZTWM_TEST-LGNUM y ZTWM_TEST-VLTYP, lo cual es correcto.

Ya tenemos los 2 campos editables

ZTWM_TEST-LGNUM: Núm.almacén/Complejo alm.
ZTWM_TEST-VLTYP: Tipo alm.procedencia

*****
Para facilitar el ingreso de la data, añadiremos matchcode (ayuda de búsqueda) al campo ZTWM_TEST-VLTYP


 Ingresamos a la SE11 y en la pestaña 'Ayuda p./Verif.entr.' ingresamos la ayuda de búsqueda H_T301 para VLTYP

Si ingresamos la ayuda de búsqueda de H_T301 observamos que tiene 3 campos a mostrar:
T301T-LGNUM (Núm.almacén/Complejo alm.)
T301T-LGTYP   (Tipo almacén)
T301T-LTYPT    (Denominación del tipo de almacén)



 Por la transacción SM30 validamos que ahora ya muestre el matchode para el campo ZTWM_TEST-VLTYP

Dado que la ayuda de búsqueda H_T301 comprende el campo LGNUM, al seleccionar algún registro del matchcode... el dato viajará a ZTWM_TEST-VLTYP y también automáticamente se asignará su valor correspondiente en ZTWM_TEST-LGNUM como se observa en imagen:


Al pulsar la tecla Enter, es aquí donde ingresa al evento 05 (rutina: Z_ON_CREATE): obtiene el correlativo actual y asigna los valores correspondientes de auditoría para Usuario, Fecha y Hora.


Podemos seguir añadiendo más registros:

Ingresamos los valores en los campos editables y al presionar la tecla Enter automaticamente se completará los otros datos.

Se va comprendiendo mejor el propósito? si?... 
Ahora que pasa si queremos ocultar estos campos no editables? 

Desde la SE11 ingresamos a la dynpro de la tabla para añadir un módulo en el PBO (Process Before Output) que nos permita ocultar los campos no editables

Debajo de las líneas de código abap del PBO, ingresaremos nuestro módulo en mi caso le he dado el siguiente nombre ZHIDE_FIELDS

Recorremos las columnas para ocultar sólo los campos no-editables en mi caso son las columnas: 1, 4, 5 y 6

Luego de grabar y activar, al ingresar a la transacción SM30 se visualizará sólo los campos editables:

ZTWM_TEST-LGNUM
ZTWM_TEST-VLTYP


También podemos hacer que estos 2 campos sean obligatorios, de la siguiente manera:

Por la SM30 al añadir nuevas entradas podemos comprobar que ahora en ambos campos muestra el check de obligatorio

Grabamos los datos
Por la SM30 sólo observamos los campos editables, los otros campos se encuentran ocultos.


Si queremos ver toda la info completa de la tabla, podemos hacerlo consultando la tabla desde la transacción SE16/SE16N

Observamos todas las columnas (Código, número almacén, tipo, usuario, fecha y hora)


Que tal? Que te pareció el Post? 
Ahora ya te encuentras con más confianza para aplicar correlativo como campo clave en una tabla?
Ya sabes como crear un rango de números desde la SNRO y por ende llamarlo desde el programa de mantenimiento de la tabla utilizando la función NUMBER_GET_NEXT.
Adicional: puedes agregar ayudas de búsqueda a los campos, puedes hacer campos no editables, puedes ocultar algunos campos, etc... Esto es una pista de lo mucho que puedes hacer para tener una vista de actualización acorde al requerimiento solicitado.

También puedes ver los siguientes Post relacionados: 


Nos vemos en el siguiente Blog 
MAGALEX

Comentarios

  1. Excelente Blog, muy bien explicado todo, creéme hoy acabas de conseguir un seguir mas para tu blog, sigue asi.

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Modificando Vista de Actualización SM30

User Exit para VA01 y VA02

Buttons and events in ALV GRID and ALV GRID OO