PDA

Ver la Versión Completa : Doble click en listados ALV


Ignacio Luis Díaz Jiménez
27/03/07, 13:01:40
¿Qué tengo que hacer para controlar un doble click en el listado de una ALV y poder irme a una transacción determinada? Gracias

ballan
27/03/07, 14:14:54
tienes hecho el ALV con las funciones reuse o lo has hecho con objetos?

davidsap
27/03/07, 15:08:46
Si usas la función REUSE_ALV_GRID_DISPLAY hay uno de los campos del exporting que es I_CALLBACK_USER_COMMAND, aquí le indicas el nombre de la subrutina a la que tiene que ir cuando haces doble click. Dentro de ahí, ya controlas con un CASE lo que quieres hacer según el campo que se haya hecho click.

Un saludo

Gregoryg
27/03/07, 23:35:25
Hola

debes declarar una sub_rutina USER_COMMAND y despues debes detectar cuando ocurre el doble click

sino recuerdo mal el valor del SY-UCOMM es &IC1 cuando ocurre un doble click, lo puedes chequear

saludos

Ddscerezo
28/03/07, 11:57:15
No sabreis cual es el evento que se lanza cuando se pulsa 'enter'? el doble click, lo puedes capturar, desde tu status dando valor a la tecla de seleecion F2.

Claudia Valdespino
28/03/07, 19:58:10
Hola, si estás usando la función REUSE_ALV_LIST_DISPLAY debes crear un form USER_COMMAND y añadirlo a una tabla de eventos que luego será mostrada en la llamada a la función del ALV. Dentro del form haces un case cuando SY-UCOMM sea '&IC1' (doble click) y ahi haces tu CALL TRANSACTION xxx. Algo asi:

Data event type slis_alv_event.

event-name = slis_ev_user_command.
event-form = 'USER_COMMAND'.
append event to gt_events.

form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'. "Doble Click
read table orddyn index rs_selfield-tabindex.
if sy-subrc = 0.
set parameter id 'BLN' field orddyn-belnr.
set parameter id 'BUK' field orddyn-bukrs.
set parameter id 'GJR' field orddyn-gjahr.
call transaction 'FB03' and skip first screen.
endif.
endcase.
endform. "USER_COMMAND


call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
it_events = gt_events
tables
t_outtab = orddyn
exceptions
program_error = 1
others = 2.

Ignacio Luis Díaz Jiménez
29/03/07, 14:42:03
¡Hola!

Me has sido de mucha ayuda.

Saludos.
Ignacio

Hola, si estás usando la función REUSE_ALV_LIST_DISPLAY debes crear un form USER_COMMAND y añadirlo a una tabla de eventos que luego será mostrada en la llamada a la función del ALV. Dentro del form haces un case cuando SY-UCOMM sea '&IC1' (doble click) y ahi haces tu CALL TRANSACTION xxx. Algo asi:

Data event type slis_alv_event.

event-name = slis_ev_user_command.
event-form = 'USER_COMMAND'.
append event to gt_events.

form user_command using r_ucomm like sy-ucomm
rs_selfield type slis_selfield.
case r_ucomm.
when '&IC1'. "Doble Click
read table orddyn index rs_selfield-tabindex.
if sy-subrc = 0.
set parameter id 'BLN' field orddyn-belnr.
set parameter id 'BUK' field orddyn-bukrs.
set parameter id 'GJR' field orddyn-gjahr.
call transaction 'FB03' and skip first screen.
endif.
endcase.
endform. "USER_COMMAND


call function 'REUSE_ALV_LIST_DISPLAY'
exporting
i_callback_program = g_repid
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_sort = gt_sort[]
it_events = gt_events
tables
t_outtab = orddyn
exceptions
program_error = 1
others = 2.

zehiter
26/01/10, 21:42:45
Gracias por el aporte

Saludos

JoNhNaTaN
17/06/13, 23:52:42
he hecho lo mismo pero no me resulta

DATA: gt_events_1 TYPE slis_t_event.
PERFORM eventtab_build USING gt_events_1[].
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.

DATA: wa LIKE output_detail_item.
CASE r_ucomm.
WHEN '&IC1'.
"CHECK NOT rs_selfield-value IS INITIAL.
READ TABLE output_detail_item
INDEX rs_selfield-tabindex INTO wa.
IF rs_selfield-sel_tab_field CS 'BELNR'.
SET PARAMETER ID 'BUK' FIELD wa-bukrs.
SET PARAMETER ID 'BLN' FIELD output_detail_item-belnr.
SET PARAMETER ID 'GJR' FIELD sd_gjahr-low.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.
ENDCASE.
ENDFORM.

FORM eventtab_build USING
lt_events TYPE slis_t_event.

DATA: ls_event TYPE slis_alv_event.
**********************************************************************
ls_event-name = slis_ev_user_command.
ls_event-form = 'USER_COMMAND'.
append ls_event to 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 = 0.
MOVE gc_formname_top_of_page TO ls_event-form.
* MOdify lt_events from Ls_EVENT index sy-tabix.
APPEND ls_event TO lt_events.
* APPEND ls_event to LT_EVENTS index sy-tabix.
ENDIF.

READ TABLE lt_events WITH KEY name = slis_ev_end_of_list
INTO ls_event.
IF sy-subrc = 0.
MOVE gc_formname_top_of_page TO ls_event-form.
* MOdify lt_events from Ls_EVENT index sy-tabix.
APPEND ls_event TO lt_events.
APPEND ls_event to LT_EVENTS index sy-tabix.
ENDIF.

DEFINE trigger_events.
* Top of list
read table lt_events
with key name = &1
assigning <event>.

if ( sy-subrc = 0 ).
<event>-form = &2.
endif.
END-OF-DEFINITION.

trigger_events:
slis_ev_top_of_list gc_formname_top_of_list,
slis_ev_top_of_page gc_formname_top_of_page,
slis_ev_after_line_output gc_formname_after_line_output,
slis_ev_end_of_page gc_formname_end_of_page,
slis_ev_end_of_list gc_formname_end_of_list.
ENDFORM.
FORM call_alv_detail.

DATA: gt_event_exit TYPE slis_t_event_exit,
gw_event_exit LIKE LINE OF gt_event_exit.
gw_event_exit-ucomm = '&RNT'.
gw_event_exit-after = 'X'.
APPEND gw_event_exit TO gt_event_exit.
CLEAR gw_event_exit.
*END @FH210710

PERFORM alv_initialization.
PERFORM layout_build USING gs_layout_1.
PERFORM print_build USING gs_print.
g_variant_1-variant = s_vari.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = g_repid_1
i_callback_pf_status_set = 'SET_STATUS'
i_callback_user_command = 'user_command'
is_layout = gs_layout_1
it_fieldcat = gt_fieldcat_1[]
it_sort = it_sortcat
i_save = g_save_1
is_variant = g_variant_1
it_events = gt_events_1
it_event_exit = gt_event_exit
is_print = gs_print
TABLES
t_outtab = output_detail_item
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE e301.
ENDIF.
ENDFORM.


He puesto un break point en el form user_command y cuando doy doble clic en el alv list, no entra el evento al break point.

Algun consejo??