Agregar linea editable en ALV

Muy Buenas de nuevo, a continuación voy a explicar como podemos añadir una linea editable a un ALV OO.

En primer lugar, donde nos definimos la estructura del ALV, tendremos que añadir un campo de tipo  lvc_t_styl como se muestra a continuación.

TYPESBEGIN OF ty_catitem. “tipo para la tabla del alv 9002.


INCLUDE STRUCTURE zetabla.
TYPES: marcado TYPE c,
       style   TYPE lvc_t_styl.  “Este es el campo que tendreis que añadir
TYPESEND OF ty_catitem.

Luego, cuando definimos el catalogo pondremos el campo EDIT como ‘X’ (marcado), en mi caso he tenido que hacer este loop porque el catalogo lo cree con la función LVC_FIELDCATALOG_MERGE

* Ponemos como editables todas las celdas del catalogo

CLEAR le_catalogo.
LOOP AT gt_catalogo1 INTO le_catalogo.
le_catalogo-edit = c_marca.
MODIFY gt_catalogo1 FROM le_catalogo INDEX sy-tabix TRANSPORTING edit.
IF sy-subrc NE .
ENDIF.
CLEAR le_catalogo.
ENDLOOP.

Lo próximo que tendremos que hacer es poner como no editable todas las lineas, para hacer esto antes de la llamada al ALV haremos lo siguiente.

Recorremos la tabla del ALV y aquellos que el campo clave no este vacio le añadiremos al campo nuevo que hemos agregado a nuestra estructura el atributo disabled de la clase del ALV y que nos pone la linea como no editable

DATA: le_stylerow TYPE lvc_s_styl.

CLEAR ge_catitem.
LOOP AT gt_catitem INTO ge_catitem WHERE zzeactuacion NE space.
CLEAR le_stylerow.
IF ge_catitem-style IS INITIAL.

le_stylerow-style = cl_gui_alv_grid=>mc_style_disabled.
APPEND le_stylerow TO ge_catitem-style.
CLEAR le_stylerow.
MODIFY gt_catitem FROM ge_catitem TRANSPORTING style.
IF sy-subrc NE .
ENDIF.

ENDIF.
CLEAR ge_catitem.
ENDLOOP.

Después mostraremos el ALV, para añadir la nueva linea editable solo sera necesario añadir el siguiente código en el sy-ucomm de botón añadir linea.

CLEAR ge_catitem.
APPEND ge_catitem TO gt_catitem.

* Este metodo te fija los cambios que hagas en el ALV
CALL METHOD go_alv->check_changed_data.
IF sy-subrc NE .
ENDIF.

* Este metodo sirve para refrescar el ALV
CALL METHOD pi_objalv->refresh_table_display
EXCEPTIONS
finished = 1
OTHERS = 2.
IF sy-subrc NE .
ENDIF.

Deja un comentario

Nombre *
Correo electrónico *
Web

Introduce el código * Time limit is exhausted. Please reload CAPTCHA.