Duda al imprimir un ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Alatz
    Junior Member
    • oct
    • 28

    #1

    Duda al imprimir un ALV

    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
    Junior Member
    • sep
    • 21

    #2
    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...

    Comentario

    • Alatz
      Junior Member
      • oct
      • 28

      #3
      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.

      Comentario

      • francesc
        Member
        • mar
        • 58

        #4
        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.

        Comentario

        • PabloGP
          Junior Member
          • sep
          • 21

          #5
          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...

          Comentario

          • Alatz
            Junior Member
            • oct
            • 28

            #6
            perdona pero.....como esta declarado t_eventos?

            Comentario

            • Alatz
              Junior Member
              • oct
              • 28

              #7
              Supongo que sera así:

              DATA T_EVENTOS TYPE SLIS_T_EVENT.

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

              Comentario

              • PabloGP
                Junior Member
                • sep
                • 21

                #8
                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!

                Comentario

                • Alatz
                  Junior Member
                  • oct
                  • 28

                  #9
                  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.

                  Comentario

                  • francesc
                    Member
                    • mar
                    • 58

                    #10
                    Tienes el evento 'TOP_OF_PAGE' en tu lista de eventos del ALV?.

                    Comentario

                    • Alatz
                      Junior Member
                      • oct
                      • 28

                      #11
                      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?

                      Comentario

                      • francesc
                        Member
                        • mar
                        • 58

                        #12
                        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).

                        Comentario

                        • Alatz
                          Junior Member
                          • oct
                          • 28

                          #13
                          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.

                          Comentario

                          • Alatz
                            Junior Member
                            • oct
                            • 28

                            #14
                            Ya está. He puesto un clear y un refresh justo antes de rellenar "cabecera" y asunto solucionado.

                            Muchas gracias a todos.

                            Comentario

                            Trabajando...