" Fala Abapers, hoje vou mostra uma coisa que é solicitado bastante
" em relatória pelo mundo afora que é colocar certas celulas do ALV
" de cor diferente conforme alguma condição do Funcional, vejam abaixo
" como o código é simples, vocês só precisam entender um pouco do
" conceito do ALV, então ..... vamos lah segue código todo comentado.
REPORT z_alv_color.
" Conjunto de tipos
TYPE-POOLS: slis.
" Tipos
TYPES :
BEGIN OF ty_sflight.
INCLUDE TYPE sflight.
TYPES:
color TYPE lvc_t_scol,
END OF ty_sflight.
" Estruturas e tabelas internas
DATA : it_sflight TYPE TABLE OF ty_sflight,
st_sflight TYPE ty_sflight.
" Estruturas e tabelas internas (ALV)
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
st_layout TYPE slis_layout_alv.
" Inicio
START-OF-SELECTION.
" Faz Select na tabela SFLIGHT
PERFORM : f_select,
" Trata os dados do Select e alimenta campo COLOR da tabela.
" É aqui que tá o pulo do gato.
f_trata_dados,
" Cria alv.
f_alv.
END-OF-SELECTION.
*&---------------------------------------------------------------------*
*& Form F_SELECT
*&---------------------------------------------------------------------*
FORM f_select .
SELECT *
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE it_sflight
WHERE carrid = 'AA'.
ENDFORM. " F_SELECT
*&---------------------------------------------------------------------*
*& Form F_TRATA_DADOS
*&---------------------------------------------------------------------*
FORM f_trata_dados .
" Criação de três variaveis locais para auxilio no preenchimento da
" tabela que irá dar informações para que o campos tenha cor diferente
DATA:
col TYPE lvc_s_scol,
coltab TYPE lvc_t_scol,
color TYPE lvc_s_colo.
" 'Color' é a variavel tipo estrutura que recebe as 3 informações abaixo
" essa estrutura é um campo da variável 'Coltab' que é uma tabela.
" Fiz um desenho dessa relação vejam abaixo.
"----Relacionamento de dados (tabela de cores)-----------------------------Início"
" Categoria de tabela | Estrutura | Campos | Tipo Componente
" LVC_T_SCOL -----> LVC_S_SCOL ---> FNAME -----> LVC_FNAME
" NOKEYCOL ---> LVC_NOKEYC Campos estruc
" COLOR ----->(LVC_S_COLO)------> COL
" |----------> INT
" |----------> INV
"----Relacionamento de dados (tabela de cores)--------------------------------Fim"
BREAK-POINT.
" Descrição da quer.
color-col = '3'.
color-int = '0'.
color-inv = '0'.
" Aqui eu estarei dando o loop na tabela principal para tratar registro
" por registro com as condições que eu inventei pra que não seja pintada
" todas as celulas pra conseguir ver a diferença.
LOOP AT it_sflight INTO st_sflight.
" Se a soma total de pagamento for menor que 190.000.
IF st_sflight-paymentsum <= 190000.
" informa o campo que tem que ser colorido
col-fname = 'PAYMENTSUM'.
" informa a cor para a estrutura.
col-color = color.
" alimenta a tabela de cores dquele registro
APPEND col TO coltab.
" Limpa a estrutura
CLEAR col.
" Se seatsocc_b form menor ou igual a 20.
IF st_sflight-seatsocc_b <= 20.
" informa o campo.
col-fname = 'SEATSOCC_B'.
" informa a cor para a estrutura. (que por preguiça deixei a mesma cor)
col-color = color.
APPEND col TO coltab.
CLEAR col.
ENDIF.
" Alimenta o campo 'Color' da tabela principal
st_sflight-color = coltab.
ENDIF.
" Atualiza os dados da tabela principal
MODIFY it_sflight FROM st_sflight.
ENDLOOP.
ENDFORM. " F_TRATA_DADOS
*&---------------------------------------------------------------------*
*& Form F_ALV
*&---------------------------------------------------------------------*
FORM f_alv .
" Cria Catalogo dos campos
PERFORM : f_fieldcat,
" Alimenta estrutura com informações do Layout do ALV
f_layout.
" Função que executa o ALV.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
is_layout = st_layout
it_fieldcat = it_fieldcat
TABLES
t_outtab = it_sflight
EXCEPTIONS
program_error = 1.
ENDFORM. " F_ALV
*&---------------------------------------------------------------------*
*& Form F_FIELDCAT
*&---------------------------------------------------------------------*
FORM f_fieldcat .
" Função para alimentar com as informações dos campos da tabela.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_structure_name = 'SFLIGHT'
CHANGING
ct_fieldcat = it_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2.
ENDFORM. " F_FIELDCAT
*&---------------------------------------------------------------------*
*& Form F_LAYOUT
*&---------------------------------------------------------------------*
form F_LAYOUT .
st_layout-zebra = 'X'.
st_layout-colwidth_optimize = 'X'.
" Isso aqui eh muito importante pois aqui que você informa qual campo está
" informando a cor.
st_layout-coltab_fieldname = 'COLOR'.
endform. " F_LAYOUT