✒️ABAP Las tablas de control
ABAP Las tablas de control
1 | Características de una Tabla de Control
Una Tabla de control es un control que se utiliza para la modificación y visualización de los datos de una tabla interna,
tabla base de datos o otra estructura de datos de SAP.
Imagen 1.1 - Las funcionalidades de una tabla de control
El aspecto de una Tabla de control es similar al de una hoja de cálculo.
Un ejemplo claro de una Tabla de control lo tenemos cuando introducimos datos a través de la vista de una tabla.
Si ejecutamos la transacción SM30, introducimos el nombre de una tabla cualquiera,
por ejemplo la tabla ZTABLA_USUARIOS y presionamos el botón Visualizar, veremos la siguiente pantalla:
Imagen 1.2 - Ejemplo de la utilización de una tabla de control en la transacción SM30
Este es un ejemplo de una Tabla de Control.
2 | Creación de una Tabla de Control
Para crear una Tabla de control en una dynpro tenemos dos posibilidades: hacerlo en forma manual o utilizar el asistente Wizard.
A continuación explicaremos como crear una Tabla de control con el Wizard (Asistente).
Lo primero que haremos será crear un include de datos y declararemos la tabla interna TI_USUARIOS junto con la estructura
ST_USUARIOS del mismo tipo que la tabla interna. Dentro de la tabla interna declaramos al comienzo de la misma,
el campo marca de tipo caracter de 1 posición, que se utilizará para agregar una columna de selección a la Tabla de control.
DATA: BEGIN OF ti_usuarios_tc OCCURS 0,
marca(1) TYPE c,
dni TYPE zcvs_dni,
nombre_ape TYPE zcvs_nombre_ape,
estado_usu TYPE zcvs_estado_usu,
direccion TYPE zcvs_direccion,
fecha_nac TYPE zcvs_fecha_nac,
estado_civiL TYPE zcvs_estado_civil,
codigo_postal TYPE zcvs_codigo_postal,
END OF ti_usuarios_tc.
Imagen 2.1 - Declaración de la tabla interna de la tabla de control
Luego en el Screen Painter de la dynpro seleccionamos el ícono Control Tabla (med. Wizard),
lo arrojamos a la pantalla y aumentamos manteniendo el botón del mouse presionado las dimensiones del control.
Imagen 2.2 - El screen painter
A continuación se ejecutará el asistente ( Wizard ) que nos guiará en la construcción del control.
En la primer pantalla presionamos el botón Continuar.
Imagen 2.3 - El asistente para la creación de la tabla de control
Luego ingresamos un nombre para la Tabla de Control que será TC_USUARIOS.
Imagen 2.4 - Introducimos el nombre de la tabla de control
Ahora especificaremos el nombre de la tabla interna y de la estructura que utilizaremos.
Imagen 2.5 - Introducimos la tabla interna y estructura que utilizaremos en la tabla de control
Marcamos los campos de la tabla que se mostrarán en la Tabla de control sin tener en cuenta al campo de selección.
Imagen 2.6 - Seleccionamos los campos que se visualizarán en pantalla
Ahora en la opción Atributos de entrada/salida determinaremos si la Tabla de control será de salida de datos,
es decir visualización o de entrada de datos.
Si marcamos el check Con cabeceras de columnas, se visualizarán los títulos de cada columna.
Si marcamos el check Con columna de selección se creará en la Tabla de control la columna de selección,
en cuyo caso ingresamos el nombre del campo MARCA en Campo columna selección.
Imagen 2.7 - Configuramos distintos aspectos de la tabla de control
Luego podemos seleccionar algunas funciones estándar de la Tabla de control,
las cuales dependerán de que la tabla sea de entrada o salida.
En este caso seleccionamos el check PasarPág que agregará cuatro botones
debajo de la Tabla de control con los cuales nos podremos desplazar a lo largo y ancho de la tabla.
Imagen 2.8 - Agregamos los botones de desplazamiento en la tabla de control
Ahora especificaremos los includes en donde se creará el código de la Tabla de control.
Imagen 2.9 - Especificamos los includes para cada área del programa
En caso de que alguno de los includes no exista, se crearán.
Imagen 2.10 - Se crean los includes anteriores que no existen en el sistema
Finalmente veremos la tabla creada en la dynpro.
Imagen 2.11 - Visualizamos la tabla de control creada en pantalla
Modificamos el ancho de las columnas y las descripciones de los títulos para que se visualicen de la siguiente manera.
Imagen 2.12 - Adaptamos el ancho y los títulos de las columnas
Automáticamente se ha creado en nuestro programa una enorme cantidad de
código entre lo que encontraremos la declaración de la Tabla de control:
CONTROLS: TC_USUARIOS TYPE TABLEVIEW USING SCREEN 0200.
Imagen 2.13 - Declaración de la tabla de control que se genera automáticamente en el programa
El tipo TABLEVIEW corresponde a la estructura CXTAB_CONTROL con los siguientes campos:
Imagen 2.14 - Estructura de los campos de la tabla de control
El tipo CXTAB_COLUMN consta de los siguientes campos:
Imagen 2.15 - Estructura de las columnas de la tabla de control
En el PBO de la lógica de procesamiento de la dynpro veremos creado el siguiente código:
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_TC
INTO ST_USUARIOS_TC
WITH CONTROL TC_USUARIOS
CURSOR TC_USUARIOS-CURRENT_LINE.
MODULE TC_USUARIOS_GET_LINES.
*&SPWIZARD: MODULE TC_USUARIOS_CHANGE_FIELD_ATTR
ENDLOOP.
Imagen 2.16 - Código generado en PBO de la tabla de control
En el PAI de la lógica de procesamiento de la dynpro veremos creado el siguiente código:
PROCESS AFTER INPUT.
*&SPWIZARD: PAI FLOW LOGIC FOR TABLECONTROL 'TC_USUARIOS'
LOOP AT TI_USUARIOS_TC.
CHAIN.
FIELD ST_USUARIOS_TC-DNI.
FIELD ST_USUARIOS_TC-NOMBRE_APE.
FIELD ST_USUARIOS_TC-ESTADO_USU.
FIELD ST_USUARIOS_TC-DIRECCION.
FIELD ST_USUARIOS_TC-FECHA_NAC.
FIELD ST_USUARIOS_TC-ESTADO_CIVIL.
FIELD ST_USUARIOS_TC-CODIGO_POSTAL.
endchain.
FIELD ST_USUARIOS_TC-MARCA
MODULE TC_USUARIOS_MARK ON REQUEST.
ENDLOOP.
MODULE TC_USUARIOS_USER_COMMAND.
*&SPWIZARD: MODULE TC_USUARIOS_CHANGE_TC_ATTR.
*&SPWIZARD: MODULE TC_USUARIOS_CHANGE_COL_ATTR.
Imagen 2.17 - Código generado en PAI de la tabla de control
Utilizaremos la sentencia LOOP-ENDLOOP para recorrer cada elemento de la tabla de control.
Dentro de esta sentencia pueden haber otras sentencias como FIELD, MODULE, SELECT, VALUES y CHAIN-ENDCHAIN.
Debe existir una sentencia LOOP-ENDLOOP tanto en el PBO como en el PAI para cada Tabla de control de la pantalla.
Esto se debe a que mediante esta sentencia se copian los campos entre el programa ABAP y la pantalla y viceversa.
En el PBO, el campo del sistema SY-LOOPC contiene el número actual de líneas de la tabla de control.
En el PAI, contiene el número de líneas actualmente llenas.
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 cargar_tc_200.
*&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_TC
INTO ST_USUARIOS_TC
WITH CONTROL TC_USUARIOS
CURSOR TC_USUARIOS-CURRENT_LINE.
MODULE TC_USUARIOS_GET_LINES.
*&SPWIZARD: MODULE TC_USUARIOS_CHANGE_FIELD_ATTR
ENDLOOP.
Imagen 2.18 - Llenamos de registros la tabla de control con el module CARGAR_TC_0200
Y dentro del módulo CARGAR_TC_0200 introducimos el siguiente código:
Imagen 2.19 - Selección y asignación de los datos del module CARGAR_TC_0200
MODULE cargar_tc_200 OUTPUT.
CLEAR: ti_usuarios, st_usuarios_tc, ti_usuarios_tc.
REFRESH: ti_usuarios, ti_usuarios_tc.
IF NOT wa_screen_0100-dni IS INITIAL.
SELECT *
FROM zcvs_usuarios
INTO TABLE ti_usuarios
WHERE dni EQ wa_screen_0100-dni.
ELSE.
SELECT *
FROM zcvs_usuarios
INTO TABLE ti_usuarios.
ENDIF.
LOOP AT ti_usuarios INTO st_usuarios.
CLEAR st_usuarios_tc.
st_usuarios_tc-dni = st_usuarios-dni.
st_usuarios_tc-nombre_ape = st_usuarios-nombre_ape.
st_usuarios_tc-estado_usu = st_usuarios-estado_usu.
st_usuarios_tc-fecha_nac = st_usuarios-fecha_nac.
st_usuarios_tc-estado_civil = st_usuarios-estado_civil.
st_usuarios_tc-codigo_postal = st_usuarios-codigo_postal.
APPEND st_usuarios_tc TO ti_usuarios_tc.
ENDLOOP.
ENDMODULE.
 
 
 
Sobre el autor
Publicación académica de Alex Francisco Lemos Collazos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alex Francisco Lemos Collazos
Profesión: Ingeniero en Sistemas - Colombia - Legajo: QS36A
✒️Autor de: 174 Publicaciones Académicas
🎓Cursando Actualmente: Master S/4HANA Material Management
🎓Egresado de los módulos:
- Máster Material Management en SAP S/4HANA LOGISTIC
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP SD Nivel Inicial