lunes, 9 de junio de 2014

Modificar un ALV de forma dinámica

En este post vamos a explicar como podemos modificar uns ALV de FM de manera dinámica, es decir, en tiempo de ejecución. Podemos modificar desde el numero de columnas que aparecen, la ordenacion, las caracteristicas del ALV, etc.

Lo vamos a hacer con un ejemplo de código que como mejor se entiende. En este caso lo que vamos a hacer es añadir nuevas columnas al informe, ademas completaremos los valores que tendrán estás columnas. La funcion que vamos a utilizar para realizar la modificación es REUSE_ALV_GRID_LAYOUT_INFO_SET.


**Modificamos la estructura de salida.
  PERFORM modificar_gt_alv.
  rs_selfield-refresh = 'X'.

*&---------------------------------------------------------------------*
*&      Form  modificar_gt_alv
*&---------------------------------------------------------------------*
*    Modificamos gt_alv
*----------------------------------------------------------------------*
FORM modificar_gt_alv.

  DATA i_field LIKE i_fieldcat WITH HEADER LINE.

  LOOP AT i_fieldcat INTO i_field.

    CASE i_field-fieldname.

      WHEN 'EFFECTIVITY'.
        i_field-no_out = space.
        MODIFY i_field INDEX sy-tabix TRANSPORTING no_out.

      WHEN 'GRUPO_F'.
        i_field-no_out = space.
        MODIFY i_field INDEX sy-tabix TRANSPORTING no_out.

      WHEN 'SUBMOD'.
        i_field-no_out = space.
        MODIFY i_field INDEX sy-tabix TRANSPORTING no_out.

      WHEN 'MSN'.
        i_field-no_out = space.
        MODIFY i_field INDEX sy-tabix TRANSPORTING no_out.

      WHEN 'PNR'.
        i_field-no_out = space.
        MODIFY i_field INDEX sy-tabix TRANSPORTING no_out.

      WHEN 'SN'.
        i_field-no_out = space.
        MODIFY i_field INDEX sy-tabix TRANSPORTING no_out.

    ENDCASE.

    APPEND i_field.

  ENDLOOP.

  CLEAR i_fieldcat.
  REFRESH i_fieldcat.

  LOOP AT i_field.

    APPEND i_field TO i_fieldcat. 

  ENDLOOP.

  LOOP AT i_gt_alv WHERE SEL = 'X'.

    READ TABLE gt_importar WITH KEY DOKNR = i_gt_alv-DOKNR_D.

    IF sy-subrc = 0.

      i_gt_alv-EFFECTIVITY_TYPE = gt_importar-efectividad.
      i_gt_alv-GRUPO_FLOTA = gt_importar-zzcgrupo_flotas.
      i_gt_alv-SUBMODELO = gt_importar-zzcsubmodelo.
      i_gt_alv-MSN = gt_importar-zzcmsn.

      MODIFY i_gt_alv INDEX sy-tabix
          TRANSPORTING EFFECTIVITY_TYPE
                       GRUPO_FLOTA
                       SUBMODELO
                       MSN.
    ENDIF.

  ENDLOOP. 

CALL FUNCTION 'REUSE_ALV_GRID_LAYOUT_INFO_SET'
  EXPORTING
*   IS_LAYOUT            =
    IT_FIELDCAT          = i_fieldcat
*   IT_SORT              =
*   IT_FILTER            =
*   IS_GRID_SCROLL       =
*   IS_PRINT             =
          .
ENDFORM.

No hay comentarios:

Publicar un comentario