Buenos dias.
He realizado reporte ABAP para el area de compras con ALV grid OO que esta funcionando muy bien, pero le he encontrado un problema cuando el usuario cambia de tamaño la ventana de sap (Maximiza, minimiza o ajusta a un tamaño deseado).
Cuando el usuario cambia el tamaño, el reporte vuelve a mostrar todas las columnas del reporte quedando repetidas.
Por ejemplo:
Las columnas originales del reporte son:
| Doc. Compras | Posicion | Importe |
Al cambiar el tamaño de la ventana, el alv queda mostrando los campos asi:
| Doc. Compras | Doc. Compras | Posicion | Posicion | Importe | Importe |
Si el usuario vuelve a cambiar el tamaño de la ventan, maximizarla por ejemplo, ya el ALV muestra los campos 3 veces repetidos y asi cada vez que cambio el tamaño de la pantalla, repite cada uno de los campos una vez mas.
Para evitar que el ALV recalcule los datos ya mostrados cuando cambio el tamaño de la pantalla he usado siempre el siguiente codigo que me ha funcionado muy bien:
Pensaba que con este codigo no deberia pasar tampoco lo de la duplicidad ed columnas pero al parecer para esto hace falta algo mas
Lo unico que he hecho de diferente en este reporte respecto a los demas (donde NO me pasa este problema) es que si el usuario da doble click sobre el numero del Doc Compra, abre automaticamente la transaccion ME23N y lo despliega. Es decir, es interactivo.
Para ello, a mi include con la que creo el ALV le agregue lo siguiente:
Espero me puedan ayudar
Gracias
He realizado reporte ABAP para el area de compras con ALV grid OO que esta funcionando muy bien, pero le he encontrado un problema cuando el usuario cambia de tamaño la ventana de sap (Maximiza, minimiza o ajusta a un tamaño deseado).
Cuando el usuario cambia el tamaño, el reporte vuelve a mostrar todas las columnas del reporte quedando repetidas.
Por ejemplo:
Las columnas originales del reporte son:
| Doc. Compras | Posicion | Importe |
Al cambiar el tamaño de la ventana, el alv queda mostrando los campos asi:
| Doc. Compras | Doc. Compras | Posicion | Posicion | Importe | Importe |
Si el usuario vuelve a cambiar el tamaño de la ventan, maximizarla por ejemplo, ya el ALV muestra los campos 3 veces repetidos y asi cada vez que cambio el tamaño de la pantalla, repite cada uno de los campos una vez mas.
Para evitar que el ALV recalcule los datos ya mostrados cuando cambio el tamaño de la pantalla he usado siempre el siguiente codigo que me ha funcionado muy bien:
Código:
DATA: gr_pantalla TYPE scrfname.
*En el PBO hago la condicion siguiente:
if gr_pantalla is INITIAL.
data: lr_pantalla type scrfname value 'ALV_GRID_100',
lr_disposicion type lvc_s_layo,
lr_catalogo type lvc_t_fcat,
lr_ordenacion type lvc_t_sort,
lv_titulo1(100) type c value 'REPORTE DE AHORRO DE COMPRADORES',
lv_titulo2(100) type c.
perform obtener_datos.
perform obtener_catalogo changing lr_catalogo.
perform obtener_disposicion CHANGING lr_disposicion.
perform obtener_reporte using lr_pantalla lr_disposicion lr_catalogo
lr_ordenacion ty_tabcon[] '50'
lv_titulo1 lv_titulo2.
ENDIF.
Lo unico que he hecho de diferente en este reporte respecto a los demas (donde NO me pasa este problema) es que si el usuario da doble click sobre el numero del Doc Compra, abre automaticamente la transaccion ME23N y lo despliega. Es decir, es interactivo.
Para ello, a mi include con la que creo el ALV le agregue lo siguiente:
Código:
METHODS handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column.
METHOD handle_double_click.
PERFORM double_click USING e_row e_column .
ENDMETHOD. "handle_double_click
*Y en el FRM va la funcion:
*--------------------------------------------------------------------*
* Definición DOUBLE CLICK
*--------------------------------------------------------------------*
FORM double_click USING p_row
p_column.
DATA: wa_tabcon LIKE LINE OF ty_tabcon.
READ TABLE ty_tabcon INTO wa_tabcon INDEX p_row.
CASE p_column.
WHEN 'EBELN'. " Orden de Compra
SET PARAMETER ID 'BES' FIELD wa_tabcon-ebeln.
call TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDCASE.
ENDIF.
ENDFORM.
Gracias
Comentario