Alv Editable

Embed Size (px)

Citation preview

*&---------------------------------------------**& Report ZZZGEPE*&---------------------------------------------*REPORT zzzgepe.

************************************************* C L A S E************************************************CLASS lcl_event_receiver DEFINITION DEFERRED.

************************************************* T A B L A S************************************************TABLES: bkpf.

************************************************* T I P O S************************************************TYPE-POOLS icon.

TYPES: BEGIN OF ty_bkpf,bukrs TYPE bkpf-bukrs,belnr TYPE bkpf-belnr,gjahr TYPE bkpf-gjahr,blart TYPE bkpf-blart,bldat TYPE bkpf-bldat,budat TYPE bkpf-budat,monat TYPE bkpf-monat,cpudt TYPE bkpf-cpudt,usnam TYPE bkpf-usnam,tcode TYPE bkpf-tcode,waers TYPE bkpf-waers,END OF ty_bkpf.

************************************************* V A R I A B L E S G L O B A L E S************************************************DATA: it_bkpf TYPE TABLE OF ty_bkpf,wa_bkpf TYPE ty_bkpf,

g_custom_container TYPE REF TO cl_gui_custom_container,gt_fieldcatalog TYPE lvc_t_fcat,gs_fcat TYPE lvc_s_fcat,gs_layout TYPE lvc_s_layo,g_repid LIKE sy-repid,

grid TYPE REF TO cl_gui_alv_grid,event_receiver TYPE REF TO lcl_event_receiver.

************************************************* D E F I N I C I O N D E C L A S E S************************************************CLASS lcl_event_receiver DEFINITION.PUBLIC SECTION.

METHODS:handle_double_clickFOR EVENT double_click OF cl_gui_alv_gridIMPORTING e_row e_column .

METHODS:handle_data_changedFOR EVENT data_changed OF cl_gui_alv_gridIMPORTING er_data_changed.

METHODS:handle_data_changed_finishedFOR EVENT data_changed_finished OF cl_gui_alv_gridIMPORTING e_modified et_good_cells.

METHODS:handle_before_user_commandFOR EVENT before_user_command OF cl_gui_alv_gridIMPORTING e_ucomm.

PRIVATE SECTION.

ENDCLASS. "LCL_EVENT_RECEIVER DEFINITION

************************************************* I M P L E M E N T A C I O N D E C L A S E S************************************************CLASS lcl_event_receiver IMPLEMENTATION.

METHOD handle_double_click.PERFORM handle_double_click USING e_row e_column.ENDMETHOD. "HANDLE_DOUBLE_CLICK

METHOD handle_data_changed.PERFORM handle_data_changed USING er_data_changed.ENDMETHOD. "HANDLE_DATA_CHANGED

METHOD handle_data_changed_finished.PERFORM handle_data_changed_finished USING e_modified et_good_cells.ENDMETHOD. "HANDLE_DATA_CHANGED_FINISHED

METHOD handle_before_user_command.PERFORM handle_before_user_command USING e_ucomm.ENDMETHOD. "HANDLE_BEFORE_USER_COMMAND

ENDCLASS. "lcl_event_receiver IMPLEMENTATION

************************************************* P A R A M E T R O S D E S E L E C C I O N ************************************************SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME TITLE text-001.

PARAMETERS: p_bukrs TYPE bkpf-bukrs.SELECT-OPTIONS: so_belnr FOR bkpf-belnr.PARAMETERS: p_gjahr TYPE bkpf-gjahr.SELECT-OPTIONS: so_blart FOR bkpf-blart,so_bldat FOR bkpf-bldat.SELECTION-SCREEN END OF BLOCK 001.

************************************************* START OF SELECTION************************************************START-OF-SELECTION.

CALL SCREEN '0100'.

*----------------------------------------------** MODULE buscar_datos OUTPUT*----------------------------------------------*MODULE buscar_datos OUTPUT.

PERFORM buscar_datos.

ENDMODULE. " buscar_datos OUTPUT*----------------------------------------------**& Module mostrar_alv OUTPUT*----------------------------------------------*MODULE mostrar_alv OUTPUT.

* se obtiene una instancia del objeto gridIF g_custom_container IS INITIAL.

PERFORM cargar_fieldcat.PERFORM inicializar_layout.

CREATE OBJECT g_custom_containerEXPORTINGcontainer_name = 'CCONTAINER'.

CREATE OBJECT gridEXPORTINGi_parent = g_custom_container.

* Permite seleccionar por filasgs_layout-sel_mode = 'D'.gs_layout-stylefname = 'CELLSTYLES'.

* Se inicializa la pantalla del reporteCALL METHOD grid->set_table_for_first_displayEXPORTINGis_layout = gs_layoutCHANGINGit_fieldcatalog = gt_fieldcatalogit_outtab = it_bkpf.

* Se crean los eventos, con sus respectivos manejadores.CREATE OBJECT event_receiver.SET HANDLER event_receiver->handle_double_click FOR grid.SET HANDLER event_receiver->handle_data_changed FOR grid.SET HANDLER event_receiver->handle_data_changed_finished FOR grid.SET HANDLER event_receiver->handle_before_user_command FOR grid.

CALL METHOD grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_enter.CALL METHOD grid->register_edit_eventEXPORTINGi_event_id = cl_gui_alv_grid=>mc_evt_modified.

CALL METHOD cl_gui_control=>set_focusEXPORTINGcontrol = grid.

ELSE.

CALL METHOD grid->refresh_table_displayEXCEPTIONSfinished = 1OTHERS = 2.

ENDIF.

ENDMODULE. " mostrar_alv OUTPUT*----------------------------------------------** Module status_0100 OUTPUT*----------------------------------------------*MODULE status_0100 OUTPUT.

SET PF-STATUS '0100'.

ENDMODULE. "status_0100 OUTPUT*----------------------------------------------** Form buscar_datos*----------------------------------------------*FORM buscar_datos .

SELECT bukrs belnr gjahr blart bldat budatmonat cpudt usnam tcode waersFROM bkpfINTO TABLE it_bkpfWHERE bukrs EQ p_bukrsAND belnr IN so_belnrAND gjahr EQ p_gjahrAND blart IN so_blartAND bldat IN so_bldat.

ENDFORM. " buscar_datos*----------------------------------------------** Form cargar_fieldcat*----------------------------------------------*FORM cargar_fieldcat .

* Sociedad.CLEAR gs_fcat.gs_fcat-fieldname = 'BUKRS'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Sociedad'.gs_fcat-edit = space.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Nmero de documento contable.CLEAR gs_fcat.gs_fcat-fieldname = 'BELNR'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Nro. Doc. Contable'.gs_fcat-edit = space.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Ejecicio.CLEAR gs_fcat.gs_fcat-fieldname = 'GJAHR'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Ejercicio'.gs_fcat-edit = space.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Clase de documento.CLEAR gs_fcat.gs_fcat-fieldname = 'BLART'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Clase Doc.'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* fecha del documento.CLEAR gs_fcat.gs_fcat-fieldname = 'BLDAT'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Fecha Doc.'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* fecha de contabilizacin del documento.CLEAR gs_fcat.gs_fcat-fieldname = 'BUDAT'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Fecha Cont. Doc.'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Mes contable.CLEAR gs_fcat.gs_fcat-fieldname = 'MONAT'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Mes contable'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Da del registro del documento contable.CLEAR gs_fcat.gs_fcat-fieldname = 'CPUDT'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Da Reg. Doc. Contable'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Nombre del usuario.CLEAR gs_fcat.gs_fcat-fieldname = 'USNAM'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Nombre del usuario'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Cdigo de Transaccin.CLEAR gs_fcat.gs_fcat-fieldname = 'TCODE'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Cdigo transaccin'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

* Clave de moneda.CLEAR gs_fcat.gs_fcat-fieldname = 'WAERS'.gs_fcat-tabname = 'IT_BKPF'.gs_fcat-coltext = 'Clave de moneda'.gs_fcat-edit = 'X'.gs_fcat-just = 'C'.gs_fcat-col_opt = 'X'.APPEND gs_fcat TO gt_fieldcatalog.

ENDFORM. " cargar_fieldcat*----------------------------------------------** Form inicializar_layout*----------------------------------------------*FORM inicializar_layout .

gs_layout-col_opt = 'X'.

ENDFORM. " inicializar_layout*----------------------------------------------** MODULE user_command_0100 INPUT*----------------------------------------------*MODULE user_command_0100 INPUT.

CASE sy-ucomm.WHEN 'BACK' OR 'RETURN' OR 'CANCEL'.LEAVE PROGRAM.

ENDCASE.

ENDMODULE. "user_command_0100 INPUT*----------------------------------------------** Form handle_double_click*----------------------------------------------*FORM handle_double_click USING p_e_rowp_e_column.

ENDFORM. " HANDLE_DOUBLE_CLICK*----------------------------------------------** Form HANDLE_DATA_CHANGED*----------------------------------------------*FORM handle_data_changed USING p_er_data_changed.PERFORM validar_entrada USING p_er_data_changed.ENDFORM. " HANDLE_DATA_CHANGED*----------------------------------------------**& Form HANDLE_BEFORE_USER_COMMAND*----------------------------------------------*FORM handle_before_user_command USING p_e_ucomm.

ENDFORM. " HANDLE_BEFORE_USER_COMMAND*----------------------------------------------**& Form HANDLE_DATA_CHANGED_FINISHED*----------------------------------------------*FORM handle_data_changed_finished USING p_e_modifiedp_et_good_cells.

ENDFORM. " HANDLE_DATA_CHANGED_FINISHED*----------------------------------------------**& Form validar_entrada*----------------------------------------------*FORM validar_entrada USING p_change TYPE REF TOcl_alv_changed_data_protocol.

* Ac se codifica toda la validacin de la entrada que se acaba* de cargar desde el AVL.ENDFORM. " VALIDAR_ENTRADA

NOTA1: Cuando creamos la pantalla, en la misma solamente se crea un CUSTOM CONTROL y se le pone el nombre CCONTAINER, ya que este nombre lo necesitamos para especificar en el cdigo del programa.

NOTA2: Fjense que cuando modificamos un campo de las columnas que tenemos para modificar (segn definicin de fieldcat) al darle enter nos lleva al mtodo handle_data_changed_finished.

Imagen de la dynpro.