Creación de catálogo en forma automática.
Existen dos formas de crear un catalogo una manual y otra automática. La función para generar ALV automática REUSE_ALV_FIELDCATALOG_MERGE.
v_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = v_repid
i_internal_tabname = 'TI_USUARIOS'
i_client_never_display = 'X'
i_inclname = v_repid
CHANGING
ct_fieldcat = ti_catalogo[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
Para hacer un catálogo automático debemos modificar la declaración de la tabla interna del ALV utilizando LIKE y haciendo referencias a los campos de una tabla base de datos existentes.
*Declarar asi para usar el MERGE en el catalogo
DATA: BEGIN OF ti_usuarios OCCURS 0,
dni LIKE ztabla_usuarios-dni,
nombre_ape LIKE ztabla_usuarios-nombre_ape,
estado_usu LIKE ztabla_usuarios-estado_usu,
direccion LIKE ztabla_usuarios-direccion,
codigo_postal LIKE ztabla_usuarios-codigo_postal,
f_nacimiento LIKE ztabla_usuarios-f_nacimiento,
estado_civil LIKE ztabla_usuarios-estado_civil,
END OF ti_usuarios.
Lo otro que debemos hacer es configurar el editor, para que se restrinja la cantidad de caracteres de ancho de la pantalla a 72.
UTILIDADES / OPCIONES / EDITOR ABAP / EDITOR / Y TILDAMOS LONG. LINEAS COMPATIB DESCEND(72)
Utilización de logos y encabezados
Podemos agregar logos y encabezados en los listados, debemos declarar una tabla de tipo SLIS_T_LISTHEADER y una estructura del tipo SLIS_LISTHEADER
* Tabla y estructura para la cabecera
ti_header TYPE slis_t_listheader,
st_header TYPE slis_listheader.
Antes de completar el catálogo vamos a llenar la tabla TI_HEADER con el encabezado del reporte el tipo de reporte y fecha del sistema.
DATA: v_fecha(10) TYPE c.
CONCATENATE sy-datum 6(2) sy-datum 4(2)
sy-datum(4) INTO v_fecha SEPARATED BY '/'.
st_header-typ = 'H'.
st_header-info = 'Listado de Usuarios'.
APPEND st_header TO ti_header.
CLEAR st_header.
st_header-typ = 'S'.
st_header-key = 'Tipo de reporte: '.
st_header-info = 'ALV'.
APPEND st_header TO ti_header.
CLEAR st_header.
st_header-typ = 'S'.
st_header-key = 'Fecha: '.
st_header-info = v_fecha.
APPEND st_header TO ti_header.
CLEAR st_header.
Después agregamos la llamada de la función ALV en el parámetro exporting I_CALL_TOP_PAGE con el literal 'TOP_OF_PAGE' será el nombre de la subrutina que cargue el contenido del encabezado y el logo.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = ti_catalogo[]
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
Se crea una subrutina TOP_OF_PAGE con la llamada función REUSE_ALV_COMMENTARY_WRITE, que carga el encabezado que definimos en la tabla interna TI_HEADER junto con el logo 'ENJOYSAP_LOGO'.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = ti_header
i_logo = 'ENJOYSAP_LOGO'.
Para ver los LOGOS disponibles en el sistema o cargar nuevos utilizamos la transacción SE78. Otro transacción estándar es la OAER luego en la pantalla de selección completamos los parámetros de la siguiente forma en el parámetro nombre clase introducimos el texto pictures, en el parámetro tipo de clase introducimos el texto OT, en parámetro clave del objeto introducimos el nombre que se le quiere dar al logo por ej: LOGO_EMPRESAS. Finalmente ejecutamos la transacción y la siguiente pantalla selecciónamos documentos estándar pinchamos sobre le icono imagen verificamos que se pueden subir al sistema distintos tipos de archivos y visualizaremos una ventana de diálogo donde podemos seleccionar el archivo desde nuestro Pc local al servidor. Si queremos agregar al imagen a una orden de transporte debemos acceder al menú/documentos/trasnportar.
Utilización de STATUS GUIS
Para poder utilizar un STATUS GUI en un reporte ALV agregamos a la llamada de función parámetro exporting I_CALLBACK_PF_STATUS_SET con el literal 'PF_STATUS'. Que será el nombre de la subrutina que decalrela utilización START GUI y el parámetro I_CALLBACK_USER_COMMAND con el literal 'USER_COMMAND' será reeemplazado por le nombre de la subrutina que se ejecute para capturar la selección realizada por el usuario
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = ti_catalogo[]
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
La subrutina PF_STATUS
FORM pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS '0100'.
ENDFORM. "PF_STATUS
También en las teclas de función (FUCNTION KEYS) agregamos el código para poder navegar para atrás y volver a la pantalla principal o sir del programa. Cuando creamos estos botones debemos acordarnos de setearlos con tipo de función igual a "E".
Por último creamos la subrutina que capturará las acciones realizada por el usuario.
FORM user_command USING r_ucomm TYPE syucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'ACEPTAR'.
WHEN 'CANCELAR'.
ENDCASE.
ENDFORM. "user_command