En esta entrada se explica como realizar un ALV. Primero necesitaremos una tabla con los campos que deseamos mostrar en el ALV. A esta tabla la hemos llamado gt_data. La tabla gt_data necesita que el primer campo se llame 'box' y sea de tipo boolean. A continuación esta el código necesario para crear el ALV. Una vez hayamos rellenado la tabla gt_data con los datos a mostrar, llamaremos a la función 'mostrar_alv' y listo. También será necesario crear un status llamado 'STATUS_ALV' con los botones típicos del ALV para ordenar, modificar el layout, hacer sumas, etc.
*&---------------------------------------------------------------------*
*& Include REPORT_TOP
*&---------------------------------------------------------------------*
TYPE-POOLS: slis.
CONSTANTS:
gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE',
evento_status TYPE slis_formname VALUE 'SET_STATUS',
evento_command TYPE slis_formname VALUE 'USER_COMMAND',
C_NO TYPE C VALUE '',
C_OK TYPE C VALUE 'X'.
DATA: gt_fieldcat TYPE slis_t_fieldcat_alv,
gs_layout TYPE slis_layout_alv,
gs_print TYPE slis_print_alv,
gt_sort TYPE slis_t_sortinfo_alv,
gt_sp_group TYPE slis_t_sp_group_alv,
gt_events TYPE slis_t_event,
g_repid LIKE sy-repid,
gt_list_top_of_page TYPE slis_t_listheader,
p_f2code LIKE sy-ucomm VALUE '&ETA',
g_boxname type c length 3 value 'BOX'.
* Definimos la tabla con los datos de salida, el primer campo debe ser 'box' de tipo 'boolean'
TYPES: BEGIN OF t_data,
box TYPE BOOLEAN,
. . .
end of t_data.
DATA: gt_data TYPE t_data OCCURS 0.
*&---------------------------------------------------------------------*
*& Include REPORT_ALV
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form construir_catalogo_eventos_alv
*&---------------------------------------------------------------------*
FORM construir_catalogo_eventos_alv
USING e03_lt_events TYPE slis_t_event.
DATA: ls_event TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = e03_lt_events.
READ TABLE e03_lt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE gc_formname_top_of_page TO ls_event-form.
APPEND ls_event TO e03_lt_events.
ENDIF.
ENDFORM. " construir_catalogo_eventos_alv
*&---------------------------------------------------------------------*
*& Form construir_orden_alv
*&---------------------------------------------------------------------*
FORM construir_orden_alv USING e06_lt_sort TYPE slis_t_sortinfo_alv.
DATA: ls_sort TYPE slis_sortinfo_alv.
ls_sort-fieldname = 'PERNR'.
ls_sort-tabname = 'GT_DATA'.
ls_sort-spos = 1.
ls_sort-up = 'X'.
ls_sort-group = 'UL'.
* ls_sort-subtot = 'X'.
APPEND ls_sort TO e06_lt_sort.
ENDFORM. " construir_orden_alv
*&---------------------------------------------------------------------*
*& Form construir_cabecera_alv
*&---------------------------------------------------------------------*
FORM construir_cabecera_alv USING e04_lt_top_of_page TYPE slis_t_listheader.
DATA: ls_line TYPE slis_listheader,
texto(50) TYPE c,
separador(3) TYPE c.
CLEAR ls_line.
ls_line-typ = 'H'.
ls_line-info = text-001.
APPEND ls_line TO e04_lt_top_of_page.
CLEAR ls_line.
ls_line-typ = 'S'.
ls_line-info = text-002.
APPEND ls_line TO e04_lt_top_of_page.
ENDFORM. " construir_cabecera_alv
*&---------------------------------------------------------------------*
*& Form definir_layout_alv
*&---------------------------------------------------------------------*
FORM definir_layout_alv USING e05_ls_layout TYPE slis_layout_alv.
e05_ls_layout-f2code = p_f2code.
e05_ls_layout-zebra = c_ok.
e05_ls_layout-cell_merge = c_no.
e05_ls_layout-colwidth_optimize = c_ok.
e05_ls_layout-box_fieldname = g_boxname.
e05_ls_layout-no_input = c_no.
e05_ls_layout-no_vline = c_no.
e05_ls_layout-no_colhead = c_no.
CLEAR e05_ls_layout-lights_fieldname.
e05_ls_layout-totals_before_items = c_no.
e05_ls_layout-group_change_edit = c_no.
e05_ls_layout-lights_condense = c_no.
e05_ls_layout-totals_text = 'Totales '.
e05_ls_layout-subtotals_text = c_no.
e05_ls_layout-totals_only = c_no.
e05_ls_layout-key_hotspot = c_no.
e05_ls_layout-detail_popup = c_no.
ENDFORM. " definir_layout_alv
*---------------------------------------------------------------------*
* FORM top_of_page *
*---------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
i_logo = 'LOGO_COLOR'
it_list_commentary = gt_list_top_of_page.
ENDFORM. "top_of_page
*---------------------------------------------------------------------*
* FORM set_status *
*---------------------------------------------------------------------*
FORM set_status USING extab TYPE slis_t_extab.
* Si quisieramos excluir funciones del menu principal...
* DATA: fcode LIKE rsmpe-func.
* fcode = '&RNT_PREV'.
* APPEND fcode TO extab.
* SET PF-STATUS 'STATUS_ALV' EXCLUDING extab.
SET PF-STATUS 'STATUS_ALV'.
ENDFORM. "set_status
*---------------------------------------------------------------------*
* FORM user_command *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'LOG'.
rs_selfield-refresh = 'X'.
CALL FUNCTION 'MESSAGES_SHOW'
EXPORTING
object = text-012
show_linno = space.
CLEAR r_ucomm.
ENDCASE.
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form construir_catalogo_campos_alv
*&---------------------------------------------------------------------*
FORM construir_catalogo_campos_alv USING e01_lt_fieldcat TYPE slis_t_fieldcat_alv.
DATA: ls_fieldcat TYPE slis_fieldcat_alv.
CONSTANTS: c_tabname LIKE ls_fieldcat-tabname VALUE 'GT_DATA'.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'NOMBRE_CAMPO'.
ls_fieldcat-tabname = c_tabname.
ls_fieldcat-seltext_l = text-0017.
APPEND ls_fieldcat TO e01_lt_fieldcat.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'NOMBRE_CAMPO'.
ls_fieldcat-tabname = c_tabname.
ls_fieldcat-seltext_l = text-003.
APPEND ls_fieldcat TO e01_lt_fieldcat.
. . .
ENDFORM. " construir_catalogo_campos_alv
*&---------------------------------------------------------------------*
*& Form mostrar_alv
*&---------------------------------------------------------------------*
FORM mostrar_alv.
PERFORM construir_catalogo_eventos_alv USING gt_events[].
PERFORM construir_catalogo_campos_alv USING gt_fieldcat[].
PERFORM construir_cabecera_alv USING gt_list_top_of_page[].
PERFORM definir_layout_alv USING gs_layout.
PERFORM construir_orden_alv USING gt_sort[].
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program =sy-repid
i_callback_user_command = evento_command
i_callback_pf_status_set = evento_status
i_callback_top_of_page = gc_formname_top_of_page
is_layout = gs_layout
it_fieldcat = gt_fieldcat[]
it_special_groups = gt_sp_group[]
it_sort = gt_sort[]
i_save = 'A'
it_events = gt_events[]
TABLES
t_outtab = gt_data.
ENDFORM. " MOSTRAR_ALV
No hay comentarios:
Publicar un comentario