miércoles, 13 de agosto de 2008

ALV

¿Qué es un ALV?
Nota: Los ejemplos aqui mostrados fueron tomados de http://www.mundosap.com/ Para poder ejemplificar el contenido.

•Es una herramienta flexible para el despliegue de listas de datos
•Provee de una lista de funciones genericas por default como sumar, ordenar, etcetera.
•Presenta numerosas interfaces con Excel o Crystal Reports.

Elementos principales
•Lista de datos
•Field catalog
•Estructura de salida
•Manejador de eventos
•Datos adicionales

Lista de datos
•Es la lista de datos que va a ser mostrada en el ALV
•Es una tabla interna que puede ser manipulada con cualquier tipo de sentencia antes de entrar a la funcion del ALV.


Field Catalog
•Define las características de despliegue de la lista de datos
•Permite la definir las caracteristicas de despliegue de cada columna.
•El tipo de dato de referencia es: LVC_T_FCAT


Estructura de salida (layout structure)
•Especifica las características generales de la “grid” de salida
•Permite cargar las opciones de visualización, personalizar la grid, ajustar colores, etcétera
•Permite indicar las columnas del reporte que deseamos que queden “ocultas” o “visibles”
•El dato de referencia es: LVC_S_LAYO


Control de eventos(Event handler)

•Permite definir e implementar los eventos disparados en un ALV
–Click
–Top of page
–End of page


Datos adicionales
•Define características adicionales del ALV como puede ser:
–Criterios iniciales de ordenamiento
–Botones a desactivar, etcétera

Tipos de ALV
• REUSE_ALV_GRID_DISPLAY
• REUSE_ALV_HIERSEQ_LIST_DISPLAY
• REUSE_ALV_LIST_DISPLAY

Parámetros principales para usar las funciones del ALV
•- I_CALLBACK_PROGRAM :
Se informa a la función con el nombre del programa que está llamando a dicha función.
•- IT_FIELDCAT:
Este parámetro se informará con una tabla interna que contiene la definición de los campos que aparecerán en el listado.
•- T_OUTTAB:
Nombre de la tabla interna que contiene toda la información recogida por el programa y la cual debe ser impresa en el report.


Ejemplo

DATA: L_REPID TYPE SY-REPID.
L_REPID = SY-REPID.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
I_CALLBACK_PROGRAM = L_REPID
I_CALLBACK_PF_STATUS_SET = 'STATUS_SET'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
IT_FIELDCAT = D_FIELDCAT
IT_SORT = D_SORTCAT
I_SAVE = 'A'
IS_VARIANT = I_VARIAN
IT_EVENTS = D_EVENTCAT
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = I_BSEG
EXCEPTIONS


PROGRAM_ERROR = 1
OTHERS = 2.




IT_FIELDCAT

•Tipo de tabla interna LIS_FIELDCAT_ALV
•Campos obligatorios:
–FIELDNAME: Nombre del campo en la tabla interna que contendrá los datos a mostrar.
–REF_TABNAME: Nombre de una tabla o estructura del diccionario de datos a la cual el campo a mostrar está referenciado.



Manejo de eventos

•Tipo de dato: SLIS_ALV_EVENT
•Invocar la funcion REUSE_ALV_EVENTS_GET
•Eventos:
–Top-of-page. Cabecera del ALV
–At user command



Top-of-page

*& Form F_FILL_I_TITLE
*&---------------------------------------------------------------------
* Build I_TITLE for header
*----------------------------------------------------------------------
FORM F_FILL_I_TITLE.
* Local variables and constants
DATA: L_DATUM(10),
L_TIME(8).
CONSTANTS: C_ACTION LIKE WA_TITLE-TYP VALUE 'A',
C_TITLE LIKE WA_TITLE-TYP VALUE 'H',
C_HEADER LIKE WA_TITLE-TYP VALUE 'S'.
CLEAR WA_TITLE.
* Title of report
WA_TITLE-TYP = C_HEADER.
WA_TITLE-KEY = TEXT-003.
WA_TITLE-INFO = L_TIME.
APPEND WA_TITLE TO I_TITLE.
CLEAR WA_TITLE.
ENDFORM. " F_FILL_I_TITLE


I_SAVE

•REUSE_ALV_VARIANT_EXISTENCE. Permite identificar algún layout ya existente
•REUSE_ALV_VARIANT_F4 . Hara las funciones de matchcode para ese parametro.
–IS_VARIANT. Contendrá en nombre de la funcion, tipo de dato DISVARIANT.
–I_SAVE. Indica la manera en que se guardara el layout.


REUSE_ALV_VARIANT_EXISTENCE

CALL FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'EXPORTING
i_save = gf_save
CHANGING
cs_variant = gwa_variant1.
gwa_variant = gwa_variant1.



REUSE_ALV_VARIANT_F4

call function 'REUSE_ALV_VARIANT_F4'
exporting
is_variant = g_variant
i_save = g_save
importing
e_exit = g_exit
es_variant = gx_variant
exceptions not_found = 2.



REUSE_ALV_GRID_DISPLAY

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY '
EXPORTING
I_CALLBACK_PROGRAM = report_id
IT_FIELDCAT = FCAT
IT_EVENTS = i_events
TABLES
t_outtab = DISPLAY


I_CALLBACK_USER_COMMAND

•En esta función se implementan las interacción con el usuario o en otras palabras se programan los botones.
Parametros:
- L_UCOMM like SY-UCOMM. En este parámetro vendrá informado el código de función ejecutado por el usuario.
- L_SELFIELD type SLIS_SELFIELD.En este parámetro vendrá informado el registro actual del listado seleccionado por el usuario para interactuar sobre él.


USER_COMMAND

FORM USER_COMMAND USING L_UCOMM LIKE SY-UCOMM
L_SELFIELD TYPE SLIS_SELFIELD.
READ TABLE I_BSEG INDEX L_SELFIELD-TABINDEX.
IF SY-SUBRC = 0.
CASE L_UCOMM.
WHEN '&IC1'. " Doble click
SET PARAMETER ID 'BLN' FIELD I_BSEG-BELNR.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
ENDIF.
ENDFORM.


IS_LAYOUT.

•Define la apariencia del report.
•El tipo de dato de la estructura debera de ser: SLIS_LAYOUT_ALV.
•Se pueden definir los colores de los campos.
•Permite suprimir los campos repetidos.


IT_SORT

•Define los criterios de ordenación que se mostraran en el listado.
•Define los campos en los cuales deberán de mostrarse totales o subtotales.
•Permite definir la posición de una columna en particular.
•Permite indicar si los subtotales deberán de aparecer extendidos o comprimidos.


Ordena y obtiene el subtotal del numero de documento (BELNR)
IT_SORT-FIELDNAME = 'BELNR'.
IT_SORT-SPOS = 2.
IT_SORT-UP = 'X'.
IT_SORT-SUBTOT = ‘X’.
IT_SORT-EXPA = 'X'.


FORM f_field_kat.
* Paso 1 - Se definen los campos clave ( key = 'X' )
* Sociedad
d_colpos = d_colpos + 1.
d_fieldcat_ln-ref_tabname = 'BSEG'. " Tabla Interna
d_fieldcat_ln-fieldname = 'BUKRS'. " Campo de la Tabla Interna
d_fieldcat_ln-key = space. " Clave = 'X' / No clave = space
d_fieldcat_ln-do_sum = space. " Acepta Sumatorio = 'X' /
" No acepta sumatorio = space
d_fieldcat_ln-col_pos = d_colpos. " Posición de la columna
d_fieldcat_ln-no_out = space. " Columna invisible = 'X' /
" Columna visible = space
d_fieldcat_ln-qfieldname = SPACE.
d_fieldcat_ln-hotspot = space. " Hotspot on = 'X' /
" Hotspot off = space
APPEND d_fieldcat_ln TO d_fieldcat. " Traspasamos los datos
ENDFORM. " f_field_kat



ALV Básico

Elemento mínimos para crear un ALV
************************************************************************
* DATOS DE CREACION : *

* Nombre del programa : *
* Modulo SAP : *
* Creado por : *
* No. del Requerimiento : *
* Fecha Documento : *
* Descripción Breve : *
* *
* *
************************************************************************


Estructura reporte

•REPORT
•************************************************************************
•* INCLUDES
•************************************************************************
•************************************************************************
•* TABLAS
•************************************************************************
•************************************************************************
•* TABLAS INTERNAS
•************************************************************************
•************************************************************************
•* VARIABLES
•************************************************************************
•************************************************************************
•* PARAMETERS
•************************************************************************
•************************************************************************
•* START-OF-SELECTION
•************************************************************************
•************************************************************************
•* END-OF-SELECTION
•************************************************************************
•************************************************************************
•* FORMS
•************************************************************************

Implementacion

•**************** BLOQUE DE DOCUMENTACION PRINCIPAL *********************
•* Nombre del Programa : Z_EDESARROLLO
•* Descripcion : Reporte estadistico de desarrollo
•* Autor del Programa : Victor Daniel Lopez Lorenzo
•* Fecha : 12.04.2007
•* Numero de version : 1.0v
•************************************************************************
•REPORT z_edesarrollo.
•************************************************************************
•* TYPE POOLS
•************************************************************************
•TYPE-POOLS: slis.
•************************************************************************
•* PROGRAMAS INCLUIDOS
•************************************************************************
•INCLUDE z_iedesarrollo.
•************************************************************************
•* PARAMETERS
•************************************************************************

************************************************************************
* INICIALIZATION
************************************************************************
************************************************************************
* ALV
************************************************************************
g_repid = sy-repid.
PERFORM layout_init USING gs_layout.
PERFORM eventtab_build USING gt_events[].
gs_variant-report = g_repid.
g_save = 'A'.


************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
************************************************************************
* END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
PERFORM fill_catalog.
* PERFORM comment_build USING gt_list_top_of_page[].
* PERFORM modif_catalog.
* PERFORM llena_subtotales.
PERFORM call_function.

FORM fill_catalog.
DATA: temp_fieldc TYPE slis_fieldcat_alv.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = 'Z_EDESARROLLO'
i_internal_tabname = 'IT_REPORT'
i_inclname = 'Z_IEDESARROLLO'
CHANGING
ct_fieldcat = ct_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FILL_CATALOG


Call_function

FORM call_function.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
it_fieldcat = ct_fieldcat
i_callback_user_command = 'USER_COMMAND'
i_background_id = 'ALV_BACKGROUND'
i_buffer_active = 'X'
i_callback_program = 'Z_EDESARROLLO'
is_layout = gs_layout
it_sort = gt_sort[]
i_save = g_save
is_variant = gs_variant
it_events = gt_events[]
IMPORTING
e_exit_caused_by_caller = g_exit_caused_by_caller
es_exit_caused_by_user = gs_exit_caused_by_user
TABLES
t_outtab = it_report
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc = 0.
IF g_exit_caused_by_caller = 'X'.
ELSE.
IF gs_exit_caused_by_user-back = 'X'. "F3
ELSE.
IF gs_exit_caused_by_user-exit = 'X'. "F15
ELSE.
IF gs_exit_caused_by_user-cancel = 'X'. "F12
ELSE.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDFORM. " CALL_FUNCTION



EVENTS_INIT

*---------------------------------------------------------------------*
* FORM EVENTS_INIT *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> P_EVENTS *
*---------------------------------------------------------------------*
FORM events_init USING p_events TYPE slis_t_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'.
ENDFORM. "events_init



FILL_LAYOUT


*&-------------------------------------------------------------------*
*& Form FILL_LAYOUT
*&-------------------------------------------------------------------*
* text
*--------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*--------------------------------------------------------------------*
FORM fill_layout.
gs_layout-zebra = 'X'.
gs_layout-coltab_fieldname = 'WERKS'.
* is_layout-expand_fieldname = 'EXPAND'.
ENDFORM. " FILL_LAYOUT


SET_PF_STATUS
*---------------------------------------------------------------------*
* FORM SET_PF_STATUS *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> RT_EXTAB *
*---------------------------------------------------------------------*
FORM set_pf_status USING rt_extab TYPE slis_t_extab.
* SET PF-STATUS 'ST_100'.
ENDFORM. "set_pf_status



FORM modif_catalog.
DATA: temp_fieldcat TYPE slis_fieldcat_alv OCCURS 0 WITH HEADER LINE.
* Aqui es donde se formatea la salida del ALV
LOOP AT ct_fieldcat INTO temp_fieldcat.
CASE temp_fieldcat-fieldname.
WHEN 'CENTRO_W'.
temp_fieldcat-seltext_l = text-010.
temp_fieldcat-seltext_m = text-010.
temp_fieldcat-seltext_s = text-010.
temp_fieldcat-reptext_ddic = space.
temp_fieldcat-ref_fieldname = space.
temp_fieldcat-ref_tabname = space.
temp_fieldcat-fix_column = ''.
ENDCASE.
MODIFY ct_fieldcat FROM temp_fieldcat.
ENDLOOP.
ENDFORM. " MODIF_CATALOG



*---------------------------------------------------------------------*
* FORM USER_COMMAND *
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
* --> R_UCOMM *
* --> RS_SELFIELD *
*---------------------------------------------------------------------*
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
IF rs_selfield-sel_tab_field = 'TBKPF-BELNR'.
BREAK-POINT.
ENDIF.
ENDFORM. "user_command



TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
* i_logo = 'ENJOYSAP_LOGO'
it_list_commentary = gt_list_top_of_page.
ENDFORM. "TOP_OF_PAGE


Comment_build

FORM comment_build USING lt_top_of_page TYPE
slis_t_listheader.
DATA: ls_line TYPE slis_listheader.
DATA: aux_low(30) TYPE c,
aux_high(30) TYPE c,
final(60) TYPE c.
DATA: it_month_name TYPE TABLE OF t247 WITH HEADER LINE,
wa_month_name LIKE it_month_name.
* CLEAR ls_line.
* ls_line-typ = 'A'.
* ls_line-info = final.
* APPEND ls_line TO lt_top_of_page.
*
ENDFORM. "COMMENT_BUILD



Layout_init

FORM layout_init USING rs_layout TYPE slis_layout_alv.
rs_layout-detail_popup = 'X'.
ENDFORM. "LAYOUT_INIT


eventtab_build

FORM eventtab_build USING rt_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 = rt_events.
READ TABLE rt_events WITH KEY name = slis_ev_top_of_page
INTO ls_event.
IF sy-subrc = 0.
MOVE g_top_of_page TO ls_event-form.
APPEND ls_event TO rt_events.
ENDIF.
ENDFORM. "EVENTTAB_BUILD

No hay comentarios: