Sei sulla pagina 1di 6

REPORT zmlcr0002.

*---------------------------------------------------------------------*
* Programa modelo para ALV
* Academia ABAP/4 - 2005
* Procwork BH
* Marden Lopes Coelho
*---------------------------------------------------------------------*
*---------------------------------------------------------------------*
* Definio de grupos de tipos
*---------------------------------------------------------------------*
* SLIS tipos fundamentais para sada de um relatrio ALV
TYPE-POOLS: slis.
* Para cabealho
TYPE-POOLS: kkblo.
*&---------------------------------------------------------------------*
* Parmetros gerais para as funes do ALV
*&---------------------------------------------------------------------*
* Parmetros gerais
DATA: s_layout
DATA: layout
DATA: l_lay
DATA: l_spg
* Para o cabealho
* Somente para ALV
DATA: header
DATA: it_header

do layout do relatrio
TYPE slis_layout_alv.
TYPE kkblo_layout.
TYPE slis_layout_alv.
TYPE slis_t_sp_group_alv.
(form f_monta_cabecalho)
Grid
TYPE kkblo_listheader.
TYPE kkblo_t_listheader.

* Para o catlogo de campos


DATA: afield
TYPE kkblo_fieldcat.
DATA: i_fieldcat
TYPE kkblo_t_fieldcat.
DATA: l_fcat
TYPE slis_t_fieldcat_alv.
* Para campos de quebra
DATA: it_sort
TYPE slis_t_sortinfo_alv WITH HEADER LINE.
* Para controle de cores e atributos especiais
DATA: colinfo
TYPE kkblo_specialcol.
* Demais variveis para o ALV
DATA: v_repid
LIKE sy-repid,
g_save
TYPE c,
g_variant
TYPE disvariant.
*---------------------------------------------------------------------*
* Definio de tabelas interna
*---------------------------------------------------------------------*
* Tabela interna para receber os dados externos que sero mostrados
* no relatrio.
* Tabela interna que receber os dados do select
data it_t005_aux like t005 occurs 0 with header line.
* Tabela interna onde estaro os dados que sero exibidos.
DATA: BEGIN OF it_t005 OCCURS 0.
INCLUDE STRUCTURE t005.

DATA:

colinfo TYPE kkblo_t_specialcol,


END OF it_t005.

* Variante de exibio
PARAMETERS p_vari LIKE disvariant-variant.
*---------------------------------------------------------------------*
* Incio processamento
*---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM f_seleciona_dados.
PERFORM f_monta_cabecalho.
PERFORM f_preenche_fieldcat.
PERFORM f_monta_campos_quebra.
perform f_monta_tabela_final.
PERFORM f_reuse_alv_transfer_data_back.
PERFORM f_imprime_relatorio.
*&---------------------------------------------------------------------*
*&
Form f_seleciona_dados
*&---------------------------------------------------------------------*
FORM f_seleciona_dados.
SELECT * FROM t005 INTO TABLE it_t005_aux.
ENDFORM.
" f_seleciona_dados
*&---------------------------------------------------------------------*
*&
Form f_monta_cabecalho
*&---------------------------------------------------------------------*
FORM f_monta_cabecalho.
* Preenche a tabela interna IT_HEADER com trs linha de cabealho
CLEAR header.
header-typ = 'H'.
header-info = 'Lista header H'.
APPEND header TO it_header.
CLEAR header.
header-typ =
header-key =
header-info =
APPEND header
CLEAR header.
header-typ =
header-key =
header-info =
APPEND header
ENDFORM.

'S'.
'Cabealho'.
'Header S'.
TO it_header.
'A'.
'Outra Linha'.
'Outra linha do cabealho A'.
TO it_header.
" f_monta_cabecalho

*&---------------------------------------------------------------------*
*&
Form f_preenche_fieldcat

*&---------------------------------------------------------------------*
* Preenche o catlogo de campos. Todos os campos que aparecero no
* relatrio devero ser definidos aqui.
FORM f_preenche_fieldcat.
DATA i TYPE i.
i = i + 1.
CLEAR afield.
afield-col_pos
= i.
afield-fieldname
= 'LAND1'.
afield-ref_fieldname = 'LAND1'.
afield-ref_tabname = 'T005'.
afield-key
= 'X'.
APPEND afield TO i_fieldcat.
i = i + 1.
CLEAR afield.
afield-col_pos
= i.
afield-fieldname
= 'LANDK'.
afield-ref_fieldname = 'LANDK'.
afield-ref_tabname = 'T005'.
afield-key
= 'X'.
APPEND afield TO i_fieldcat.
i = i + 1.
CLEAR afield.
afield-col_pos
= i.
afield-fieldname
= 'INTCA'.
afield-ref_fieldname = 'INTCA'.
afield-ref_tabname = 'T005'.
APPEND afield TO i_fieldcat.
i = i + 1.
CLEAR afield.
afield-col_pos
= i.
afield-fieldname
= 'LNPLZ'.
afield-ref_fieldname = 'LNPLZ'.
afield-ref_tabname = 'T005'.
* afield-do_sum
= 'X'.
APPEND afield TO i_fieldcat.

ENDFORM.

" f_preenche_fieldcat

*&---------------------------------------------------------------------*
*&
Form f_monta_campos_quebra
*&---------------------------------------------------------------------*
* Se o relatrio possuir quebras, os campos das quebras devero ser
* definidos aqui.
FORM f_monta_campos_quebra.
DATA i TYPE i.
REFRESH it_sort.
i = i + 1.
CLEAR it_sort.
it_sort-spos
it_sort-fieldname
it_sort-group
it_sort-subtot

=
=
=
=

i.
'LAND1'.
'X'.
'X'.

it_sort-up
APPEND it_sort.

= 'X'.

i = i + 1.
CLEAR it_sort.
it_sort-spos
= i.
it_sort-fieldname = 'LANDK'.
* it_sort-up
= 'X'.
APPEND it_sort.
i = i + 1.
CLEAR it_sort.
it_sort-spos
= i.
it_sort-fieldname = 'INTCA'.
* it_sort-up
= 'X'.
APPEND it_sort.
ENDFORM.
" f_monta_campos_quebra
*&---------------------------------------------------------------------*
*&
Form f_REUSE_ALV_TRANSFER_DATA_BACK
*&---------------------------------------------------------------------*
* Define parmetros gerais do layout do relatrio
FORM f_reuse_alv_transfer_data_back.
* layout-box_fieldname
= 'X'.
layout-coltab_fieldname
= 'COLINFO'.
layout-no_zebra
= ' '.
layout-group_buttons
= ' '.
* layout-totals_only
= 'X'.
* layout-cell_merge
= 'X'.
layout-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_TRANSFER_DATA_BACK'
EXPORTING
it_fieldcat
= i_fieldcat
is_layout
= layout
IMPORTING
et_fieldcat
= l_fcat
es_layout
= l_lay
et_special_groups = l_spg.
ENDFORM.

" f_REUSE_ALV_TRANSFER_DATA_BACK

*&---------------------------------------------------------------------*
*&
Form f_imprime_relatorio
*&---------------------------------------------------------------------*
FORM f_imprime_relatorio.
break-point.
MOVE sy-repid TO v_repid.
MOVE v_repid TO g_variant-report.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program
= v_repid
is_layout
= l_lay
it_fieldcat
= l_fcat
it_special_groups
= l_spg
i_callback_user_command = 'AT_USER_COMMAND'

i_callback_top_of_page
i_background_id
it_sort
i_save
i_default
is_variant
TABLES
t_outtab
EXCEPTIONS
program_error
OTHERS

=
=
=
=
=
=

'F_TOP_OF_PAGE'
'ALV_BACKGROUND'
it_sort[]
g_save
'X'
g_variant

= it_t005
= 1
= 2.

* CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'


*
EXPORTING
*
i_callback_program
= v_repid
*
is_layout
= l_lay
*
it_fieldcat
= l_fcat
*
it_special_groups
= l_spg
*
i_callback_user_command = 'AT_USER_COMMAND'
*
i_callback_top_of_page = 'F_TOP_OF_PAGE'
*
i_background_id
= 'ALV_BACKGROUND'
*
it_sort
= it_sort[]
*
i_save
= g_save
*
i_default
= 'X'
*
is_variant
= g_variant
*
TABLES
*
t_outtab
= it_t005
*
EXCEPTIONS
*
program_error
= 1
*
OTHERS
= 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
STOP.
ENDIF.
ENDFORM.

" f_imprime_relatorio

*&---------------------------------------------------------------------*
*&
Form f_monta_tabela_final
*&---------------------------------------------------------------------*
form f_monta_tabela_final.
* Neste form, a tabela que ser exibida montada. Aqui possvel
* trocar a cor das colunas. Neste exemplo, troca-se a cor
* da clula onde o cdigo do pas(LAND1) for BR
LOOP AT it_t005_aux.
CLEAR it_t005.
move-corresponding it_t005_aux to it_t005.
*
IF it_t005_aux-land1 = 'BR'.
colinfo-color-col = 6.
colinfo-fieldname = 'LAND1'.
APPEND colinfo TO it_t005-colinfo.
ENDIF.
APPEND IT_T005.

ENDLOOP.
endform.

" f_monta_tabela_final

*----------------------------------------------------------------------FORM at_user_command USING ucomm LIKE sy-ucomm


selfield TYPE kkblo_selfield.
break-point.
ENDFORM.
*&---------------------------------------------------------------------*
*&
Form f_top_of_page
*&---------------------------------------------------------------------*
FORM f_top_of_page.
* Para criar um logotipo, deve-se entrar na transao 0FPM002 e
* preencher:
* - Classe = PICTURES
* - Objeto = OT
* - Item = Nome do ID da figura
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = it_header
i_logo
= 'ENJOYSAP_LOGO'.
WRITE: AT 70 'Pgina:', sy-pagno.
endform.

Potrebbero piacerti anche