Manejo de ALV (2)

7

Click here to load reader

Transcript of Manejo de ALV (2)

Page 1: Manejo de ALV (2)

Para el manejo de ALV (definir lo siguiente previamente) :DATA: gt_fieldcat      TYPE slis_t_fieldcat_alv,      gs_fieldcat      TYPE slis_fieldcat_alv,      gd_layout        TYPE slis_layout_alv. “Nos permite definer colores por

“renglón y celda en la ALV

Para definir colores por celda:

Agregar un campo dentro de la estructura final de la siguiente forma:

         cell_color    TYPE lvc_t_scol,

Una vez que se tenga información en nuestra estructura final de salida podemos llamar a una función para definir el color en las celdas. Aquí indicamos el campo que definirá el color en cada celda específica y dependiendo de su valor asignar el color deseado. Se debe definir previamente un dato wa_cellcolor de tipo lvc_s_scol.

  FORM color_celdas. DATA: wa_cellcolor TYPE lvc_s_scol.   wa_cellcolor-fname     = 'DOCITM'. case lt_final-docitm. WHEN 10. wa_cellcolor-color-col = '1'. “Color 1 WHEN 20. wa_cellcolor-color-col = '3'. “Color 3 WHEN 30. wa_cellcolor-color-col = '5'. “Color 5 WHEN 40. wa_cellcolor-color-col = '7'. “Color 7 endcase. wa_cellcolor-color-int = '1'. “Color intensificado wa_cellcolor-color-inv = '0'. “Color de Texto o fondo append wa_cellcolor to lt_final-cell_color. ENDFORM.

Aquí en la estructura wa_cellcolor previamente definida del tipo lvc_s_scol, indicaremos en fname el campo/columna que llevará un color en celdas específicas, en color-col indicaremos el color que deseamos dependiendo de cierto valor, en color-int indicamos si es intensificado (1 – ON, 0 – Off), en color-inv indicamos si el color será inverso ( 1 – Color del texto, 0 – Color del fondo). Después de especificar cada valor hacemos APPEND de esa estructura hacia el campo que definimos tendría la información del color para las celdas, en este caso cell_color. Dentro de esta misma función podemos indicar de igual forma otros campos más en los que deseamos también asignar un valor en ciertas celdas siguiendo la misma sintaxis. Por ejemplo si valor_neto es menor que 0 entonces muestra el texto en color rojo.

IF lt_final-valor_neto < 0 wa_cellcolor-fname     = 'VALOR_NETO'.       wa_cellcolor-color-col = '6'.   wa_cellcolor-color-int = '0'.  wa_cellcolor-color-inv = '1'.  append wa_cellcolor to lt_final-cell_color.ENDIF.

Manejo de ALV 1

Page 2: Manejo de ALV (2)

Para definir colores por renglón:

Agregar un campo dentro de la estructura final de la siguiente forma:

         line_color(4) TYPE c,

Por cada renglón en la estructura final hay que llenar el campo line_color dependiendo del color que se desee y del valor que tenga un campo específico.

  concatenate 'C' lt_final-escenario '10' into lt_final-line_color.

Aquí por ejemplo dependiendo del valor en el campo escenario defino el color que llevará todo el renglón. El valor debe iniciar con la letra C seguido del color que será un valor entre 0 y 7, posteriormente se indica los valores 10 donde 1 establece si el color es intensificado (1 – On, 0 – Off) y el 0 establece si el color será inverso (1 – Color del texto, 0 – Color del fondo). Finalmente guardamos ese valor en el campo de la estructura final que utilizamos para el color en cada renglón, que en este caso es line_color.

Antes del llenado de la ALV debo indicar el nombre del campo que tendrá el parámetro del color para el renglón.

  FORM crea_layout gd_layout-no_input          = 'X'.   gd_layout-colwidth_optimize = 'X'.* Set layout field for row attributes(i.e. color)   gd_layout-info_fieldname    = 'LINE_COLOR'.   gd_layout-coltab_fieldname  = 'CELL_COLOR'. ENDFORM.

Aquí en info_fieldname indico el nombre del campo en la estructura final que especificará el color del renglón.

coltab_fieldname especifica el nombre del campo en la estructura final que definirá el color en celdas específicas.

Especificar los valores de los campos en la ALV y hacer el llamado a la función REUSE_ALV_GRID_DISPLAY

  gs_fieldcat-fieldname    = 'DOCITM'.*  gs_fieldcat-reptext_ddic = text-001.  gs_fieldcat-seltext_m  = 'POSNR'.  gs_fieldcat-tabname    = 'LT_FINAL'.  gs_fieldcat-outputlen    = 10.  APPEND gs_fieldcat TO gt_fieldcat......

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    EXPORTING      i_callback_program =  sy-repid      it_fieldcat        = gt_fieldcat[]      is_layout          = gd_layout      i_save             = 'A'    TABLES      t_outtab           = LT_FINAL.

Manejo de ALV 2

Page 3: Manejo de ALV (2)

El parámetro it_fieldcat especifica la tabla que tiene los campos que se mostrarán en la ALV.

El parámetro is_layout especifica la estructura donde se definen los campos de nuestra estructura final que tendrán la información para el color por renglón y para el color en celdas (info_fieldname y coltab_fieldname respectivamente).

El parámetro i_save permite que en la ALV de salida muestre 2 botones adicionales donde el usuario tendrá la posibilidad de guardar el layout y llamar un layout previamente guardado. Puede tener los sig. Valores

U Solamente layouts específicos del usuario pueden ser guardadosX Solamente layouts globales pueden ser guardadosA Tanto layouts globales como específicos del usuario pueden ser guardadosSpace Los layouts no pueden ser guardados

El parámetro t_outtab indicará la tabla/estructura final que tendrá la información que se mostrará en la ALV. Los campos o columnas que se mostrarán son los especificados en la tabla it_fieldcat.

Para mostrar otra ALV dando doble click en un renglón específico.

Si deseamos que al dar doble click en un renglón específico en la ALV nos muestre otra ALV con información relacionada al registro que se seleccionó debemos hacer lo siguiente:

Después del llenado de los campos que tendrá la ALV (tabla gt_fieldcat) haremos el llamado a la función REUSE_ALV_GRID_DISPLAY de la siguiente forma:

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    EXPORTING      i_callback_program =  sy-repid      it_fieldcat        = gt_fieldcat[]      i_callback_user_command = 'DEFINE_ALV2'    TABLES      t_outtab           = LT_FINAL1.

El parámetro i_callback_user_command especificará la función que se llamará al dar doble click que en este caso es DEFINE_ALV2. La función DEFINE_ALV2 tendrá el siguiente código.

FORM DEFINE_ALV2 USING r_ucomm like sy-ucomm                               rs_selfield type slis_selfield.  CASE r_ucomm.    WHEN '&IC1'.     if rs_selfield-tabindex > 0 and        rs_selfield-sumindex le 0.        read table lt_final1 into ls_registro             index rs_selfield-tabindex.        perform crear_estructura_salida_tabla2.     endif.  ENDCASE.ENDFORM.

El parámetro r_ucomm es el que nos trae el código cuando se da doble click en un renglón específico de la ALV. Este código es &IC1 . Si se detecta que se dio doble click entonces hace la lectura de la

Manejo de ALV 3

Page 4: Manejo de ALV (2)

estructura/tabla utilizada en esa ALV para leer los datos correspondientes a ese registro, después llamamos a la función para crear la segunda ALV.

Aquí antes de crear la segunda ALV primero seleccionamos la información que deseamos y la pasamos a otra estructura/tabla que se utilizará en la segunda ALV.

FORM crear_estructura_salida_tabla2.  refresh lt_final2_alv.  LOOP AT lt_final2 where anln1 = ls_registro-anln1 and                          anln2 = ls_registro-anln2.    MOVE-CORRESPONDING lt_final2 TO lt_final2_alv.    APPEND lt_final2_alv.  ENDLOOP.

  refresh gt_fieldcat.

  CLEAR gs_fieldcat.  gs_fieldcat-fieldname    = 'BUKRS'.  gs_fieldcat-reptext_ddic = text-001.  gs_fieldcat-tabname    = 'LT_FINAL2_ALV'.  gs_fieldcat-outputlen    = 4.  APPEND gs_fieldcat TO gt_fieldcat.

  gs_fieldcat-fieldname    = 'ANLN1'.  gs_fieldcat-reptext_ddic = text-002.  gs_fieldcat-tabname    = 'LT_FINAL2_ALV'.  gs_fieldcat-outputlen    = 12.  APPEND gs_fieldcat TO gt_fieldcat.

….

  gs_fieldcat-fieldname    = 'VALOR_NETO'.  gs_fieldcat-reptext_ddic = text-018.  gs_fieldcat-tabname    = 'LT_FINAL2'.  gs_fieldcat-outputlen    = 13.  APPEND gs_fieldcat TO gt_fieldcat.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'    EXPORTING      i_callback_program = sy-repid      it_fieldcat        = gt_fieldcat[]      i_callback_user_command = 'DEFINE_ALV3'    TABLES      t_outtab           = LT_FINAL2_ALV.ENDOFMR.                    " crear_estructura_salida_tabla2

Si deseamos mostrar una tercera ALV entonces nuevamente utilizamos el parámetro i_callback_user_command, en caso contrario omitimos este parámetro. En este ejemplo hacemos el llamado a la función DEFINE_ALV3 que me permitirá crear una tercera estructura ALV de forma similar a la anterior.

Manejo de ALV 4

Page 5: Manejo de ALV (2)

COMO DAR COLORES EN UN ALV

En el Catalogo de campos has de añadir:

d_fieldcat_ln-emphasize = 'Cxyz'.

Donde C indica = 'color '.x indica = el numero de color debe ser del 1 al 9.

y indica = el grado de intenso que es el color: -->'0'=off --> '1'=on.z indica = inverso    -->'0'=off    -->'1'=on.

Ejemplo:d_fieldcat_ln-emphasize = 'C201'.

pone un color gris claro.

Manejo de ALV 5