Problema con ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • sosio
    Junior Member
    • sep
    • 6

    #1

    Problema con ALV

    Hola familia!

    Tengo un problemilla usando la funcion 'REUSE_ALV_GRID_DISPLAY'. El tema es que todo funciona correctamente, pero a la hora de imprimir o previsualizar, el ancho de las columnas se ajusta al mínimo, con lo que cliente se queja de que el listado ocupa menos del ancho del folio impreso . He intentado solucionarlo poniéndole un titulo de cada columna con el ancho que yo quiero que respete, pero la fuinción 'K_KKB_REPTEXT_OPTIMIZE' coge el modo corto del título (10 caracteres), y no sirve de nada. Al crear el ALV ya le he puesto el OUTPUTLEN pero pasa de el a la hora de imprimir.
    Alguna idea de como fijarle el ancho de columna? Se puede cambiar el mínimo del titulo de columna a más de 10 caracteres?? Eso sería una solución por ahora.

    Os paso como uso la función:

    FORM listado_grid TABLES itab_grid "Tabla con datos
    USING estructura_grid "Estructura a mostrar
    textogrid1
    textogrid2
    textogrid3
    textogrid4
    textogrid5
    textogrid6
    subr_user_command "Subrutina cuando se pinche
    variant.

    g_repid = sy-repid.
    * gs_layout-detail_popup = 'X'.

    g_save = 'A'.
    PERFORM eventtab_build USING gt_events[].
    PERFORM comment_build USING gt_list_top_of_page[]
    textogrid1
    textogrid2
    textogrid3
    textogrid4.
    PERFORM field_catalog_build TABLES it_fieldcat_lvc.
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
    * I_INTERFACE_CHECK = ' '
    * I_BYPASSING_BUFFER =
    i_buffer_active = ' '
    i_callback_program = g_repid
    i_callback_pf_status_set = g_status
    i_callback_user_command = subr_user_command
    * I_CALLBACK_TOP_OF_PAGE =
    * I_CALLBACK_HTML_TOP_OF_PAGE = ' '
    * I_CALLBACK_HTML_END_OF_LIST = ' '
    i_structure_name = estructura_grid
    * I_BACKGROUND_ID = ' '
    i_grid_title = textogrid5
    * I_GRID_SETTINGS =
    is_layout = layout2
    it_fieldcat = it_fieldcat_lvc
    * IT_EXCLUDING =
    it_special_groups = it_special_groups_lvc
    it_sort = it_sort_lvc
    * IT_FILTER =
    * IS_SEL_HIDE =
    * I_DEFAULT = 'X'
    i_save = g_save
    is_variant = variant
    it_events = gt_events[]
    * IT_EVENT_EXIT =
    * IS_PRINT =
    * IS_REPREP_ID =
    * I_SCREEN_START_COLUMN = 0
    * I_SCREEN_START_LINE = 0
    * I_SCREEN_END_COLUMN = 0
    * I_SCREEN_END_LINE = 0
    * IT_ALV_GRAPHICS =
    * IT_ADD_FIELDCAT =
    * IT_HYPERLINK =
    * I_HTML_HEIGHT_TOP =
    * I_HTML_HEIGHT_END =
    * IT_EXCEPT_QINFO =
    IMPORTING
    e_exit_caused_by_caller = g_exit_caused_by_caller
    es_exit_caused_by_user = gs_exit_caused_by_user
    TABLES
    t_outtab = itab_grid
    EXCEPTIONS
    program_error = 1
    OTHERS = 2
    .

    ENDFORM. "listado_grid

    *&---------------------------------------------------------------------*
    *& Form eventtab_build
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * -->P_GT_EVENTS[] text
    *----------------------------------------------------------------------*
    FORM eventtab_build USING rt_events TYPE slis_t_event.
    *"Registration of events to happen during list display
    DATA: ls_event TYPE slis_alv_event.
    *
    CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
    EXPORTING
    i_list_type = 0
    IMPORTING
    et_events = rt_events.
    READ TABLE rt_events WITH KEY name = slis_ev_top_of_page
    INTO ls_event.
    IF sy-subrc = 0.
    MOVE g_top_of_page TO ls_event-form.
    APPEND ls_event TO rt_events.
    ENDIF.
    READ TABLE rt_events WITH KEY name = slis_ev_subtotal_text
    INTO ls_event.
    IF sy-subrc = 0.
    MOVE g_subtotal_text TO ls_event-form.
    APPEND ls_event TO rt_events.
    ENDIF.

    DELETE rt_events WHERE name = slis_ev_top_of_page
    AND form = ''.

    ENDFORM. "eventtab_build

    *&---------------------------------------------------------------------*
    *& Form comment_build
    *&---------------------------------------------------------------------*
    * text
    *----------------------------------------------------------------------*
    * -->P_GT_LIST_TOP_OF_PAGE[] text
    *----------------------------------------------------------------------*
    FORM comment_build USING lt_top_of_page TYPE slis_t_listheader
    textogrid1
    textogrid2
    textogrid3
    textogrid4.

    DATA: ls_line TYPE slis_listheader.
    DATA: fecha(10),
    hora(5).
    *
    REFRESH lt_top_of_page.
    *
    CLEAR ls_line.
    IF textogrid1 IS NOT INITIAL.
    ls_line-typ = 'S'.
    MOVE textogrid1 TO ls_line-info.
    APPEND ls_line TO lt_top_of_page.
    CLEAR ls_line.
    ENDIF.
    *
    IF textogrid2 IS NOT INITIAL.
    ls_line-typ = 'S'.
    MOVE textogrid2 TO ls_line-info.
    APPEND ls_line TO lt_top_of_page.
    CLEAR ls_line.
    ENDIF.
    *
    IF textogrid3 IS NOT INITIAL.
    ls_line-typ = 'S'.
    MOVE textogrid3 TO ls_line-info.
    APPEND ls_line TO lt_top_of_page.
    CLEAR ls_line.
    ENDIF.
    *
    IF textogrid4 IS NOT INITIAL.
    ls_line-typ = 'S'.
    MOVE textogrid4 TO ls_line-info.
    APPEND ls_line TO lt_top_of_page.
    CLEAR ls_line.
    ENDIF.
    *
    ENDFORM. "comment_build

    *---------------------------------------------------------------------*
    * FORM TOP_OF_PAGE *
    *---------------------------------------------------------------------*
    * ........ *
    *---------------------------------------------------------------------*
    FORM top_of_page. "#EC CALLED
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
    EXPORTING
    it_list_commentary = gt_list_top_of_page.
    ENDFORM. "top_of_page



    *&---------------------------------------------------------------------*
    *& Form field_catalog_build
    *&---------------------------------------------------------------------*
    FORM field_catalog_build TABLES p_fieldcat TYPE slis_t_fieldcat_alv.

    CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
    I_STRUCTURE_NAME = 'ZTRANSF'

    CHANGING
    ct_fieldcat = p_fieldcat[].

    LOOP AT p_fieldcat.
    CASE p_fieldcat-fieldname.

    WHEN 'LIFNR_ACUM'.
    p_fieldcat-seltext_s = 'Proveedor'.
    p_fieldcat-seltext_m = 'Proveedor'.
    p_fieldcat-seltext_l = 'Proveedor'.
    WHEN 'STCD1'.
    p_fieldcat-seltext_s = 'NºId.Fis.1'.
    p_fieldcat-seltext_m = 'Nº Id. Fiscal 1'.
    p_fieldcat-seltext_l = 'Nº Id. Fiscal 1'.
    p_fieldcat-outputlen = 30.


    WHEN 'CCC'.
    p_fieldcat-seltext_s = 'C/C Proveedor'.
    p_fieldcat-seltext_m = 'C/C Proveedor'.
    p_fieldcat-seltext_l = 'C/C Proveedor'.
    p_fieldcat-outputlen = 30.

    WHEN 'NAME1'.
    p_fieldcat-seltext_s = 'Proveedor'.
    p_fieldcat-seltext_m = 'Proveedor'.
    p_fieldcat-seltext_l = 'Proveedor'.
    p_fieldcat-outputlen = 40.

    WHEN 'XBLNR'.
    p_fieldcat-seltext_s = 'Nº Fra.'.
    p_fieldcat-seltext_m = 'Nº Fra.'.
    p_fieldcat-seltext_l = 'Nº Fra.'.
    p_fieldcat-reptext_ddic = 'Nº Fra.'.
    p_fieldcat-outputlen = 20.

    WHEN 'LIFNR'.
    p_fieldcat-seltext_s = 'Proveedor'.
    p_fieldcat-seltext_m = 'Proveedor'.
    p_fieldcat-seltext_l = 'Proveedor'.
    WHEN 'WRBTR'.
    p_fieldcat-seltext_s = 'Importe'.
    p_fieldcat-seltext_m = 'Importe'.
    p_fieldcat-seltext_l = 'Importe'.
    p_fieldcat-outputlen = 13.

    WHEN 'WAERS'.
    p_fieldcat-seltext_s = 'Moneda'.
    p_fieldcat-seltext_m = 'Moneda'.
    p_fieldcat-seltext_l = 'Moneda'.
    p_fieldcat-outputlen = 6.

    WHEN 'GSBER'.
    p_fieldcat-seltext_s = 'Hotel'.
    p_fieldcat-seltext_m = 'Hotel'.
    p_fieldcat-seltext_l = 'Hotel'.
    p_fieldcat-outputlen = 40.


    ENDCASE.

    MODIFY p_fieldcat.

    ENDLOOP.

    ENDFORM. "field_catalog_build


    Muchas gracias!!!!
  • ongo
    Member
    • ago
    • 45

    #2
    Hola buenas.

    A mi me pasaba lo mismo. Yo lo solucioné de la siguiente manera:

    Al rellenar el FIELDCAT añadí lo siguiente a cada campo que quería que me sacase en el ALV:

    Entre las comillas va el texto que quieres meter

    GT_filedcat-seltext_l = ' '
    GT_filedcat-seltext_m = ' '
    GT_filedcat-seltext_s = ' '
    GT_filedcat-reptext_ddcic = ' '
    GT_filedcat-ddictxt = 'M'

    Después en el form donde pones el código para visualizar la ALV puse lo siguiente:

    gs_layout-colwidth_optimize = 'X'

    y luego haces la call function

    Espero que te sirva

    Un saludo

    Comentario

    Trabajando...