quinta-feira, 19 de abril de 2012

Colorindo campos do ALV

  "  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
Comentários
0 Comentários

Nenhum comentário:

Postar um comentário