Você está na página 1de 40

ABAP-ALV

El ALV Grid control (ABAP List Viewer) es una herramienta flexible para mostrar listas. SAP proporciona un conjunto de mdulos de funcin (ALV VISOR ABAP LIST) que se pueden poner en uso para embellecer la salida de un informe. Este conjunto de funciones ALV se utiliza para mejorar la legibilidad y la funcionalidad de cualquier salida del informe. Se recomienda cuando la salida de un informe contiene columnas que se extienden ms de 255 caracteres de longitud. En tales casos, este conjunto de funciones ALV ayuda a elegir las columnas y organizarlas y tambin guardar las diferentes variantes de presentacin del informe. Esta es una herramienta muy eficiente para clasificar y organizar dinmicamente las columnas de una salida del informe.

ABAP-ALV

ABAP-ALV
Las funciones ALV ms corrientemente utilizadas para este propsito son; 1. REUSE_ALV_VARIANT_DEFAULT_GET 2. REUSE_ALV_VARIANT_F4 3. REUSE_ALV_VARIANT_EXISTENCE 4. REUSE_ALV_EVENTS_GET 5. REUSE_ALV_COMMENTARY_WRITE 6. REUSE_ALV_FIELDCATALOG_MERGE 7. REUSE_ALV_LIST_DISPLAY 8. REUSE_ALV_GRID_DISPLAY ** 9. REUSE_ALV_POPUP_TO_SELECT La Finalidad de las funciones anteriores se diferencian, no todas las funciones son necesarias en un reporte ALV.

ABAP-ALV
Cuando se crea un reporte utilizando funciones ALV es necesario: Incluir en el programa el tipo SLIS que tiene definidas todas las estructuras de los parmetros de entrada y de salida de esta funcin.
TYPE-POOLS: SLIS.

Definir correctamente el catlogo de campos.


T_EVENTS TYPE SLIS_T_EVENT, "Eventos.

Definir en el programa todas las subrutinas que implementarn el comportamiento de ste ante la ejecucin de determinados eventos o ante la interaccin del usuario. Pasarle los datos que deben ser mostrados en el reporte a la funcin utilizando tablas internas.

ABAP-ALV
Utilizando las funciones ALV, ninguna sentencia WRITE aparecer en el programa. Se informa a la correspondiente funcin de los datos que van a ser mostrados, la definicin y caractersticas de cada uno de stos datos y de la apariencia y todo es implementado por la funcin. Como mnimo se tiene que proveer de los siguientes dos tipos de informacin para mostrar los datos. Una tabla interna con los datos a mostrar, llamada Output table Una descripcin de la estructura de esos datos que han sido declarados en la ALV, bien con el field catalog o bien con la correspondiente estructura del diccionario de datos.

ABAP-ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = LV_REPID I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' "llama al form I_BACKGROUND_ID = 'ALV_BACKGROUND' "imagen de fondo IT_FIELDCAT = LV_FIELDCAT[] IT_EVENTS = T_EVENTS[] is_layout = lv_layout i_save = 'A' is_variant = l_variant "anexado variante i_default = 'X' TABLES T_OUTTAB = TI_VUELOS EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

ABAP-ALV
- I_CALLBACK_PROGRAM : Contiene el nombre del programa ABAP que est llamando a dicha funcin. - IT_FIELDCAT:

Catalogo de campos con descripcin de los campos. Una tabla interna que contiene la definicin de los campos que aparecern en el listado
- T_OUTTAB: Nombre de la tabla interna que contiene toda la informacin recogida por el programa y la cual debe ser impresa en el reporte. Los dems parmetros podrn ser informados segn el uso que se le vaya a dar a la funcin dentro del programa.

ABAP-ALV
I_CALLBACK_PROGRAM : Contiene el nombre del programa ABAP que est llamando a dicha funcin. LV_REPID = SY-REPID I_CALLBACK_PROGRAM = LV_REPID IT_FIELDCAT. El parmetro IT_FIELDCAT se usa para disear el contenido de un reporte ALV. Se definir una tabla interna de tipo SLIS_FIELDCAT_ALV, el cual est definido en el type-pool SLIS incluido al inicio del programa. Se construir la tabla interna en el cdigo del programa. TYPE-POOLS: SLIS. DATA: LV_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

ABAP-ALV
De todos los campos de esta tabla, las siguientes entradas son suficientes para cada registro:
LV_FIELDCAT-FIELDNAME = 'PRICE'. LV_FIELDCAT-TABNAME = 'TI_VUELOS'. LV_FIELDCAT-reptext_ddic = 'Precio Del Vuelo'. APPEND LV_FIELDCAT. CLEAR LV_FIELDCAT. FIELDNAME: Nombre del campo en la tabla interna que contendr los datos a mostrar. TABNAME: Nombre de la tabla interna que contiene los datos a mostrar en el listado.

ABAP-ALV
Campos del field catalog Unidades de moneda y medida Campo CFIELDNAME CURRENCY QFIELDNAME QUANTITY Formato de la columna Campo COL_POS DO_SUM EMPHASIZE KEY NO_OUT NO_SUM OUTPUTLEN Descripcin Nombre del Campo de la moneda moneda Campo con el nombre de la unidad de medida de referencia. Unidad de medida

Descripcin Posicin de una columna Clculo del total Color de la columna Columna clave No se muestra la columna. No se permite un sumatorio. Anchura de la columna en caracteres

ABAP-ALV
Texto

Campo COLDDICTXT COLTEXT

Descripcin Definicin del Data Dictionary. Etiqueta de la columna para las funciones. Texto de la cabecera correspondiente al Data Dictionary. Texto largo del elemento del Data Dictionary. Texto mediano del elemento del Data Dictionary. Texto corto del elemento del Data Dictionary. Texto definido en referencia al Data Dictionary. Etiqueta de la columna. Texto de referencia del Data Dictionary.

REPTEXT
SCRTEXT_L SCRTEXT_M

SCRTEXT_S
SELDDICTXT SELTEXT TIPDDICTXT

ABAP-ALV
Formato de la columna (Contenido) Campo
DECIMALS_O DECMLFIELD EDIT_MASK NO_SIGN NO_ZERO ROUND SYMBOL ICON JUST

Descripcin
Nmero de decimales. Campo con especificacin de decimales. Mscara para la salida de datos Mostrar sin signo Suprimir los ceros. Redondear valores Mostrar como un smbolo Mostrar como un icono Justificacin del campo. R= justificado a la derecha, L= justificado a la izquierda, C= centrado Columna fija

FIX_COLUMN

ABAP-ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = LV_REPID I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' "llama al form I_BACKGROUND_ID = 'ALV_BACKGROUND' "imagen de fondo IT_FIELDCAT = LV_FIELDCAT[] IT_EVENTS = T_EVENTS[] is_layout = lv_layout i_save = 'A' is_variant = l_variant "anexado variante i_default = 'X' TABLES T_OUTTAB = TI_VUELOS EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

ABAP-ALV
IT_EVENTS. En esta tabla se especificarn ante qu eventos la respuesta ser de nuestro programa y no implementado por la funcin. Para obtener los eventos que pueden ser codificados por el programa, es decir, aquellos para los cuales la funcin nos devuelve el control, basta con ejecutar la funcin REUSE_ALV_EVENTS_GET, importando una tabla interna en el parmetro ET_EVENTS, definida como SLIS_ALV_EVENT, estructura que viene definida en el type-pool SLIS incluido al inicio del programa. Cuando se llame a la funcin que va a mostrar el reporte se le pasar esta tabla interna con el nombre de los eventos y el nombre de la subrutina donde irn implementados dichos eventos.

ABAP-ALV
*&---------------------------------------------------------------------* *& Form BUSCAR_EVENTOS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* FORM BUSCAR_EVENTOS . CALL FUNCTION 'REUSE_ALV_EVENTS_GET' EXPORTING I_LIST_TYPE = 0 IMPORTING ET_EVENTS = T_EVENTS. ENDFORM. " BUSCAR_EVENTOS

ABAP-ALV
*&--------------------------------------------------------------------* *& Form F_EVENTO *&--------------------------------------------------------------------* FORM F_EVENTO USING l_event LIKE wT_EVENTS-name l_form LIKE wT_EVENTS-form. **Selecciono el evento TOP_OF_PAGE y le seteo el FORM a ejecutar, lleno el campo FORM DATA: ls_event TYPE slis_alv_event. READ TABLE t_events WITH KEY name = l_event INTO ls_event. IF sy-subrc = 0. MOVE l_form TO ls_event-form. MODIFY t_events FROM ls_event TRANSPORTING form WHERE name = l_event. ENDIF. ENDFORM. " F_EVENTO

ABAP-ALV

ABAP-ALV
Eventos. De todos los eventos que podemos implementar en nuestro programa, los ms utilizados o los ms comunes son dos: Top-of-page y At user command. - Top-of-page: Este evento se ejecutar cada vez que se vaya a imprimir una nueva pgina en el listado. En el caso de utilizar una funcin GRID display, la cabecera slo aparecer en la primera pgina, puesto que en un GRID hay una sola pgina. La forma de implementar el Top-of-page utilizando la funcin es sencilla. Definiremos una subrutina cuyo nombre se le pasar a la funcin en el contenido de la tabla interna I_EVENTS en el parmetro IT_EVENT.

ABAP-ALV
En esta subrutina codificaremos el contenido de la cabecera del reporte. Existe una diferencia a la hora de implementar el top-of-page segn la funcin que se est utilizando: Si se trata de una funcin REUSE_ALV_GRID_DISPLAY se tendr que utilizar una funcin especfica para codificar el top-of-page. La funcin en particular es REUSE_ALV_COMMENTARY_WRITE. A dicha funcin se le pasar una tabla interna de tipo SLIS_LISTHEADER en el parmetro IT_LIST_COMMENTARY con toda la informacin que queremos que aparezca en la cabecera del listado.
*&* *& Form top_of_page *&* FORM TOP_OF_PAGE . * Pasa a la cabecera el logo CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING I_LOGO = 'ENJOYSAP_LOGO' "Logo IT_LIST_COMMENTARY = GT_HEADER. ENDFORM. " TOP_OF_PAGE

ABAP-ALV
FORM f_cabecera. DATA: WA_HEADER TYPE SLIS_LISTHEADER. * Cargo el Ttulo WA_HEADER-TYP = 'H'. WA_HEADER-INFO = 'Ttulo en Maysculas'. APPEND WA_HEADER TO GT_HEADER. * Cargo el Subttulo CLEAR WA_HEADER. WA_HEADER-TYP = 'A'. WA_HEADER-INFO = 'Texto para un subttulo.'. APPEND WA_HEADER TO GT_HEADER.

ENDFORM.

ABAP-ALV

ABAP-ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = LV_REPID I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' "llama al form I_BACKGROUND_ID = 'ALV_BACKGROUND' "imagen de fondo IT_FIELDCAT = LV_FIELDCAT[] IT_EVENTS = T_EVENTS[] is_layout = lv_layout i_save = 'A' is_variant = l_variant i_default = 'X' TABLES T_OUTTAB = TI_VUELOS EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

ABAP-ALV
Mostrar variantes. Con la ayuda de las variantes los usuarios pueden customizar la lista de salida para satisfacer sus requerimientos. Los parmetros que se usan dentro del mtodo set_table_for_first_display son: I_SAVE, IS_VARIANT y I_DEFAULT Grabar variantes. La funcin estndar cambia las variantes que pueden ser accesibles para los usuarios pinchando en los botones de la toolbar. Esos iconos permiten al usuario ajustar el formato de la ALV a sus requerimientos durante la vida del programa. El desarrollador determina si los usuarios pueden guardar las variantes y definir si las opciones estn disponibles. Si se pasa slo el actual parmetro IS_VARIANT, los usuarios slo pueden leer variantes pero no grabar nuevas. Si se usa el parmetro I_SAVE se necesita pasar una variante con la estructura IS_VARIANT. La toolbar ahora incluye en el men la opcin de que los usuarios lean y graben variantes

ABAP-ALV
I_SAVE.

En muchas ocasiones, cuando se nos pide implementar un reporte utilizando funciones ALV, se nos pide mostrar en la pantalla de seleccin un parmetro que sea el Layout del Report. Esto es una utilidad de estas funciones. Una vez el listado est en pantalla, el usuario puede definir su propio layout del reporte, mostrando y ocultando campos (columnas), calculando subtotales e incluso cambiando las columnas de sitio. Una vez adaptado el layout a sus necesidades, puede grabarlo, quedando as disponible para otras ejecuciones del programa.

ABAP-ALV
El parmetro de la pantalla de seleccin nos servir para elegir distintos layouts grabados en anteriores ejecuciones del programa, nos mostrar cules hay definidos y verificar la existencia de stos. Para llevar a cabo estas funcionalidades, utilizaremos las siguientes funciones: - REUSE_ALV_VARIANT_EXISTENCE pasndole en el parmetro CS_VARIANT el valor introducido por el usuario en la pantalla de seleccin. Nos dir si el nombre del layout introducido por el usuario para ese reporte existe o no.

ABAP-ALV
- REUSE_ALV_VARIANT_F4 har las funciones del matchcode para ese campo. Hay que informar los siguientes parmetros: - IS_VARIANT: Se le pasar una estructura definida de tipo DISVARIANT. Esta estructura deber llevar informado el nombre del reporte que ejecuta la funcin. Se almacenar el valor devuelto por la funcin en el parmetro ES_VARIANT. - I_SAVE: Este parmetro podr tomar 3 valores distintos: X, seleccionar aquellos layouts grabados como estndares, U, seleccionar aquellos layouts especficos de usuario, y A, seleccionar todo tipo de layouts definidos para el programa, tanto estndares como especficos de usuario.

ABAP-ALV
Cuando se utiliza esta utilidad de la funcin, hay que tener en cuenta que cuando se llame a la funcin para imprimir el reporte, hay que informar el parmetro I_SAVE con uno de los valores anteriormente definidos, ya que por defecto este parmetro toma como valor SPACE, que significa que no puede grabarse ningn layout en el reporte.

ABAP-ALV

ABAP-ALV

ABAP-ALV

ABAP-ALV

ABAP-ALV

ABAP-ALV
IS_VARIANT Determina la variante para mostrar la Output table. Si se usa este parmetro se debe rellenar por lo menos el campo REPORTE. I_SAVE Determina las opciones disponibles para que el usuario guarde variantes. X: slo globales U: slo especfico del usuario A: opciones X U a la vez. : no se puede grabar. I_DEFAULT Determina si un usuario puede determinar variantes por defecto. X : Est permitido. : No est permitido. Si las variantes por defecto estn permitidas y si existe alguna definida, si no se indica lo contrario en el parmetro IS_VARIANT se muestra la variante por defecto de forma automtica. IS_LAYOUT Determina las propiedades de la ALV.

ABAP-ALV
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_CALLBACK_PROGRAM = LV_REPID I_CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE' "llama al form I_BACKGROUND_ID = 'ALV_BACKGROUND' "imagen de fondo IT_FIELDCAT = LV_FIELDCAT[] IT_EVENTS = T_EVENTS[] is_layout = lv_layout i_save = 'A' is_variant = l_variant "anexado variante i_default = 'X' TABLES T_OUTTAB = TI_VUELOS EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF.

ABAP-ALV
IS_LAYOUT.

En este parmetro podemos pasarle una tabla interna informando de la apariencia del reporte. Esta apariencia podr luego ser modificada desde el propio reporte. La tabla interna tendr que ser declarada del tipo SLIS_LAYOUT_ALV. Entre otros, se puede definir si mostrar lneas verticales y horizontales , los colores de los campos, etc. Entre ellos, uno de los ms importantes o que ms se suele pedir es mostrar el reporte sin mostrar los valores repetidos para cierto campo en distintos registros. Esto se har marcando con X el campo CELL_MERGE de esta tabla interna. Para que esto funcione, el listado debe estar ordenado por este campo. Aqu hay una breve descripcin de algunos valores de esta tabla: NO_COLHEAD : No habr ttulos en las columnas. ZEBRA : Alterna el color de la linea. NO_VLINE : Oculta las lneas verticales. CELL_MERGE : Suprime los campos repetidos.

ABAP-ALV

ABAP-ALV

ABAP-ALV
IT_SORT. Define los criterios de ordenacin con el que se mostrarn los datos en el listado, as como aquellos campos por los cuales debe calcularse totales y subtotales. Se da el nombre del campo por el cual se va a ordenar, el criterio de ordenacin, si ascendente o descendente, la posicin de la columna que ocupa, si se van a calcular subtotales por ese campo o no, si queremos que los subtotales aparezcan comprimidos o expandidos, etc. Por ejemplo, data: it_sort TYPE slis_t_sortinfo_alv,

*&--------------------------------------------------------------------* *& Form ALV_SORT *&--------------------------------------------------------------------* FORM ALV_SORT .


CLEAR wa_sort. wa_sort-spos ='1'. wa_sort-fieldname = 'CARRID'. wa_sort-up = 'X'. wa_sort-tabname = 'TI_VUELOS'. APPEND wa_sort TO it_sort. ENDFORM. " ALV_SORT

ABAP-ALV

ABAP-ALV
Ver programas: ZALV01 ZALV02 ZALV03, CON VARIANTES ZALV04, CON SORT ZALV05, CON LIST DISPLAY ZALV06, CON REUSE_ALV_FIELDCATALOG_MERG ZALV07, CON USER_COMMAND

Você também pode gostar