Function 'reuse_alv_popup_to_select'

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • acha3318
    Senior Member
    • abr
    • 182

    #1

    Function 'reuse_alv_popup_to_select'

    Hola a todos,

    Estoy usando la función CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT', para mostrar una lista de SOLPED, la pregunta es: ¿Como hago para que desde este ALV, haga click sobre un registro y me muestre la SOLPED y ejecute la ME53N?
    Alguién sabe algún truco sobre esta función ? Gracias por sus respuestas

    ACHA
  • ongo
    Member
    • ago
    • 45

    #2
    Buenas,

    Con esa función en el alv puedes poner que un campo sea de tipo check box utilizando la linea i_checkbox_fieldname. En tu tabla interna pones un char de 1 y en esa linea de la función pones el nombre del campo tipo char1.
    Si te fijas en tables t_outtab la función te devuelve la tabla que tu le digas. Los registros que hayas elegido en el pop up tendran una X en el campo de tipo char1. Luego puedes hacer un loop a esta tabla donde el campo ese tenga la X y ejecutar el programa o transacción ke necesites.

    Espero haberte ayudado en algo.

    Un saludo,

    Ongo

    Comentario

    • acha3318
      Senior Member
      • abr
      • 182

      #3
      Gracias por responder, pero te cuento, eso que me dices ya lo tengo hecho para mostrar una lista de SOLPED, esa lista es para rechazarlas y la "X" en el campo es para identificar las que seran rechazadas, pero el usuario quiere ahi que sobre la lista, poder hacer doble click y entrar a revisar la SOLPED en la transacción ME53N. Se que con esta linea de la función i_callback_user_command = 'USER_COMMAND' se puede hacer pero no he logrado hacerla funcionar no se que tanto debo tener antes para que funcione

      CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
      EXPORTING
      i_title = 'Modos:'
      i_selection = ' '
      i_zebra = 'X'
      i_tabname = 'TI_MODOS'
      it_fieldcat = ti_cat1
      i_callback_program = l_repid
      i_callback_user_command = 'USER_COMMAND'
      IMPORTING
      es_selfield = l_selfield
      e_exit = l_exit
      TABLES
      t_outtab = ti_modos
      EXCEPTIONS
      program_error = 1
      OTHERS = 2.

      Les agradezco si alguién me puede ayudar...


      Originalmente publicado por ongo
      Buenas,

      Con esa función en el alv puedes poner que un campo sea de tipo check box utilizando la linea i_checkbox_fieldname. En tu tabla interna pones un char de 1 y en esa linea de la función pones el nombre del campo tipo char1.
      Si te fijas en tables t_outtab la función te devuelve la tabla que tu le digas. Los registros que hayas elegido en el pop up tendran una X en el campo de tipo char1. Luego puedes hacer un loop a esta tabla donde el campo ese tenga la X y ejecutar el programa o transacción ke necesites.

      Espero haberte ayudado en algo.

      Un saludo,

      Ongo

      Comentario

      • ongo
        Member
        • ago
        • 45

        #4
        Buenas,

        Yo para esas cosas utilizo la función POPUP_WITH_TABLE_DISPLAY. Aquí pinchas una linea y la función te devuelve la linea que has elegido. Después puedes hacer un read a tu tabvla injterna y el call a la transacción.

        A ver si esta vez si te vale

        Comentario

        • acha3318
          Senior Member
          • abr
          • 182

          #5
          Vale, voy a probar la función POPUP_WITH_TABLE_DISPLAY y te cuento como me fué.

          Gracias.

          Originalmente publicado por ongo
          Buenas,

          Yo para esas cosas utilizo la función POPUP_WITH_TABLE_DISPLAY. Aquí pinchas una linea y la función te devuelve la linea que has elegido. Después puedes hacer un read a tu tabvla injterna y el call a la transacción.

          A ver si esta vez si te vale

          Comentario

          • Jonathan Barrio Rodriguez
            Senior Member
            • oct
            • 199

            #6
            En cuanto al REUSE_ALV_POPUP_TO_SELECT, funcionará igual que la función de ALV?

            Podrías probar a verificar las líneas rojas...

            "controla que si selo pones en mayusculas el "user_command" a continuación tb, y que esté igual escrito

            FORM user_command USING r_ucomm rs_selfield TYPE slis_selfield.
            DATA:
            answer.
            DATA p_ref1 TYPE REF TO cl_gui_alv_grid.

            l_okcode = r_ucomm.
            CASE sy-ucomm. "ANTES R_UCOMM.
            *================================================= ===================*
            *
            WHEN 'RENOVAR'.
            *_________________________________________________ _______________*
            CLEAR: code.
            status = '9001'.
            * Función que actualiza la tabla interna con los valores modificados en el alv, en este caso el
            * valor del campo flag, el cual hemos modificado para indicarlo para borrado.
            CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
            IMPORTING
            e_grid = p_ref1.
            CALL METHOD p_ref1->check_changed_data.

            * RS_SELFIELD-IGNORE_MULTI = 0.
            *================================================= ===================*
            * tabla buffer para recargar el box seleccionado registros seleccionados.
            * si las ordenes del usuario son volver.
            REFRESH: tabla_alv_buffer. tabla_alv_buffer[] = tabla_alv[].
            *_________________________________________________ ___________________*

            No sé si esto te puede ayudar o es lo que pedías, por si sirve.
            Barrio Rodriguez, Jonathan.
            _____________________________________
            "No sigas a quien haya encontrado la verdad sino a quien la busque"

            Comentario

            • acha3318
              Senior Member
              • abr
              • 182

              #7
              Saludos a todos, muchas gracias a los abaperos que intentaron ayudarme, pero ya solucioné el caso y para todos los que estuvieron pendientes explico como se soluciona:

              CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
              EXPORTING
              i_title = 'RECHAZAR SOLICITUDES DE PEDIDOS'
              i_selection = ' '
              i_zebra = 'X'
              i_screen_start_column = 1
              i_screen_start_line = 1
              i_screen_end_column = 130
              i_screen_end_line = 20
              it_fieldcat = lt_fieldcat
              i_tabname = 'TI_SOLPEDS'
              i_checkbox_fieldname = 'CHECK'
              i_callback_program = l_repid
              i_callback_user_command = 'USER_COMMAND'
              IMPORTING
              es_selfield = l_selfield
              e_exit = l_exit
              TABLES
              t_outtab = ti_solpeds.

              Yo intentaba usar esta función para mostrar mis datos de SOLPED donde adicioné un campo para manejarlo como checkbox, y asi mas adelante evaluar si estaba con X o no. Pero además intentaba dar doble click sobre el numero de SOLPED para consultar sobre la ME53N, pero esta función no me proporciona la opción de manejar eventos sobre el ALV, osea que no sirve para mi propósito de doble click.

              La función para este propósito es:

              CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
              EXPORTING
              i_callback_program = l_repid
              is_layout = wa_layout
              it_fieldcat = lt_fieldcat
              i_default = 'X'
              i_save = 'A'
              it_events = ti_events
              TABLES
              t_outtab = ti_solpeds
              EXCEPTIONS
              program_error = 1
              OTHERS = 2.

              Esta función además de propórcionarme las mismas bondades de la anterior, me permite manejar eventos mediante el parametro (it_events), aqui traigo todos los eventos en especial el USER_COMMAND que son los eventos hechos por el usuario final, veamos como obtengo los eventos:

              CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
              EXPORTING
              i_list_type = l_type
              IMPORTING
              et_events = ti_events.

              * Leer evento 'TOP_OF_PAGE'
              READ TABLE ti_events WITH KEY name = slis_ev_top_of_page
              INTO wa_events.
              * Asignar Rutina FORM 'TOP_OF_PAGE' a evento
              IF sy-subrc = 0.
              MOVE slis_ev_top_of_page TO wa_events-form.
              MODIFY ti_events FROM wa_events INDEX sy-tabix.
              ENDIF.

              Ya teniendo en la tabla interna ti_events los eventos que deseo manejar construyo la rutina USER_COMMAND, para evaluar cuando se hace doble click asi:

              FORM user_command USING ucomm LIKE sy-ucomm
              sfields TYPE slis_selfield.

              DATA: l_objectname TYPE tstc-tcode.

              * Hace una copia de los registros antes de regresar
              ti_solpeds_bakup[] = ti_solpeds[]
              .
              * Rescatar el registro seleccionado.
              IF sfields-tabname EQ 'TI_SOLPEDS'.
              READ TABLE ti_solpeds INDEX sfields-tabindex.
              ENDIF.

              * Selección de opción.
              CASE ucomm.
              * DOUBLE CLICK.
              WHEN '&IC1' OR '&ICM'.
              * Evaluar valor de campo seleccionado.
              CHECK NOT sfields-value IS INITIAL.

              CASE sfields-fieldname.

              * ################################################## ######
              * ##### Solicitud de Pedido. #####
              * ################################################## ######
              WHEN 'BANFN'.
              MOVE sfields-value TO sy-lisel.
              SET PARAMETER ID 'BAN' FIELD sy-lisel. "BANFN Numero de Solicitud de Pedido
              CALL TRANSACTION 'ME53N' AND SKIP FIRST SCREEN.
              WHEN 'MATNR'.
              MOVE sfields-value TO sy-lisel.
              SET PARAMETER ID 'MAT' FIELD sy-lisel. "Material
              CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.

              WHEN OTHERS.
              * DO NOTHING !!!
              ENDCASE.

              WHEN OTHERS.
              * DO NOTHING !!!
              ENDCASE.

              IF sfields-tabname EQ 'TI_SOLPEDS'.
              * Hago el refresh en el ALV.
              ti_solpeds[] = ti_solpeds_bakup[].
              * PERFORM seleccionar_datos.
              sfields-refresh = 'X'.
              ENDIF.

              ENDFORM. "user_command

              Espero que estos datos les sirva a alguien mas que desea hacer algo parecido

              Gracias,

              ACHA

              Comentario

              Trabajando...