PDA

Ver la Versión Completa : Duda al imprimir un ALV


Alatz
09/03/09, 11:02:06
Hola,

Tengo una duda sobre la impresión de un ALV. Resulta que a la hora de imprimir, no me imprime la parte del "top_of_page", es decir, la parte en la que tengo puesto un fondo con su respectivo logo y algun que otro dato (como la ubicación o el mensaje que indica que no se ha introducido ninguna ubicación).
¿Que hay que hacer para que se imprima tambien esa parte del ALV?

Aparte, tambien quisiera sacar el nombre del usuario, la fecha y la hora en esa cabecera.
¿Existe alguna forma de hacerlo?

Espero que alguien pueda ayudarme.
Gracias.

PabloGP
09/03/09, 15:42:22
Buenas,

para imprimir la hora, el usuario y la fecha en el formulario podrias hacer lo siguiente:

Defines:

data cabecera type SLIS_T_LISTHEADER.

data wa_cabecera like LINE OF cabecera.


FORM CREA_CABECERA .

wa_cabecera-typ = 'S'.
wa_cabecera-key = 'Usuario: '.
wa_cabecera-info = sy-uname.
APPEND wa_cabecera to cabecera.

wa_cabecera-typ = 'S'.
wa_cabecera-key = 'Fecha: '.
data: fecha_formateada(10).
write sy-datum to fecha_formateada USING EDIT MASK '__/__/____'.
wa_cabecera-info = fecha_formateada.
APPEND wa_cabecera to cabecera.

wa_cabecera-typ = 'S'.
wa_cabecera-key = 'Hora: '.
wa_cabecera-info = sy-uzeit.
APPEND wa_cabecera to cabecera.


ENDFORM.

Te saldrá como resultado en la cabecera lo siguiente:

-------------------------------
Usuario: NOMBRE_USUARIO
Fecha: 09/03/2009
Hora: 17:41:23
-------------------------------

Espero que te ayude...

Alatz
10/03/09, 08:58:01
Disculpa pero...después donde se supone que debo usar la variable "cabecera"?
Pensaba que habría que pasarsela al parámetro de I_CALLBACK_TOP_OF_PAGE que está en la función REUSE_ALV_GRID_DISPLAY...pero no me visualiza nada.

¿Podrías decirme donde usarla?

Gracia de todas formas por la ayuda...creo que por aquí van los tiros.

francesc
10/03/09, 09:05:51
Añade este form:

*&-------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&-------------------------------------------------------------------*
*& Función que escribe el contenido de una tabla tipo slis_t_header
*&-------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = cabecera.
ENDFORM.

PabloGP
10/03/09, 11:26:10
Prueba añadiende esto:

PERFORM asocia_eventos.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
IT_EVENTS = t_eventos



FORM ASOCIA_EVENTOS .

DATA wa LIKE LINE OF t_eventos.

CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
IMPORTING
ET_EVENTS = t_eventos
EXCEPTIONS
LIST_TYPE_WRONG = 1
OTHERS = 2.

IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

READ TABLE t_eventos INTO wa
with key name = 'TOP_OF_PAGE'.
wa-form = 'TOP_OF_PAGE_F'.
modify t_eventos FROM wa index sy-tabix.

* (asocia al evento TOP_OF_PAGE la subrutina TOP_OF_PAGE_F)


ENDFORM. " ASOCIA_EVENTOS


FORM TOP_OF_PAGE_F.

CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = cabecera.

ENDFORM.


Espero que te sirva...

Alatz
10/03/09, 11:49:04
perdona pero.....como esta declarado t_eventos?

Alatz
10/03/09, 13:43:54
Supongo que sera así:

DATA T_EVENTOS TYPE SLIS_T_EVENT.

Cre que me voy acercando cada vez más a la solución.

:)

PabloGP
10/03/09, 16:38:40
Si, es del tipo SLIS_T_EVENT.

Para saber el tipo pincha sobre el nombre de la funcion del ALV 'REUSE_ALV_GRID_DISPLAY' o la que estes usando, y en la pestaña 'import' podras ver todos los tipos de datos que usa.

Animo que ya lo tienes! :D

Alatz
11/03/09, 11:06:01
Y con eso....conseguis que al imprimir en PDF os salga una cabecera con el usuario, la fecha y la hora???

Es que......al debugear, tengo en T_EVENTOS los datos de usuario, fecha y hora....pero no se si los estoy pasando a la función REUSE_ALV_GRID_DISPLAY.

Cuando ejecuto, veo una cabecera con un fondo y un logo que yo mismo he puesto....pero a la hora de imprimir a PDF solo sale el título del ALV como cabecera.

francesc
11/03/09, 14:02:02
Tienes el evento 'TOP_OF_PAGE' en tu lista de eventos del ALV?.

Alatz
11/03/09, 14:37:38
Si....a ver si puedo situaros mas o menos:

Primero llamo al form CREA_CABECERA que rellena "cabecera" con el usuario, la fecha y la hora, despues llamo al form TOP_OF_PAGE, que supuestamente mediante la función REUSE_ALV_COMMENTARY_WRITE asigna "cabecera" a IT_LIST_COMMENTARY, y después llamo al form ASOCIA_EVENTOS que me han aconsejado (que no estoy muy seguro de que es lo que hace...).

Ahora es cuando hago la llamada a REUSE_ALV_GRID_DISPLAY, en el parámetro I_CALLBACK_TOP_OF_PAGE tengo asignado TOP_OF_PAGE y en IT_EVENTS tengo asignado "t_eventos".

¿Que os parece? ¿se me escapa algo?

francesc
12/03/09, 07:40:49
No hace falta poner nada en I_CALLBACK_TOP_OF_PAGE, creo, prueba a quitarlo. Yo no lo pongo al usar la función REUSE_ALV_GRID_DISPLAY, sólo las típicas: it_events, is_layout, i_callback_pf_status_set, i_callback_program, opcionallemte las de ordenar (it_sort) imprimir (it_print).

Alatz
12/03/09, 11:26:33
Bueno...al fin me ha salido. He cogido el código que usaba en el f_html_cabecera_de_pagina y lo he metido en el TOP_OF_PAGE, justo antes de llamar a la función REUSE_ALV_COMMENTARY_WRITE.

Despues, justo antes de llamar a REUSE_ALV_GRID_DISPLAY hago las llamadas a CREA_CABECERA y a ASOCIA_EVENTOS y....(IMPORTANTÍSIMO)...al parámetro I_CALLBACK_TOP_OF_PAGE le paso TOP_OF_PAGE.

De esta forma consigo que aparezcan en la cabecera del ALV (incluso cuando imprimo en PDF) el usuario, la fecha, la hora y los filtros que le he puesto ("la fecha no se ha introduciso"...bla,bla,bla).

Lo malo es que por alguna razón me sale duplicado....en ocasiones cuaduplicado.
¿Alguien sabe porque podría ser? Me extraña porque no hay ningún loop.

Alatz
12/03/09, 14:48:30
Ya está. He puesto un clear y un refresh justo antes de rellenar "cabecera" y asunto solucionado.

Muchas gracias a todos.

;)