Navegacion ALV

Navegación a través de un reporte ALV

Muchas veces te pedirán que desarrolles un reporte ALV que permita la navegación a otra transacción al momento de pulsar un campo, esto es bastante sencillo de realizar.

Tomemos como ejemplo, un reporte que lista algunos documentos de venta (contratos), en el cual, la columna del código de documento, permita la navegación a la transacción de visualización de contratos (VA43).

Primero debemos, al momento de crear el catálogo del ALV, indicar que la columna que contendrá el código del documento, sea una columna “seleccionable”, para ello requerimos la siguiente línea de código:

   alv_git_fieldcat-key         = ‘X’.

Esa línea la insertaremos en el llenado del catálogo para ese campo en particular.

Catalago de un ALV

Catalago de un ALV

 

Dentro de nuestro llamado al ALV, debemos colocar la siguiente línea para capturar los eventos de la pantalla a través del SY-UCOMM.

      I_CALLBACK_USER_COMMAND  = ‘USER_COMMAND’

Funciona ALV GRID DISPLAY

Funciona ALV GRID DISPLAY

Luego debemos crear un FORM llamado USER_COMMAND, que contendrá la captura del evento, la lectura del registro seleccionado y el llamado a la transacción VA43. Veamos dos maneras de hacer esto:

La primera vía, es utilizando la memoria de SAP para pasar los valores entre programas.

FORM User Command

FORM User Command

Veamos que significa cada línea:

La variable R_UCOMM  contendrá el código SY-UCOMM seleccionado por el usuario en pantalla, aquí queremos capturar el evento de pulsar un campo del ALV, este evento es estándar y responde al código ‘BEAN’.

La variable RS_SELFIELD es una estructura que contiene datos referentes a índices de la tabla interna del ALV, nos indica cual registro fue pulsado por el usuario, es extremadamente útil el campo RS_SELFIELD-TABINDEX, ya que contendrá cual fue el registro seleccionado.

Solemos usar un CASE-ENDCASE para evaluar el campo R_UCOMM  y de esta manera controlar diferentes eventos que puedan ocurrir en la pantalla del ALV, para este ejemplo sencillo, nos basta controlar el SY-UCOMM = ‘BEAN’.

Dentro de ello, disponemos de 3 líneas para cumplir con el requerimiento:

READ TABLE itab INDEX RS_SELFIELD-TABINDEX.
SET PARAMETER ID ‘AUN’ FIELD itab-pedido.
CALL TRANSACTION ‘VA43’ AND SKIP FIRST SCREEN.

En la primera línea, leemos de la tabla interna que contiene el ALV (en este ejemplo llamada ITAB), pero leeremos exactamente el registro que fue seleccionado por el usuario, esto gracias a que, como dijimos antes, el campo  RS_SELFIELD-TABINDEX  contiene el índice del registro seleccionado.

En la segunda línea estamos haciendo uso de la memoria de SAP, le estamos pasando a la variable única ‘AUN’ el contenido del campo itab-pedido, que es el código del documento comercial seleccionado en nuestro ALV.

Lo que queremos aquí es asignarle de manera automática a la pantalla inicial de la transacción ‘VA43’, el código del documento a mostrar, como vemos, esta pantalla nos pide el código del pedido a tratar:

SAP visualizar Pedidos Abiertos

SAP visualizar Pedidos Abiertos

Si revisamos los datos técnicos de este campo (FI -> Información Técnica), nos vamos a la pestaña “Datos Campo” para ubicar el “ID parámetro”, este identificador es único, y será el código que usaremos para pasarle valores a este campo desde cualquier parte del sistema a través de la memoria de SAP.

SAP Datos Técnicos

SAP Datos Técnicos

De ahí que con la instrucción SET PARAMETER  nos estemos asegurando de pasarle a este campo, el código del documento indicado por el usuario en nuestro reporte ALV.

Y como último paso, la tercera línea, mediante un CALL TRANSACTION  le pasamos el control a la transacción ‘VA43’, y con el comando AND SKIP FIRST SCREEN nos saltamos la primera pantalla, ya que esta contiene el código del documento asignado en la línea anterior.

Obtendremos como resultado, que al pulsar el código del documento en el ALV, pasaremos a su ventana de visualización en la ‘VA43’.

Otra vía para hacer este proceso, es como se muestra a continuación.

Form User Command

Form User Command

La diferencia está en las siguientes dos líneas:

PERFORM bath.

CALL TRANSACTION ‘VA43’ USING bdc_tabla[] MODE ‘E’.

En esta ocasión, accederemos a la transacción ‘VA43’ mediante un sencillo bath imput que cargue en la primera pantalla el código del documento obtenido en la línea anterior, el PERFORM bath lo que hace es llenar en la tabla bdc_tabla[] (del tipo bdcdata), el juego de datos generado mediante una grabación  a la ‘VA43’ a través de la  transacción SM35.

Y posteriormente hacemos el CALL TRANSACTION  respectivo, con la variante que le indicamos que se base en la tabla bdc_tabla[] y bajo el modo de tratamiento que le indiquemos.

Las dos vías aquí expuestas, nos lleva al mismo resultado, trabaja la que mas te convenga en cada caso.

¿Te ha sido de utilidad este artículo? Házmelo saber con tus comentarios, y suscríbete a mi Comunidad para recibir mi curso gratuito “AprendeABAP en 10 lecciones”, además de contenidos exclusivos  sobre el mundo ABAP.

richard-avatar-SM-126x159

Richard Rey

“Programando tu Exito”

Opt In Image
Quieres aprender a hacer Reportes ALV?
Descubre la magia de los Reportes SAP en mi Taller Especial de ALV !!!

Se de los primeros en apuntarte y no te quedes sin cupos haciendo clic AQUÍ

O también puedes dejar tus datos aquí abajo y formarás parte de mi comunidad exclusiva, además de recibir mi curso de regalo "Los 7 Pasos para ser un Consultor Exitoso".

 

 

PD: Odio el SPAM. No compartire tus datos con nadie

Si te gusta, compártelo! ...Share on FacebookTweet about this on TwitterShare on LinkedInShare on Google+Email this to someonePrint this page

Comentarios