
8° Tablas de Control
1- Características de una Tabla de Control
Una Tabla de Control es un Control que se utiliza para la Visualización y Modificación de una Tabla Interna, una Tabla Base de Datos u otra Estructura de Datos de SAP.
El aspecto es similar a una Hoja de Cálculo, algo que podemos observar si accedemos a la Trx SM30 y Visualizamos una Tabla Base de Datos cualquiera.
2- Creación de una Tabla de Control
Para crear una Tabla de Control en una Dynpro tenemos 2 posibilidades: Manual o utilizando el asistente Wizard como se explica a continuación suponiendo que trabajaremos con la Tabla ZTABLA_USUARIOS.
- Se crea un Include de Datos donde declararemos
- - Tabla Interna TI_USUARIOS conteniendo todos los campos de la TBD mas un campo marca como primer campo.
- - Estructura ST_USUARIOS del mismo tipo de la Tabla Interna TI_USUARIOS.
- En el Screen Painter de la Dynpro
- - Seleccionamos el ícono Control Tabla (med. Wizard) arrastrándolo sobre la pantalla y aumentando su tamaño.
- A continuación se ejecutará el Asistente Wizard que nos guiará en la construcción de la Tabla de Control.
- - Inicio: Breve explicación del uso y funciones del Wizard. Presionamos Continuar.
- - Nombre del Table Control: Nombre de la Tabla de Control TC_USUARIOS.
- - Nombre de la tabla: Tabla interna programa TI_USUARIOS y Área trabajo tabla ST_USUARIOS.
- - Definición de columnas: Marcamos los campos de la tabla que se mostrarán sin tener en cuenta el campo marca.
- - Atributos del Table Control
- Atributos entrada/salida: Si es de salida (visualización) o de entrada (actualización).
- Columnas: Con cabeceras de columnas
- Posib.selección filas: Campo columna selec. marca. Selección simple.
- - Selección de funciones adicionales p.actualización tablas
- PasarPág: Al utilizar esta opción se agregan 4 teclas debajo de la Tabla de Control
- - Especificación de includes: Se especifican los Includes en donde se creará el código de la Tabla de Control. Si el include no existe, se lo creará automáticamente.
- - Preparar Tabla de Control: Pulsando la tecla Terminar se crearán todos los objetos necesarios para la Tabla de Control de acuerdo a los Atributos especificados.
En este momento, tenemos la posibilidad de modificar el Ancho de las columnas, como así también los Títulos de las mismas.
Dentro de todo lo que se generó en el programa, se encuentra la declaración de la Tabla de Control.
CONTROLS: tc_usuarios TYPE TABLEVIEW USING SCREEN 0200.
El Tipo TABLEVIEW corresponde a la Estructura CXTAB_CONTROL que almacena los datos que definen a la Tabla de Control, como ser Nro.de columnas fijas, Nro.de líneas para el desplazamiento vertical, etc. y al final aparece una Estructura COLS del tipo CXTAB_COLLUMN con datos específicos de las Columnas.
- Código ABAP generado en el evento PBO
PROCESS BEFORE OUTPUT.
* &SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_USUARIOS'
MODULE TC_USUARIOS_CHANGE_TC_ATTR.
* &SPWIZARD: MODULE TC_USUARIOS_CHANGE_COL_ATTR.
LOOP AT TI_USUARIOS
INTO ST_USUARIOS
WITH CONTROL TC_USUARIOS
CURSOR TC_USUARIOS-CURRENT_LINE.
MODULE TC_USUARIOS_GET_LINES.
* &SPWIZARD: MODULE TC_USUARIOS_CHANGE_FIELD_ATTR.
ENDLOOP.
- Código ABAP generado en el evento PAI
PROCESS AFTER INPUT.
LOOP AT TI_USUARIOS.
CHAIN.
FIELD ST_USUARIOS-DNI.
FIELD ST_USUARIOS-NOMBRE_APE.
FIELD ST_USUARIOS-ESTADO_USU.
FIELD ST_USUARIOS-DIRECCION.
FIELD ST_USUARIOS-CODIGO_POSTAL.
FIELD ST_USUARIOS-FECHA_NAC.
FIELD ST_USUARIOS-ESTADO_CIVIL.
ENDCHAIN.
FIELD ST_USUARIOS-MARCA
MODULE TC_USUARIOS_MARK ON REQUEST.
ENDLOOP.
MODULE TC_USUARIOS_USER_COMMAND.
Utilizaremos la sentencia LOOP-ENDLOOP para recorrer cada elemento de la Tabla de Control. Dentro de la misma puede haber otras sentencias como FIELD, MODULE, SELECT, VALUES y CHAIN-ENDCHAIN.
Para cada Tabla de Control debe haber una sentencia LOOP-ENDLOOP en el PBO y en el PAI. Esto se debe a que mediante esta sentencia se copian los campos entre el programa ABAP y la Pantalla y viceversa.
Finalmente, para llenar la Tabla de Control con datos, en el PBO de la dynpro realizaremos la carga de la misma.
PROCESS BEFORE OUTPUT.
MODULE status_0200.
MODULE cargar_tc_0200.
* &SPWIZARD: PBO FLOW LOGIC FOR TABLECONTROL 'TC_USUARIOS'
MODULE TC_USUARIOS_CHANGE_TC_ATTR.
* &SPWIZARD: MODULE TC_USUARIOS_CHANGE_COL_ATTR.
LOOP AT TI_USUARIOS
INTO ST_USUARIOS
WITH CONTROL TC_USUARIOS
CURSOR TC_USUARIOS-CURRENT_LINE.
MODULE TC_USUARIOS_GET_LINES.
* &SPWIZARD: MODULE TC_USUARIOS_CHANGE_FIELD_ATTR.
ENDLOOP.
Y dentro del Módulo CARGAR_TC_0200 introducimos el siguiente código.
MODULE cargar_tc_0200 OUTPUT.
CLEAR: ti_usuarios_aux, st_usuarios, ti_usuarios.
REFRESH ti_usuarios_aux, ti_usuarios.
IF NOT wa_screen_0100-dni IS INITIAL.
* Recupero datos solo del dni introducido
SELECT dni nombre_ape estado_usu direccion
codigo_postal fecha_nac estado_civil
FROM ztabla_usuarios
INTO TABLE ti_usuarios_aux
WHERE dni EQ wa_screen_0100-dni.
ELSE.
* Recupero datos de todos los DNI
SELECT dni nombre_ape estado_usu direccion
codigo_postal fecha_nac estado_civil
FROM ztabla_usuarios
INTO TABLE ti_usuarios_aux.
ENDIF.
* Pasamos el contenido a la Tabla de TC
LOOP AT ti_usuarios_aux INTO st_usuarios_aux.
CLEAR st_usuarios.
st_usuarios-dni = st_usuarios_aux-dni.
st_usuarios-nombre_ape = st_usuarios_aux-nombre_ape.
st_usuarios-estado_usu = st_usuarios_aux-estado_usu.
st_usuarios-direccion = st_usuarios_aux-direccion.
st_usuarios-codigo_postal = st_usuarios_aux-codigo_postal.
st_usuarios-fecha_nac = st_usuarios_aux-fecha_nac.
st_usuarios-estado_civil = st_usuarios_aux-estado_civil.
APPEND st_usuarios TO ti_usuarios.
ENDLOOP.