PDA

Ver la Versión Completa : user command en ALB BLOCK


pikaste
14/04/10, 11:03:05
Hola, mi problema es el siguiente: tengo un programa que muestra dos listados ALV de la siguiente manera. Tengo un status con un botón para imprimir y que cuando le de al botón ejecute una subrutina programada. El caso es que no consigo que capture el pulsamiento del botón (siempre va al estándar, al programa SAPLKKBL).

A ver si algún entendido puede ayudarme.
Muchas gracias.

Les dejo el código a continuación:

PERFORM fotr_xx_init_events.
PERFORM fotr_layout_alv.
PERFORM fotr_xx_init_fieldcat_cajet.
PERFORM fotr_xx_alv_bloques TABLES tg_alv_cajet
tg_alv_cajetf
USING 'TG_ALV_CAJET'
'TG_ALV_CAJETF'.


Donde,


FORM fotr_xx_init_events.

* VISTA ACTUAL
CLEAR sg_events.
sg_events-name = slis_ev_top_of_list.
sg_events-form = 'FOTR_XX_TOP_OF_LIST'.
APPEND sg_events TO tg_events.

* VISTA FUTURA
CLEAR sg_events.
sg_events-name = slis_ev_top_of_list.
sg_events-form = 'FOTR_XX_TOP_OF_LIST1'.
APPEND sg_events TO tg_events1.

ENDFORM.


FORM fotr_layout_alv .

* Seteo de la Visualización
* VISTA ACTUAL
* sg_layout-zebra = 'X'. " Rayado de lineas
sg_layout-no_min_linesize = 060. " Tamaño líneas en la página.
sg_layout-min_linesize = sy-linsz. " Mínima long de la linea.
sg_layout-max_linesize = sy-linsz. " Máxima long de la linea.
sg_layout-window_titlebar = sy-title. " Titulo Ventana Principal.

* VISTA FUTURA
sg_layout1-no_min_linesize = 060. " Tamaño líneas en la página
sg_layout1-min_linesize = sy-linsz. " Mínima long de la linea.
sg_layout1-max_linesize = sy-linsz. " Máxima long de la linea.
sg_layout1-window_titlebar = sy-title. " Titulo Ventana Principal.
sg_layout1-info_fieldname = 'COLOR'. " Color

ENDFORM. " fotr_layout_alv



FORM fotr_xx_alv_bloques TABLES t_actual
t_futura
USING pe_actual TYPE any
pe_futura TYPE any.


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = vg_repid
i_callback_pf_status_set = 'STATUS_LISTADO'
i_callback_user_command = 'USER_COMMAND'.

* IMPRESION VISTA ACTUAL
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = tg_fieldcat[]
is_layout = sg_layout
i_tabname = pe_actual
it_events = tg_events[]
TABLES
t_outtab = t_actual.


* IMPRESION VISTA FUTURA
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
it_fieldcat = tg_fieldcat[]
is_layout = sg_layout1
i_tabname = pe_futura
it_events = tg_events1[]
TABLES
t_outtab = t_futura.


sg_print-reserve_lines = 2.


CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
EXPORTING
is_print = sg_print.



ENDFORM. "fotr_xx_alv_bloques


*&---------------------------------------------------------------------*
*& Form FOTR_XX_START_ALV
*&---------------------------------------------------------------------*
FORM status_listado USING pf_tab TYPE slis_t_extab.

SET PF-STATUS 'STATUS_LISTADO'.

ENDFORM. "set_pf_status

*&---------------------------------------------------------------------*
*& Form USER_COMMAND
*&---------------------------------------------------------------------*
FORM user_command USING p_ucomm LIKE sy-ucomm
p_selfield TYPE slis_selfield.

* Evaluamos el botón pulsado
CASE p_ucomm.
WHEN 'PRINT'.

ENDCASE.
ENDFORM. "user_command

ppchico
14/04/10, 12:11:37
No he usado nunca esos módulos de funciones para mostrar ALV... en principio, entiendo que el STATUS, lo estás mostrando, y asignando los posibles eventos del mismo al form de USER_COMMAND... aun así, es una opción probar a asignar el evento del USER COMMAND al ALV... de manera que:
tg_events[]-NAME = slis_ev_user_command.
tg_events[]-NAME = 'USER_COMMAND'.
append tg_events.


Eso en el FORM fotr_xx_init_events que tienes declarado para inicializar los eventos.

Espero que te sirva... sino ya nos contarás como lo solucionaste.

Un Saludo,
Javier.