PDA

Ver la Versión Completa : Ayuda Alv Oo Urgente porfavor!!!!


miguel.esteban.martin
02/02/09, 14:56:14
Hola espero que me podais ayudar porqeu me estoy volviendo loco para hacer esto porque estoy mirando los ejempllos pero no me entero de nada.

Me gustarai si me pudierais poner el codigo para realizar esto.

1º Añadir botones de Nueva fila y Borrar fila al menu del alv.
2º Despues de añadir los botones me gustarai saber el codigo para realizar sus acciones.

Muchisisismas gracias me estoy volviendo loco para poder hacerlo muchas gracias.

DavidXD_XD
02/02/09, 15:03:06
Hola, yo lo hago asi:

*&---------------------------------------------------------------------*
*& Form status_600
*&---------------------------------------------------------------------*
* Instanciando el grid para el screen 600
*----------------------------------------------------------------------*
FORM status_600.
* Variables Locales
DATA: ls_stbl_det TYPE lvc_s_stbl.

IF g_container_600 IS INITIAL.
* Instanciamos el container principal
CREATE OBJECT g_container_600
EXPORTING
container_name = 'CONTAINER_600'.
* Separamos el container en título y grid
IF g_top_600 IS INITIAL.
CREATE OBJECT g_top_600
EXPORTING
style = 'ALV_GRID'.
ENDIF.
* Separamos en 2 filas el container principal
CREATE OBJECT g_splitter_600
EXPORTING
parent = g_container_600
rows = 2
columns = 1.
* Primer Splitter para el TOP OF PAGE
CALL METHOD g_splitter_600->get_container
EXPORTING
row = 1
column = 1
RECEIVING
container = g_parent_html_600.
* Segundo splitter para el grid
CALL METHOD g_splitter_600->get_container
EXPORTING
row = 2
column = 1
RECEIVING
container = g_parent_grid_600.
* Creando la instancia para el grid y enlazarla con el container
CREATE OBJECT g_grid_600
EXPORTING
i_appl_events = 'X'
i_parent = g_parent_grid_600.
* Creando el catálogo y definiendo layout
PERFORM build_fieldcat_600.
PERFORM build_layout.
PERFORM build_sort_600.
* Excluyendo botones
PERFORM exclude_button.
* Construyendo cabecera
PERFORM top_of_page_600.

CALL METHOD g_grid_600->set_table_for_first_display
EXPORTING
it_toolbar_excluding = gt_exclude
is_layout = gs_layout_600
CHANGING
it_outtab = t_detrac
it_fieldcatalog = ti_fieldcat_600
it_sort = ti_sort_600.
* Adicionando evento ENTER
CALL METHOD g_grid_600->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_enter.
* Evento que captura los cambios realizados
CALL METHOD g_grid_600->register_edit_event
EXPORTING
i_event_id = cl_gui_alv_grid=>mc_evt_modified.
* Instanciando el objeto que enlaza eventos y el grid
CREATE OBJECT g_event_receiver_600.
SET HANDLER g_event_receiver_600->handle_data_changed
FOR g_grid_600.
ELSE.
CLEAR ls_stbl_det.
ls_stbl_det-row = 'X'.
ls_stbl_det-col = 'X'.
CALL METHOD g_grid_600->refresh_table_display
EXPORTING
is_stable = ls_stbl_det.
ENDIF.

ENDFORM.

Dentro del perform exclude_button coloco los botones que no iran en el alv, ahi incluyo los botones de creacion de una nueva linea asi como tbm la de borrar una linea

*&---------------------------------------------------------------------*
*& Form exclude_button
*&---------------------------------------------------------------------*
* Excluyendo botones
*----------------------------------------------------------------------*
FORM exclude_button.

* Variables locales
DATA: ls_exclude TYPE ui_func.

REFRESH: gt_exclude.

ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_check.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO gt_exclude.
IF sy-dynnr NE 400 or sy-dynnr NE 500.
ls_exclude = cl_gui_alv_grid=>mc_fc_subtot.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sum.
APPEND ls_exclude TO gt_exclude.
ENDIF.
ls_exclude = cl_gui_alv_grid=>mc_fc_print.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_help.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
APPEND ls_exclude TO gt_exclude.

ENDFORM. " exclude_button

Entonces lo que tendrias q hacer es no excluir esos botones de tu ALV ...

miguel.esteban.martin
02/02/09, 15:41:28
muchas gracias por tu ayuda pero no me salen los botones.

supuestamente para uqe salga el de nueva fila en tu codigo deberia astericar
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.

no?
esuqe no estoy muy seguro, no estoy muy puesto en los alv Oo.

muchas gracias

DavidXD_XD
02/02/09, 15:52:50
Asi es ... comenta esos 2 que se encuentran en negrita, pero primero te recomiendo que comentes todos y la tabla interna quede vacia para que puedas visualizar todos los botones que contempla el ALV

miguel.esteban.martin
02/02/09, 16:05:03
Muchas gracias pero no me funciona mira te pongo mi codigo echale un vistazo profavor.

Perdona por las molestias enserio me estas ayudando mucho

DATA: gt_exclude TYPE ui_functions.
IF g_custom_container2 IS INITIAL.
g_repid2 = sy-repid.
CREATE OBJECT g_custom_container2
EXPORTING
container_name = 'MUESTRA_ALV2'.

CREATE OBJECT g_grid2
EXPORTING
i_parent = g_custom_container2.



*Catalogo de datos y opciones de layout.
PERFORM definir_alv2.
PERFORM layout_alv.
PERFORM exclude_button.

CALL METHOD g_grid2->set_table_for_first_display
EXPORTING
it_toolbar_excluding = gt_exclude
i_save = 'X'
i_default = 'X'
is_layout = gs_layout
CHANGING
it_outtab = i_pos_bulto[]
it_fieldcatalog = gt_fieldcat2[].

CALL METHOD g_grid2->set_toolbar_interactive.
ELSE.
CALL METHOD g_grid2->refresh_table_display.
ENDIF.


*---------------------------------------------------------------
FORM exclude_button .
* Variables locales
DATA: ls_exclude TYPE ui_func.

REFRESH: gt_exclude.

* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
* APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_check.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_append_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_cut.
APPEND ls_exclude TO gt_exclude.
* ls_exclude = cl_gui_alv_grid=>mc_fc_loc_delete_row.
* APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_move_row.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_paste_new_row.
APPEND ls_exclude TO gt_exclude.
IF sy-dynnr NE 400 OR sy-dynnr NE 500.
ls_exclude = cl_gui_alv_grid=>mc_fc_subtot.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_sum.
APPEND ls_exclude TO gt_exclude.
ENDIF.
ls_exclude = cl_gui_alv_grid=>mc_fc_print.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_graph.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_help.
APPEND ls_exclude TO gt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_detail.
APPEND ls_exclude TO gt_exclude.



ENDFORM.

DavidXD_XD
02/02/09, 16:14:01
Prueba comentando el parametro it_toolbar_excluding en el metodo set_table_for_first_display y ademas comentale porsiaca el evento

CALL METHOD g_grid2->set_toolbar_interactive.