ALV Editable

posted under by Antonio Lopez
Para poder editar un grid de ALV, directamente, este es el codigo a seguir:

***************************************************
*TOP
***************************************************
CLASS lcl_event_receiver DEFINITION DEFERRED.

DATA: T_INTERNA TYPE T_EXTERNA OCCURS 0 WITH HEADER LINE,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
GRID TYPE REF TO CL_GUI_ALV_GRID,
CAT_CAMPOS TYPE LVC_T_FCAT,
LCAT_CAMPOS LIKE LINE OF CAT_CAMPOS,
event_receiver TYPE REF TO lcl_event_receiver,
LAYOUT_GRID1 TYPE LVC_S_LAYO.

DATA: lt_sel_rows TYPE lvc_t_row,
ls_sel_row TYPE lvc_s_row,
ls_selected_line like lvc_s_row,
INDEX_1 TYPE N,
er_data_changed TYPE REF TO cl_alv_changed_data_protocol.

*************************************
CLASS lcl_event_receiver DEFINITION.

PUBLIC SECTION.
METHODS:
handle_double_click
FOR EVENT double_click OF CL_GUI_ALV_GRID
IMPORTING e_row e_column,


handle_data_changed
for event data_changed of cl_gui_alv_grid
importing er_data_changed.

ENDCLASS.
******************************************

******************************************
CLASS lcl_event_receiver IMPLEMENTATION.
METHOD handle_double_click.

ENDMETHOD. "handle_double_click

METHOD handle_data_changed.
DATA: lt_data_changed TYPE lvc_t_modi,
LS_DATA_CHANGED LIKE LINE OF LT_DATA_CHANGED.

APPEND LINES OF er_data_changed->mt_mod_cells TO
LT_DATA_CHANGED.

IF NOT LT_DATA_CHANGED IS INITIAL.
INDEX_1 = 1.
READ TABLE LT_DATA_CHANGED INDEX INDEX_1 INTO LS_DATA_CHANGED.

SELECT * FROM T_EXTERNA INTO TABLE T_INTERNA.
READ TABLE T_INTERNA INDEX LS_DATA_CHANGED-ROW_ID INTO T_EXTERNA.
REFRESH T_INTERNA.

CASE LS_DATA_CHANGED-FIELDNAME.
* AQUI SE COMPARA EN NOMBRE DE LOS CAMPOS DE LA TABLA,
* SUPONGAMOS QUE EXISTE UN CAMPO QUE SE LLAMA NOMBRE_C
WHEN 'NOMBRE_C'.
ZAV_T0001-NOMBRE_C = LS_DATA_CHANGED-VALUE.

ENDCASE.

*AQUI ACTUALIZAMOS LA TABLA DE LA BD !!!!!!
UPDATE T_EXTERNA FROM T_EXTERNA.

CLEAR T_EXTERNA.
REFRESH T_INTERNA.
REFRESH lt_data_changed.
CLEAR lt_data_changed.
CLEAR LS_DATA_CHANGED.
CLEAR er_data_changed.

ENDIF.

CALL METHOD cl_gui_cfw=>set_new_ok_code
EXPORTING
new_code = 'DC'.

ENDMETHOD. "handle_data_changed

ENDCLASS.



***************************************************
* OUT
***************************************************

module STATUS_0001 output.
SET PF-STATUS 'xxxx'.
SET TITLEBAR 'xxxx'.
PERFORM GRID_1.

endmodule.


***************************************************
* FORM
***************************************************

form GRID_1.

IF NOT ( G_CUSTOM_CONTAINER IS INITIAL ).
CALL METHOD G_CUSTOM_CONTAINER->free
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.


CALL METHOD GRID->free
EXCEPTIONS cntl_error = 1
cntl_system_error = 2.

CLEAR G_CUSTOM_CONTAINER.

ENDIF.

IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER
EXPORTING
CONTAINER_NAME = 'GRD_EDIT'.
CREATE OBJECT GRID
EXPORTING
I_PARENT = G_CUSTOM_CONTAINER.

PERFORM PREPARA_GRID.

ENDIF.

SELECT * FROM T_ERXSTERNA INTO TABLE T_INTERNA.
LAYOUT_GRID1-cwidth_opt = 'X'.
LAYOUT_GRID1-NO_TOOLBAR = 'X'. "nO MUESTRA LA BARRA DE HERR.

PERFORM LLENACAT.

CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING IS_LAYOUT = LAYOUT_GRID1
CHANGING IT_OUTTAB = T_INTERNA[]
IT_FIELDCATALOG = CAT_CAMPOS .

REFRESH T_INTERNA.

endform. " GRID_1

*&---------------------------------------------------------------------*
*& Form LLENACAT
*&---------------------------------------------------------------------*
* text
form LLENACAT.

CLEAR LCAT_CAMPOS.
LCAT_CAMPOS-fieldname = 'NOMBRE_C'.
LCAT_CAMPOS-ref_table = 'ZAV_T0001'.
LCAT_CAMPOS-coltext = 'NOMBRE'.
LCAT_CAMPOS-emphasize = 'C110'.
LCAT_CAMPOS-EDIT = 'X'.
APPEND LCAT_CAMPOS TO CAT_CAMPOS.

endform. " LLENACAT


*&---------------------------------------------------------------------*
*& Form PREPARA_GRID
*&---------------------------------------------------------------------*
* text
Form PREPARA_GRID.

CREATE OBJECT event_receiver.
SET HANDLER event_receiver->handle_double_click FOR GRID.
set handler event_receiver->handle_data_changed for GRID.
CREATE OBJECT er_data_changed.

CALL METHOD grid->set_ready_for_input
exporting
i_ready_for_input = 1.

CALL METHOD grid->register_edit_event
exporting
i_event_id = cl_gui_alv_grid=>mc_evt_enter.


endform. " PREPARA_GRID

0 comentarios

Make A Comment
Google
 
top