#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 |
#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 |
#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... |
#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 |
#5
|
|||
|
|||
Vale, voy a probar la función POPUP_WITH_TABLE_DISPLAY y te cuento como me fué.
Gracias. |
#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"
|
#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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|