domingo, 6 de marzo de 2016

ALV Factory - Color en Celda, Fila o Columna

******************************************************************************** * INFORMACIÓN GENERAL - GENERAL INFORMATION ******************************************************************************** *^ Autor - Author : José Manrique Valderrama *^ Objetivo - Objetive : TEST - ALV FACTORY *^ Website : abapejemplos.blogspot.com ******************************************************************************** REPORT zjm_demo_alv_factory. TYPES: BEGIN OF gty_sflight. INCLUDE STRUCTURE sflight. * Columna para controlar el color por celda o fila TYPES: color TYPE lvc_t_scol, END OF gty_sflight. * Declaración de variables DATA: gtd_sflight TYPE STANDARD TABLE OF gty_sflight. DATA: gwa_sflight TYPE sflight, gwa_color TYPE lvc_s_colo. DATA: go_alv TYPE REF TO cl_salv_table, go_columns TYPE REF TO cl_salv_columns_table, go_column TYPE REF TO cl_salv_column_table. * Párametros de selección PARAMETERS: p_carrid TYPE sflight-carrid OBLIGATORY. FIELD-SYMBOLS: <fs_sflight> TYPE gty_sflight, <fs_color> TYPE lvc_s_scol. SELECT-OPTIONS: s_connid FOR gwa_sflight-connid, s_fldate FOR gwa_sflight-fldate. START-OF-SELECTION. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE gtd_sflight WHERE carrid EQ p_carrid AND connid IN s_connid AND fldate IN s_fldate. IF sy-subrc NE 0. "No se encontraron datos para esta ejecución MESSAGE s425(fr) DISPLAY LIKE 'E'. RETURN. ENDIF. LOOP AT gtd_sflight ASSIGNING <fs_sflight>. * Si el campo SEATSOCC es cero, la fila es amarilla IF <fs_sflight>-seatsocc EQ 0. APPEND INITIAL LINE TO <fs_sflight>-color ASSIGNING <fs_color>. * Color de fila: dejar en blanco <fs_color>-fname = space. <fs_color>-color-col = 3. "Amarillo <fs_color>-color-int = 1. <fs_color>-color-inv = 0. ENDIF. * Campo PAYMENTSUM: si es mayor que 100000, verde, sino rojo IF <fs_sflight>-paymentsum GT 100000. APPEND INITIAL LINE TO <fs_sflight>-color ASSIGNING <fs_color>. * Color de celda: llenar columna <fs_color>-fname = 'PAYMENTSUM'. <fs_color>-color-col = 5. "Verde <fs_color>-color-int = 0. <fs_color>-color-inv = 0. ELSE. APPEND INITIAL LINE TO <fs_sflight>-color ASSIGNING <fs_color>. * Color de celda: llenar columna <fs_color>-fname = 'PAYMENTSUM'. <fs_color>-color-col = 6. "Rojo <fs_color>-color-int = 0. <fs_color>-color-inv = 0. ENDIF. ENDLOOP. TRY. cl_salv_table=>factory( IMPORTING r_salv_table = go_alv CHANGING t_table = gtd_sflight ). CATCH cx_salv_msg. "Se ha producido un error en ALV MESSAGE s899(salv_exception) DISPLAY LIKE 'E'. RETURN. ENDTRY. * Se activan todas las funciones go_alv->get_functions( )->set_all( abap_true ). go_columns = go_alv->get_columns( ). * La columna COLOR contiene el color por celda o fila go_columns->set_color_column( 'COLOR' ). * Setea color para una columnar gwa_color-col = 5. "Verde gwa_color-int = 1. gwa_color-inv = 0. * Columna CURRENCY verde go_column ?= go_columns->get_column( 'CURRENCY' ). go_column->set_color( gwa_color ). go_alv->display( ).
Salida del ALV

3 comentarios:

  1. Gracias, me fue muy útil tu codigo

    ResponderEliminar
  2. Gracias por este código a dia 12 de Sptiembre de 2022 me ha servido y te lo agradezco mucho, saludos.

    ResponderEliminar
  3. Excelente ejemplo, muchas gracias.

    ResponderEliminar