Voy a explicar los pasos a seguir para incorporar un encabezado/header en un reporte ALV. Es decir, tener una imágen de fondo, un logo y texto.
Hay dos imágenes en mi ejemplo:
1_ logo (ENJOYSAP_LOGO)
2_ background (ALV_BACKGROUND)
Cada uno puede elegir las imágenes que quiera, pero siempre y cuando estén subidas en la transacción OAER
* Variables y estructuras para ALV
TYPE-POOLS: SLIS.
DATA:
LV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
LV_REPID TYPE SY-REPID,
T_EVENTS TYPE SLIS_T_EVENT, ” Eventos.
GT_HEADER TYPE SLIS_T_LISTHEADER, ” Tabla con el Título y el Logo
WA_HEADER TYPE SLIS_LISTHEADER. ” Work Area con el Título
DATA: BEGIN OF IT_TABLE OCCURS 0,
VALOR TYPE STRING,
END OF IT_TABLE.
* Agregar el programa para el callback
LV_REPID = SY-REPID.
*&———————————————————————*
*& Acá en el medio llenamos la tabla interna IT_TABLE
*& para mostrar en el AVL
*&———————————————————————*
*Llamo al ALV
PERFORM FILL_EVENT USING T_EVENTS.
PERFORM CARGAR_FIELDCAT TABLES LV_FIELDCAT.
PERFORM INIT_HEADER.
CALL FUNCTION ‘REUSE_ALV_GRID_DISPLAY’
EXPORTING
I_CALLBACK_PROGRAM = LV_REPID
I_CALLBACK_TOP_OF_PAGE = ‘TOP_OF_PAGE’ ” llama al form
I_BACKGROUND_ID = ‘ALV_BACKGROUND‘ ” imagen de fondo
IT_FIELDCAT = LV_FIELDCAT
IT_EVENTS = T_EVENTS
TABLES
T_OUTTAB = IT_TABLE.
*&———————————————————————*
*& Form cargar_fieldcat
*&———————————————————————*
FORM CARGAR_FIELDCAT TABLES LV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LV_POSICION TYPE I.
CLEAR LV_FIELDCAT.
REFRESH LV_FIELDCAT.
ADD 1 TO LV_POSICION.
LV_FIELDCAT-COL_POS = LV_POSICION.
LV_FIELDCAT-FIELDNAME = ‘VALOR’.
LV_FIELDCAT-JUST = ‘C’.
LV_FIELDCAT-DDICTXT = ‘L’.
LV_FIELDCAT-TABNAME = ‘IT_TABLE’.
LV_FIELDCAT-SELTEXT_M = ‘Valor’.
LV_FIELDCAT-SELTEXT_L = ‘Valor’.
APPEND LV_FIELDCAT.
CLEAR LV_FIELDCAT.
ENDFORM. “CATALOG
*&——————————————————————–*
*& Form fill_event
*&——————————————————————–*
FORM FILL_EVENT USING P_T_EVENTS TYPE SLIS_T_EVENT.
DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
* Toma los eventos
CALL FUNCTION ‘REUSE_ALV_EVENTS_GET’
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = P_T_EVENTS.
* Selecciono el evento ‘TOP_OF_PAGE’ y le seteo el FORM a ejecutar
CLEAR LS_EVENT.
READ TABLE P_T_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
INTO LS_EVENT.
IF SY-SUBRC = 0.
MOVE ‘TOP_OF_PAGE’ TO LS_EVENT-FORM.
APPEND LS_EVENT TO P_T_EVENTS.
ENDIF.
ENDFORM. ” FILL_EVENT
*———————————————————————-*
* Carga el título y subtítulo del reporte
*———————————————————————-*
FORM INIT_HEADER.
DATA: WA_HEADER TYPE SLIS_LISTHEADER.
* Cargo el Título
WA_HEADER-TYP = ‘H’.
WA_HEADER-INFO = ‘Título en Mayúsculas‘.
APPEND WA_HEADER TO GT_HEADER.
* Cargo el Subtítulo
CLEAR WA_HEADER.
WA_HEADER-TYP = ‘A’.
WA_HEADER-INFO = ‘Texto para un subtítulo.‘.
APPEND WA_HEADER TO GT_HEADER.
ENDFORM. “init_header
*&——————————————————————–*
*& Form top_of_page
*&——————————————————————–*
FORM TOP_OF_PAGE .
* Pasa a la cabecera el logo
CALL FUNCTION ‘REUSE_ALV_COMMENTARY_WRITE’
EXPORTING
I_LOGO = ‘ENJOYSAP_LOGO‘ “Logo
IT_LIST_COMMENTARY = GT_HEADER.
ENDFORM. ” TOP_OF_PAGE
Technorati tags: sdn blogger

Add me to your del.icio.us
bUENA AMIGO… ESTA BONITO EL CODIGO!
hola, buen dia.
una pregunta mi usuario me pide un alv con encabezado y con imagenes ya le pude mostrar esto gracias ti, solo que ahora quiere que mueva el logo hacia la izquiera y que se ponga arriba del titulo, tambien que el titulo sea centrada, esto se puede hacer?.
Que tal Magda,
Nunca puse detalle en centrar las imágenes ni el texto. Pero siempre algo se puede hacer…
Primero fijate qué otras opciones tiene la función REUSE_ALV_COMMENTARY_WRITE en el EXPORTING, y si alguna de ellas es para posicionar el logo y los comentarios.
De no ser así, la alternativa casera es hacer todo a mano… Por ejemplo para el logo crear una imagen con el ancho de la pantalla colocando el logo en el centro.
Y para los textos, al momento de cargar la variable WA_HEADER-INFO dejarle espacios en blanco al principio.
Espero que te sirva, saludos!
Daniel.