Doble click en listados ALV

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Ignacio Luis Díaz Jiménez
    Junior Member
    • mar
    • 8

    #1

    Doble click en listados ALV

    ¿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
    Senior Member
    • oct
    • 671

    #2
    tienes hecho el ALV con las funciones reuse o lo has hecho con objetos?

    Comentario

    • davidsap
      Member
      • abr
      • 85

      #3
      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
      Un saludo

      Comentario

      • Gregoryg
        Senior Member
        • abr
        • 115

        #4
        doble Click en ALV

        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
        GregoryG

        Comentario

        • Ddscerezo
          Junior Member
          • feb
          • 17

          #5
          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.

          Comentario

          • Claudia Valdespino
            Member
            • mar
            • 54

            #6
            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.
            Saludos,

            Claudia V.

            Comentario

            • Ignacio Luis Díaz Jiménez
              Junior Member
              • mar
              • 8

              #7
              Muchas Gracias

              ¡Hola!

              Me has sido de mucha ayuda.

              Saludos.
              Ignacio

              Originalmente publicado por Claudia Valdespino
              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.

              Comentario

              • zehiter
                Member
                • oct
                • 92

                #8
                Gracias por el aporte

                Saludos

                Comentario

                • JoNhNaTaN
                  Member
                  • ene
                  • 70

                  #9
                  he hecho lo mismo pero no me resulta
                  Código:
                  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??
                  Editado por última vez por JoNhNaTaN; 18/06/2013, 00:14:55.

                  Comentario

                  Trabajando...