ALV top-of-page

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • eduraes
    Junior Member
    • jul
    • 4

    #1

    ALV top-of-page

    Buenas, a ver si me pueden ayudar. He tenido que convertir un listado con formato de lista a formato de ALV, y para ello lo único que he hecho ha sido cambiar la llamada a la función REUSE_ALV_LIST_DISPLAY por REUSE_ALV_GRID_DISPLAY, lo que pasa es que al hacer esto se me ha descuadrado el top-of-page. ¿Alguien sabe cómo conservar el formato que tenía en el listado con forma de lista, o al menos introducir saltos entre líneas?
    Les dejo imágenes con las cabeceras de ambos listados y el código en el que se monta el top-of-page.

    FORM top_of_page_render.

    * interface structurebegin of g_s_bestand.
    DATA: lr_content TYPE REF TO cl_salv_form_element.

    *... (1) create the information to be displayed by using
    * the ALV Form elements
    PERFORM create_alv_form_content_top CHANGING lr_content.


    *... (2) Sending the information to the ALV
    * Once the inforation to be displayed has been
    * created the information has to be sent to the ALV
    * This is done by calling the static method
    * CL_SALV_FORM_CONTENT=>SET( <content> ) with the content
    * which is to be displayed.
    * Alternativly the function module REUSE_ALV_COMMENTARY_WRITE
    * can still be used.

    cl_salv_form_content=>set( lr_content ).


    ENDFORM. " top_of_page_render

    *----------------------------------------------------------------------*
    * create_alv_form_content_top
    *----------------------------------------------------------------------*
    * baustelle

    FORM create_alv_form_content_top
    CHANGING cr_content TYPE REF TO cl_salv_form_element.
    *
    DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
    lr_flow TYPE REF TO cl_salv_form_layout_flow,
    l_text(500) TYPE c,
    l_char(500) TYPE c.

    DATA: l_row TYPE i,
    l_figure(24) TYPE c,
    l_flag_tied_empties(01) TYPE c.

    DATA: l_f_text(60) TYPE c. "n999530

    *----------------------------------------------------------------------



    *... create a grid
    CREATE OBJECT lr_grid.

    * the current data are in interface structure g_s_bestand.

    * in the case the report run in print or background mode
    * --> print the old headlines

    IF NOT sy-prdsn IS INITIAL.
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    IF bwbst IS INITIAL.
    * stocks only
    WRITE : sy-pagno NO-SIGN TO g_s_header_77-page.
    MOVE : g_s_header_77 TO l_text.
    ELSE.
    * stocks and values
    WRITE : sy-pagno NO-SIGN TO g_s_header_91-page.
    MOVE : g_s_header_91 TO l_text.
    ENDIF.

    * add line to object
    lr_flow->create_text( text = l_text ).

    ADD 1 TO l_row.
    ENDIF.

    * first line : plant or valuation area---------------------------------
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    IF bwbst IS INITIAL.
    PERFORM f2200_read_t001 USING g_s_bestand-werks. "n999530

    WRITE g_s_bestand-werks TO l_f_text. "n999530
    CONDENSE l_f_text. "n999530
    CONCATENATE l_f_text t001w-name1 "n999530
    INTO l_f_text "n999530
    SEPARATED BY space. "n999530

    MOVE : text-020 TO l_text,
    l_f_text TO l_text+g_offset_header. "n999530
    ELSE.
    * show valuation area
    * MOVE : text-025 TO l_text,
    MOVE : text-116 TO l_text,
    g_s_bestand-bwkey TO l_text+g_offset_header.
    ENDIF.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * second line : material number----------------------------------------
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    * MOVE : text-021 TO l_text.
    MOVE : text-117 TO l_text.
    WRITE : g_s_bestand-matnr TO l_text+g_offset_header.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * third line : material short text-------------------------------------
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    PERFORM f2100_mat_text USING g_s_bestand-matnr.

    * MOVE : text-022 TO l_text,
    MOVE : text-118 TO l_text,
    g_s_makt-maktx TO l_text+g_offset_header.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * fourth line : batch if required--------------------------------------
    IF xchar = 'X'.
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    MOVE : text-023 TO l_text,
    g_s_bestand-charg TO l_text+g_offset_header.

    * add line to object
    lr_flow->create_text( text = l_text ).
    ENDIF.

    * line : stock and value on start date ------------------------------
    * with one empty line
    ADD 2 TO l_row.

    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    * convert unit of measurement from internal to external format n1018717
    WRITE : g_s_bestand-meins TO l_f_meins_external. "n1018717

    CLEAR l_text.
    IF bwbst IS INITIAL.
    * stock on start date
    MOVE : g_date_line_from TO l_text.
    WRITE g_s_bestand-anfmenge TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717

    ELSE.
    * stocks and values on start date
    MOVE : g_date_line_from TO l_text.
    WRITE g_s_bestand-anfmenge TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717


    WRITE g_s_bestand-anfwert TO l_figure
    CURRENCY g_s_bestand-waers.
    MOVE l_figure TO l_text+g_offset_value(24).
    MOVE g_s_bestand-waers TO l_text+g_offset_curr.
    ENDIF.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * line : total quantity and value of goods receipts--------------------
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    CLEAR l_text.

    IF bwbst IS INITIAL.
    * total quantities of goods receipts
    MOVE : text-005 TO l_text+2.
    WRITE g_s_bestand-soll TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
    ELSE.
    * total quantities and values of goods receipts
    MOVE : text-030 TO l_text+2.
    WRITE g_s_bestand-soll TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717

    WRITE g_s_bestand-sollwert TO l_figure
    CURRENCY g_s_bestand-waers.
    MOVE l_figure TO l_text+g_offset_value(24).
    MOVE g_s_bestand-waers TO l_text+g_offset_curr.
    ENDIF.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * line : total quantity and value of goods issues----------------------
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    CLEAR l_text.

    IF bwbst IS INITIAL.
    * total quantities of goods issues
    MOVE : text-006 TO l_text+2.
    COMPUTE g_s_bestand-haben = g_s_bestand-haben * -1.
    WRITE g_s_bestand-haben TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
    ELSE.
    * total quantities of goods issues
    MOVE : text-031 TO l_text+2.
    COMPUTE g_s_bestand-haben = g_s_bestand-haben * -1.
    WRITE g_s_bestand-haben TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717

    COMPUTE g_s_bestand-habenwert = g_s_bestand-habenwert * -1.
    WRITE g_s_bestand-habenwert TO l_figure
    CURRENCY g_s_bestand-waers.
    MOVE l_figure TO l_text+g_offset_value(24).
    MOVE g_s_bestand-waers TO l_text+g_offset_curr.
    ENDIF.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * line : stock and value on end date ------------------------------
    ADD 1 TO l_row.
    lr_flow = lr_grid->create_flow( row = l_row column = 1 ).

    CLEAR l_text.

    IF bwbst IS INITIAL.
    * stock on end date
    MOVE : g_date_line_to TO l_text.
    WRITE g_s_bestand-endmenge TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717
    ELSE.
    * stocks and values on end date
    MOVE : g_date_line_to TO l_text.
    WRITE g_s_bestand-endmenge TO l_figure
    UNIT g_s_bestand-meins.
    MOVE l_figure TO l_text+g_offset_qty(24).
    * move g_s_bestand-meins to l_text+g_offset_unit. n1018717
    MOVE l_f_meins_external TO l_text+g_offset_unit. "n1018717

    WRITE g_s_bestand-endwert TO l_figure
    CURRENCY g_s_bestand-waers.
    MOVE l_figure TO l_text+g_offset_value(24).
    MOVE g_s_bestand-waers TO l_text+g_offset_curr.
    ENDIF.

    * add line to object
    lr_flow->create_text( text = l_text ).

    * copy whole header object
    cr_content = lr_grid.

    ENDFORM.


    Gracias de antemano.
    Archivos Adjuntos
  • ibecerra

    #2
    vas ha tener q utilizar un funcion para la cabecera ejemplo
    *---principal
    PERFORM EVENTTAB_BUILD USING GT_EVENTS[].
    PERFORM COMMENT_BUILD USING GT_LHEADER[].
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    I_BACKGROUND_ID = 'ALV_BACKGROUND'
    I_CALLBACK_PROGRAM = G_REPID
    IS_LAYOUT = GS_LAYOUT
    IT_FIELDCAT = GT_FIELDCAT[]
    IT_SORT = GT_SORT[]
    I_SAVE = G_SAVE
    IS_VARIANT = G_VARIANT
    IT_EVENTS = GT_EVENTS[]
    TABLES
    T_OUTTAB = GT_DATA.
    *------
    *&---------------------------------------------------------------------*
    *& Form COMMENT_BUILD
    *&---------------------------------------------------------------------*
    FORM COMMENT_BUILD USING LT_TOP_OF_PAGE TYPE SLIS_T_LISTHEADER.
    DATA: LS_LINE TYPE SLIS_LISTHEADER,
    L_TEXTO(10).
    REFRESH LT_TOP_OF_PAGE.
    * Titulo
    CLEAR LS_LINE.
    LS_LINE-TYP = 'H'.
    LS_LINE-INFO = TEXT-TTT.
    APPEND LS_LINE TO LT_TOP_OF_PAGE.
    * Cliente
    CLEAR LS_LINE.
    LS_LINE-TYP = 'S'.
    IF NOT VBAK-KUNNR IS INITIAL.
    CLEAR KNA1-NAME1.
    SELECT SINGLE NAME1 INTO KNA1-NAME1
    FROM KNA1
    WHERE KUNNR EQ VBAK-KUNNR.
    LS_LINE-KEY = TEXT-T02.
    CONCATENATE VBAK-KUNNR KNA1-NAME1 INTO LS_LINE-INFO
    SEPARATED BY SPACE.
    APPEND LS_LINE TO LT_TOP_OF_PAGE.
    ENDIF.
    * Material
    IF NOT VBAP-MATNR IS INITIAL.
    CLEAR KNA1-NAME1.
    SELECT SINGLE MAKTX INTO MAKT-MAKTX
    FROM MAKT
    WHERE MATNR EQ VBAP-MATNR
    AND SPRAS EQ SY-LANGU.
    LS_LINE-KEY = TEXT-T03.
    CONCATENATE VBAP-MATNR MAKT-MAKTX INTO LS_LINE-INFO
    SEPARATED BY SPACE.
    APPEND LS_LINE TO LT_TOP_OF_PAGE.
    ENDIF.
    * Numero de Pedido
    IF NOT VBAK-VBELN IS INITIAL.
    LS_LINE-KEY = TEXT-T04.
    LS_LINE-INFO = VBAK-VBELN.
    APPEND LS_LINE TO LT_TOP_OF_PAGE.
    ENDIF.
    * Fecha/Hora/Usuario
    LS_LINE-KEY = TEXT-T01.
    WRITE SY-UNAME TO L_TEXTO.
    CONCATENATE '/' L_TEXTO INTO LS_LINE-INFO.
    WRITE SY-UZEIT TO L_TEXTO.
    CONCATENATE '/' L_TEXTO LS_LINE-INFO INTO LS_LINE-INFO.
    WRITE SY-DATUM TO L_TEXTO.
    CONCATENATE L_TEXTO LS_LINE-INFO INTO LS_LINE-INFO.
    APPEND LS_LINE TO LT_TOP_OF_PAGE.
    ENDFORM.

    *---------------------------------------------------------------------*
    * FORM TOP_OF_PAGE *
    *---------------------------------------------------------------------*
    FORM TOP_OF_PAGE.
    *
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    I_LOGO = 'LOGOQS1'
    IT_LIST_COMMENTARY = GT_LHEADER.
    ENDFORM.
    *&---------------------------------------------------------------------*
    *& Form EVENTTAB_BUILD
    *&---------------------------------------------------------------------*
    FORM EVENTTAB_BUILD USING LT_EVENTS TYPE SLIS_T_EVENT.
    DATA: LS_EVENT TYPE SLIS_ALV_EVENT.
    *
    REFRESH LT_EVENTS.
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    I_LIST_TYPE = 0
    IMPORTING
    ET_EVENTS = LT_EVENTS.
    READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_TOP_OF_PAGE
    INTO LS_EVENT.
    IF SY-SUBRC EQ 0.
    MOVE C_TOP_OF_PAGE TO LS_EVENT-FORM.
    APPEND LS_EVENT TO LT_EVENTS.
    ENDIF.
    READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_USER_COMMAND
    INTO LS_EVENT.
    IF SY-SUBRC EQ 0.
    MOVE C_USER_COMMAND TO LS_EVENT-FORM.
    APPEND LS_EVENT TO LT_EVENTS.
    ENDIF.
    READ TABLE LT_EVENTS WITH KEY NAME = SLIS_EV_PF_STATUS_SET
    INTO LS_EVENT.
    IF SY-SUBRC EQ 0.
    MOVE C_PF_STATUS_SET TO LS_EVENT-FORM.
    APPEND LS_EVENT TO LT_EVENTS.
    ENDIF.
    ENDFORM.

    Comentario

    • DavidXD_XD
      Moderator
      • ago
      • 1255

      #3
      Hola ... asi como coloca Ibecerra en el ejemplo, el problema es que puedes usar la funcion

      CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
      EXPORTING
      I_LOGO = 'LOGOQS1'
      IT_LIST_COMMENTARY = GT_LHEADER.

      Donde I_LOGO es opcional y puedes ver los logos que tienes disponibles en la transaccion OAER, y el otro campo es la tabla interna que contiene el titulo, ahora para eso existen los tipos H y S, H es para titulos de la cabecera y S es para textos normales el cual esta compuestos de 2 partes.

      gt_leader-typ = 'S'.
      gt_leader-key = 'Usuario'.
      gt_leader-info = 'BCUSER'.

      aparecera en tu ALV de esta forma:

      Usuario: BCUSER

      Espero sirva la info
      David Carballido Córdova

      Comentario

      • eduraes
        Junior Member
        • jul
        • 4

        #4
        Gracias a ambos por vuestra ayuda.
        Lo de usar el 'REUSE_ALV_COMMENTARY_WRITE' ya lo intenté usar pero el problema es que las líneas en blanco que quiero meter se me añaden al final de la cabecera, aumentando el espacio entre la última línea de la cabecera y el comienzo de la información del listado. La cuestión era saber si se podía introducir líneas en blanco entre línea y línea.
        Gracias de nuevo por su ayuda.

        Comentario

        • DavidXD_XD
          Moderator
          • ago
          • 1255

          #5
          Hola ... no lo he intentado , pero supongo q solo bastaria crear una linea en blanco dentro de la tabla interna q se mandara a la funcion, en este caso es gt_lheader ... aver si nos cuentas como t fue
          David Carballido Córdova

          Comentario

          • eduraes
            Junior Member
            • jul
            • 4

            #6
            DavidXD_XD,
            Lo de meter una linea en blanco entre dos de datos en la tabla que lleva la información que se le pasa a la función 'REUSE_ALV_COMMENTARY_WRITE' ya lo intenté, y como comenté anteriormente, y creo que es por usar la función 'REUSE_ALV_GRID_DISPLAY', se me eliminan las lineas en blanco que hay en medio de la información y se empiezan a añadir al final de la última línea del TOP-OF-PAGE del listado. Empiezo a pensar que es una cosa de la función 'REUSE_ALV_GRID_DISPLAY', ya que la 'REUSE_ALV_LIST_DISPLAY' si que deja los espacios, y que no se puede solucionar.

            Comentario

            Trabajando...