PDA

Ver la Versión Completa : Insertar botón en la barra de herramientas del ALV


jplozano
24/02/07, 20:31:30
Hola a todos:

Tengo preparado un ALV y necesito insetar un botón en la barra de herramientas mediante código, he visto algún ejemplo pero con programación orientada a objetos pero yo tengo un ALV de tipo grid normalillo.

La idea poder insertar un botón y capturar cuando ese botón sea pulsado para llamar a un formulario, bueno cuando descubra como.

Saludos. :confused:

JAC
25/02/07, 21:26:48
Hola jplozano yo tengo el mismo problema que tú. Te comento lo que se hasta ahora a ver si nos podemos ayudar mutuamente.

Por lo visto cuanto tu llamas a la función alv grid. De la siguiente forma

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_BUFFER_ACTIVE = ' '
i_callback_program = repid
i_callback_top_of_page = 'TOP_OF_PAGE'
i_callback_pf_status_set = 'PF_STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
is_layout = s_layout
it_fieldcat = fieldcat
it_sort = tab_sort
i_save = 'A'
TABLES
t_outtab = it_list
EXCEPTIONS
program_error = 1
OTHERS = 2.

En donde pone i_callback_top_of_page lo que estas poniendo en realidad es una llamada a una perform por lo que tienes que tener en tú programa una form con la siguiente forma.

*---------------------------------------------------------------------*
* FORM pf_status_set *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
FORM pf_status_set USING gt_extab TYPE slis_t_extab.

SET TITLEBAR 'ALV' WITH sy-title.
SET PF-STATUS 'ALV'.

ENDFORM.

Desda aqui puedes pinchar en SET PF-STATUS 'ALV' y de esta forma crearas el status.

Por lo que es posible deducir que para tratar el evento que va a producir el status deberías tener un form que se llamase 'USER_COMMAND'. Es decir de esta forma.

*---------------------------------------------------------------------*
* FORM user_command *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> F_UCOMM *
* --> I_SELFIELD *
*---------------------------------------------------------------------*
FORM USER_COMMAND USING f_ucomm LIKE sy-ucomm
i_selfield TYPE slis_selfield.

READ TABLE it_list INDEX i_selfield-tabindex.
CASE f_ucomm.
WHEN 'SALIR'.
LEAVE PROGRAM.
ENDCASE.

ENDFORM.


Pero la verdad es que a mi me da un dump me dice lo siguiente

Errores tiempo ejecució
MOVE_TO_LIT_NOTALLOWED_NODATA
ocurrido el 25.02.2007 a 23:15:39

>> Dump breve ABAP no almacenado completamente (muy grande)


Assignment error: Overwriting a protected field.

Siento responderte con una pregunta pero la verdad es que no se por donde seguir a ver si la gente del foro nos echa una mano.

jplozano
26/02/07, 06:59:15
Hola JAC:

Yo está parte creo que la tengo más o menos resuelta. Por lo que he visto mí código es muy parecido al tuyo. Te lo adjunto por si tú ves alguna diferencia.

form user_command_01 using ucomm like sy-ucomm
selfield type slis_selfield.

READ TABLE ti_datos INDEX selfield-tabindex into wa_datos.
check sy-subrc = 0.

case ucomm.
* Doble Click
when '&IC1'.
CASE SELFIELD-FIELDNAME.
WHEN 'CHECKBOX'.
wa_datos-checkbox = 'X'.
modify ti_datos from wa_datos index sy-tabix.
ucomm = '&REFRESH'.
WHEN OTHERS.
ENDCASE.
endcase.
endform. "user_command_01

Lo unico que yo controlo si se punsa en una columna para activar un checkbox.

Saludos. Espero que te sirva.

JAC
26/02/07, 14:01:37
jplozano me puedes decir que le has puesto para rellenar el argumento
IT_EVENTS, es que creo que este es mi problema. Que es precisamente donde se rellena el evento a que form esta asociado.

Si me equivoco que alguién me corrija gracias.

jplozano
27/02/07, 13:41:16
Te pasó la llamada a la función entera, por si quieres compararla.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = g_repid
i_callback_user_command = 'USER_COMMAND_01'
* i_callback_pf_status_set = 'SET_PF_STATUS_01'
i_structure_name = 't_trabajo '
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
IT_SORT = GT_SORT[]
IT_EXCLUDING = GT_EXCLUDE[]
* I_DEFAULT = 'X'
I_SAVE = ' ' "Grabar Variante
IS_VARIANT = ls_vari
IT_EVENTS = GT_EVENTS[]
TABLES
T_OUTTAB = t_materiales
EXCEPTIONS
program_error = 1
OTHERS = 2.

Suerte.

Renzo_bravo
09/01/14, 21:04:39
1. Visualizar el programa SAPLSLVC_FULLSCREEN.
2. Desplegar Status GUI.
3. clic derecho sobre STANDARD_FULLSCREEN.
4. clic en copiar.
5. escoger el programa destino y colocar un nombre.
6. Editar nuestro programa Z y luego ingresar al status copiado. Modificar ó añadir el botón requerido.

Funciona!!!