Escolar Documentos
Profissional Documentos
Cultura Documentos
Com certeza na internet tem muito material explicando como utilizar essa técnica, mas eu particularmente
achei um pouco confuso e como trata-se de algo muito útil no mundo ABAP, eu resolvi mostrar um
exemplo o mais simples possível.
Mãos a obra!
Primeiro teremos que declarar uma variável do tipo lvc_t_scol (para trabalhar com a cor da célula) e outra
do tipo char de 8 caracteres (para exibir o semáforo).
Ex.:
cor TYPE lvc_t_scol.
semaforo TYPE c LENGTH 8.
Será preciso declarar também uma tabelinha do tipo: lvc_t_scol e uma work área do tipo: lvc_s_scol.
Ex.:
lt_coltab TYPE lvc_t_scol,
ls_col TYPE lvc_s_scol.
Agora é o seguinte, no momento em que você preenche a sua tabela de saída (aquela que você passará
para função do ALV), iremos preencher também a tabela lt_coltab com base em sua estrutura.
Utilizei uma condição no programa, para ficar mais fácil o compreendimento.
Informe qual o nome do campo que você pretende colorir (Lembrando que deve estar em maiúsculo)
Ex.: ls_col-fname = 'PASSNAME'
Informar qual a cor que deseja passar para a célula. As cores são representada por números, pesquise no
google mais afundo sobre todas as cores possível, aqui eu irei colorir apenas de vermelho e verde ;)
Para ficar claro, estou apendando estrutura de estrutura, por isso ficou enfileirada separadas por hífen,
saiba mais no curso da fox, clicando aqui.
Ex.: ls_col-color-col = '6'
Depois que você tiver apendado sua tabela lt_coltab, você irá passar toda sua estrutura para o campo
que você declarou referente a cor na tabela de saída.
Ex.: tb_saida-cor = lt_coltab[]
Nessa mesma condição, vamos aproveitar e preencher logo também o nosso semáforo.
Para isso você vai popular o campo referente ao semáforo, preenchendo sua tabela de saída com o
mesmo.
Os semáforos são tipo:
Vermelho - Char: '@S_TL_R@'
Amarelo - Char: '@S_TL_Y@'
Verde - Char: '@S_TL_G@'
Passe um desses valores para dentro da variável que você declarou na sua tabela de saída e pronto ;)
Ex: wa_saida-semaforo = '@S_TL_G@'.
Ex.: lv_layout-coltab_fieldname = 'COR'.
E para finalizar, lembre-se de passar a estrutura que você preencheu no layout para sua função que
chama o ALV.
REPORT YFOX_TREINAR01_156.
*----------------------------------------------------------------------*
* DECLARANDO ESTRUTURA PARA TABELA(S) INTERNA
*----------------------------------------------------------------------*
TYPES: BEGIN OF st_sbook.
INCLUDE TYPE sbook.
TYPES: cor TYPE lvc_t_scol.
TYPES: semaforo TYPE c LENGTH 8.
TYPES: END OF st_sbook.
*----------------------------------------------------------------------*
* DECLARANDO TABELA(S) E WORK AREA(S)
*----------------------------------------------------------------------*
DATA: tb_sbook TYPE TABLE OF st_sbook WITH HEADER LINE,
lt_coltab TYPE lvc_t_scol,
ls_col TYPE lvc_s_scol.
*-----------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_preenche_tabela.
PERFORM f_exibi_alv.
*&---------------------------------------------------------------------*
*& Form F_PREENCHE_TABELA
*&---------------------------------------------------------------------*
* Buscando dados
*----------------------------------------------------------------------*
FORM f_preenche_tabela .
SELECT *
FROM sbook
INTO CORRESPONDING FIELDS OF TABLE tb_sbook
WHERE carrid EQ 'AA'
AND connid EQ '0017'.
LOOP AT tb_sbook.
IF tb_sbook-smoker IS NOT INITIAL.
ls_col-fname = 'PASSNAME'.
ls_col-color-col = '6'.
tb_sbook-semaforo = '@S_TL_R@'.
ELSE.
ls_col-fname = 'PASSNAME'.
ls_col-color-col = '5'.
tb_sbook-semaforo = '@S_TL_G@'.
ENDIF.
APPEND ls_col TO lt_coltab.
tb_sbook-cor = lt_coltab[].
MODIFY tb_sbook.
CLEAR: tb_sbook, lt_coltab[].
ENDLOOP.
ENDFORM. " F_PREENCHE_TABELA
*&---------------------------------------------------------------------*
*& Form F_EXIBI_ALV
*&---------------------------------------------------------------------*
* Montrando estrutura ALV para exibição
*----------------------------------------------------------------------*
FORM f_exibi_alv .
DATA:lt_fieldcat TYPE slis_t_fieldcat_alv,
ls_fieldcat TYPE LINE OF slis_t_fieldcat_alv,
lv_layout TYPE slis_layout_alv.
CLEAR: ls_fieldcat.
REFRESH: lt_fieldcat.
ls_fieldcat-fieldname = 'PASSNAME'.
ls_fieldcat-tabname = 'GT_SAIDA'.
ls_fieldcat-seltext_s = 'Passageiro'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SMOKER'.
ls_fieldcat-tabname = 'GT_SAIDA'.
ls_fieldcat-seltext_s = 'Fumante'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'SEMAFORO'.
ls_fieldcat-tabname = 'GT_SAIDA'.
ls_fieldcat-seltext_s = 'Status'.
APPEND ls_fieldcat TO lt_fieldcat.
CLEAR ls_fieldcat.
lv_layout-coltab_fieldname = 'COR'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
is_layout = lv_layout
it_fieldcat = lt_fieldcat
TABLES
t_outtab = tb_sbook
EXCEPTIONS
program_error = 1
OTHERS = 2.
ENDFORM. " F_EXIBI_ALV