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.
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.
- 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
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
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)
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:
MAGALEX
Excelente Blog, muy bien explicado todo, creéme hoy acabas de conseguir un seguir mas para tu blog, sigue asi.
ResponderEliminar