PDA

Ver la Versión Completa : Problema con ALV


sosio
07/11/07, 08:03:44
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 :confused: . 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
15/11/07, 11:22:55
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