
Reporte Interactivo
Es un reporte donde se muestra un primer listado por pantalla con cierta información y luego haciendo doble clic a una linea determinada se accede a otros datos relaticos a esa linea y asi sucesivamente por n niveles.
Este solo puede ser ejecutado interactivo porque requiere iteración del usuario.
Eventos y variables de un reporte interactivo
El evento para trabajar con estas iteraciones se llama AT LINE-SELECTION
SY-LSIND contiene el nivel del listado donde estamos ubicados
SY-LISEL tiene el contenido de la linea seleccionada
SY-LILLI contiene la linea selecccionado comenzando desde el titulo que es la linea 1
SY-CUROW contiene la posición del cursor vertical
El evento TOP.OF-PAGE DURING LINE-SELECTION no permite imprimir los titulos asociados al detalle de los reportes
Programas estandar de SAP como ejemplo de reportes interactivo
DEMO_LIST_INTERACTIVE_1, DEMO_LIST_INTERACTIVE_2, DEMO_LIST_INTERACTIVE_3, DEMO_LIST_INTERACTIVE_4
Para capturar la linea que fue seleccionada hacemos lo siguiente:
AT LINE-SELECTION.
v_dni = sy-lysel(10) 'toma el dni a partir de la posicion 10
PERFORM generar_reporte_nivel2
Para imprimir el titulo de la pagina de detalle
TOP-OF-PAGE DURING LINE-SELECTION
Write:/ 'Detalle de los usuarios', sy-uline
La pantalla de detalle tambiens e puede mostrar emergente para ello se utiliza:
WINDOW STARTING AT 1 15
ENDING AT 79 23.
*&---------------------------------------------------------------------*
*& Report ZPRUEBA_ABAP_5_4
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zprueba_abap_5_4.
* Declaración de datos
DATA: ti_usuarios TYPE STANDARD TABLE OF ztabla_usuarios,
wa_usuarios LIKE LINE OF ti_usuarios,
v_dni TYPE z_dni.
*----------------------------------------------------------------------*
START-OF-SELECTION.
*----------------------------------------------------------------------*
* Cargar datos en tabla interna
PERFORM cargar_datos.
* Imprimo los datos ppor pantalla
PERFORM imprimir_tabla.
*----------------------------------------------------------------------*
AT LINE-SELECTION.
*----------------------------------------------------------------------*
v_dni = sy-lisel(10).
PERFORM generar_reporte_nivel2.
*----------------------------------------------------------------------*
TOP-OF-PAGE DURING LINE-SELECTION.
*----------------------------------------------------------------------*
WRITE:/ 'Detalle de los Usuarios', sy-uline.
*&---------------------------------------------------------------------*
*& Form IMPRIMIR_TABLA
*&---------------------------------------------------------------------*
FORM imprimir_tabla .
LOOP AT ti_usuarios INTO wa_usuarios.
FORMAT COLOR COL_TOTAL INTENSIFIED.
WRITE:/ wa_usuarios-dni,
wa_usuarios-nombre_ape.
ENDLOOP.
ENDFORM. " IMPRIMIR_TABLA
*&---------------------------------------------------------------------*
*& Form CARGAR_DATOS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM cargar_datos .
CLEAR ti_usuarios.
REFRESH ti_usuarios.
SELECT *
FROM ZTABLA_USUARIOS
INTO TABLE ti_usuarios.
ENDFORM. " CARGAR_DATOS
*&---------------------------------------------------------------------*
*& Form GENERAR_REPORTE_NIVEL2
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM generar_reporte_nivel2 .
READ TABLE ti_usuarios INTO wa_usuarios WITH KEY dni = v_dni.
IF sy-subrc EQ 0.
FORMAT COLOR COL_HEADING INTENSIFIED.
WRITE:/1(50) sy-uline.
WRITE:/1(1) sy-vline,
2(20) 'DNI',
22(1) sy-vline,
23(27) wa_usuarios-dni,
50(1) sy-vline.
WRITE:/1(1) sy-vline,
2(20) 'Nombre y Apellido',
22(1) sy-vline,
23(27) wa_usuarios-nombre_ape,
50(1) sy-vline.
WRITE:/1(1) sy-vline,
2(20) 'Estado usuario',
22(1) sy-vline,
23(27) wa_usuarios-estado_usu,
50(1) sy-vline.
WRITE:/1(1) sy-vline,
2(20) 'Dirección',
22(1) sy-vline,
23(27) wa_usuarios-direccion,
50(1) sy-vline.
WRITE:/1(1) sy-vline,
2(20) 'Código postal',
22(1) sy-vline,
23(27) wa_usuarios-codigo_postal,
50(1) sy-vline.
WRITE:/1(1) sy-vline,
2(20) 'Fecha Nacimiento',
22(1) sy-vline,
23(27) wa_usuarios-f_nacimiento,
50(1) sy-vline.
WRITE:/1(50) sy-uline.
ENDIF.
ENDFORM. " GENERAR_REPORTE_NIVEL2