✒️ABAP / Los cortes de control utilizando tablas internas Por Yeny Yanes Bautista
ABAP Los cortes de control utilizando tablas internas

Los cortes de control utilizando tablas internas
1. Qué es un corte de control?
Una de las tareas que más vamos a realizar como programadores ABAP es la confección de reportes de salida por pantalla.
Para realizar estos reportes vamos a trabajar con tablas internas, ya que de esta forma podremos almacenar los registros que obtenemos de las tablas bases de datos o cargar manualmente los registros de datos que surgen del procesamiento del programa y luego vamos a estructurar y formatear los datos que se mostrarán como salida del programa.
Cuando hablamos de estructurar y formatear nos referimos a: organizar la salida de los datos en la pantalla, dándoles un formato determinado, agrupando los campos de salida, ordenando el reporte por determinados campos, sumarizando campos, mostrando totales por distintos campos, entre otras cuestiones posibles,
Para reliazar todo eso vamos a utilizar lo que se denominan Cortes de control
<< Cortes de control: Es una forma de estructurar un reporte de salida por pantalla de modo de poder sumarizar datos y mostrar totales por distintos campos del reporte>>
Ejemplo:
Supongamos que tenemos que generar un reporte de clientes por región y distrito, en donde se muestre por cada región y distrito, los clentes existentes junto con sus importes. Tambien se desea mostrar el importe total por cliente, el importe total por distrito y el importe.
2. El paso a paso para implementar un corte de control
Lo cortes de control en definitiva son una técnica y como toda técnica, se encuentra compuesta por una serie de pasos que debemos seguir para que funcione correctamente.
1) Declarar una tabla interna de salida del reporte. La particularidad que va a tener esta tabla es que va a estar compuesta por cada uno de los campos que se desean incluir en el reporte de salida y el orden en el que s declaran los campos en la tabla interna va a ser el mism orden en el que se desea que esos campos se visualicen en pantalla
Para el reporte de clientes por región y distrito declaramos la tabla interna de salida TI_CLIENTES y el area de trabajo WA_CLIENTES:
* Tipo de la estructura de clientes
TYPES: BEGIN OF ty_clientes,
region(10) TYPE c,
distrito(10) TYPE c,
nrocliente(5) TYPE c,
importe TYPE i,
END OF ty_clientes.
* Tablas internas y estructuras
DATA: ti_clientes TYPE STANDARD TABLE OF ty_clientes,
wa_clientes LIKE LINE OF ti_clientes,
wa_clientes_aux LIKE LINE OF ti_clientes.
*Por una particularidad de ABAP vamos a necesitar declarar siempre una estrucutra auxiliar, cuyo nombre será WA_CLIENTES_AUX a parte de la que ya declaramos al momento de declarar la tabla interna.
* Flag DATA: wa_clientes_aux LIKE LINE OF ti_clientes.
2) Declarar una variable de tipo I para cada no de los importes que deseamos sumarizar
v_importe_total_distrito TYPE i,
v_importe_total_region TYPE i.
3) Borrar el contenido de la tabla interna TI_CLIENTES. Este paso es considerado una buena practica de programación ya que si bien todavía no llenamos con registros la tabla interna, podría suceder que esta quede con basura en memoria d ejecuciones anteriores por lo que se producirían errores en la ejecución del reporte. Para prevenir estas situaciones erróneas ejecutamos el REFRESH de la tabla interna TI_CLIENTES
REFRESH ti_clientes
3) Llenar el contenido de la tabla interna TI_CLIENTES
*----------------------------------------------------------------------* START-OF-SELECTION. *----------------------------------------------------------------------* *----------------------------------------------------------------------* * Agregamos los registros en la tabla interna *----------------------------------------------------------------------* CLEAR wa_clientes. wa_clientes-region = 'CAPITAL'. wa_clientes-distrito = 'Caballito'. wa_clientes-nrocliente = '00001'. wa_clientes-importe = 30. APPEND wa_clientes TO ti_clientes. CLEAR wa_clientes. wa_clientes-region = 'CAPITAL'. wa_clientes-distrito = 'Caballito'. wa_clientes-nrocliente = '00700'. wa_clientes-importe = 1000. APPEND wa_clientes TO ti_clientes. CLEAR wa_clientes. wa_clientes-region = 'QUILMES'. wa_clientes-distrito = 'Ezpeleta'. wa_clientes-nrocliente = '00172'. wa_clientes-importe = 50. APPEND wa_clientes TO ti_clientes. *----------------------------------------------------------------------* 4) Ordenar la tabla interna TI_CLIENTES por los campos en los cuales se va a realizar el corte e control * Ordenamos la tabla interna *----------------------------------------------------------------------* SORT ti_clientes BY region distrito nrocliente.
5) Recorrer la tabla interna TI_CLIENTES con la sentencia LOOP-ENDLOOP para pasar el contenido de la estrucutra o área de trabajo WA_CLIENTES A WA_CLIENTES_AUX.
* Recorremos la tabla interna *----------------------------------------------------------------------* LOOP AT ti_clientes INTO wa_clientes. * Copiamos el contenido del registro a una estructura auxiliar CLEAR wa_clientes_aux. wa_clientes_aux = wa_clientes. *----------------------------------------------------------------------*
6) Este es el paso mas importante de la técnica de corte de control
Para realizar un corte de control, ABAP pone a nuestra disposición 2 sentencias que nos facilitan el trabajo como prog.
La sentencia AT NEW:
AT NEW campo
Esta sentencia se ejecuta cuando se está procesando el último registro almacenado un valor determinado de campo
Esta sentencia compara el contenido del campo del registro actual de la tabla interna que se está procesando contra el contenido del campo del registro siguiente de la tabla interna que todavía no se procesó.
Si el resultado de esa comparación es que los contenidos de ambos campos son diferentes entonces se ejecuta la lógica ABAP que se encuentra dentro del AT END OF. Si estamos procesando el último registro de la tabla interna entonces compara el contenido del campo contra nada y el resultado de esa comparación es que son distintos por lo que se ejecuta la lógica ABAP
Si el resultado de esa comparación es que los contenidos de ambos campos son iguales entonces no se ejecuta la lógica ABAP que se encuentra dentro del AT END OF.
*----------------------------------------------------------------------*
* Por cada nuevo REGIÓN
*----------------------------------------------------------------------*
AT NEW region.
CLEAR v_importe_total_region.
FORMAT COLOR 1.
WRITE:/ sy-uline(83).
WRITE:/ 'Region:', wa_clientes_aux-region.
WRITE:/ sy-uline(83).
ENDAT
Por cada nuevo distrito vamos a ejecutar AT NEW DISTRITO y aqui dentro vamos a hacer 2 puntos fundamentales que son incializar la variable v_importe_total_distrito que sumariza el importe por distrito e imprimir el distrito que estamos procesando.
AT NEW distrito.
CLEAR v_importe_total_distrito
FORMAT COLOR 5.
WRITE:/10 'Distrito:', wa_clientes_aux-distrito.
ENDAT.
Por cada nuevo numero de cliente vamos a ejecutar AT NEW NROCLIENTEy aqui dentro vamos a incializar la variable v_importe_total_cliente que sumariza el importe por el cliente.
AT NEW nrocliente.
CLEAR v_importe_acumulado.
ENDAT.
Una vez que se ejecutaron cada uno de los AT NEW entonces fuera de ellos será necesario sumarizar o acumular cada uno de los reporte que mostraremos a continuación en el reporte.
ADD wa_clientes_aux_importes TO v_importe_total_cliente
ADD wa_clientes_aux_importes TO v_importe_total_distrito
ADD wa_clientes_aux_importes TO v_importe_total_region
Luego se imprime el total por cliente, es decir, cuando se ejecute el último registro correspondiente al número de cliente que estamos procesando. Para ello vamos a ejecutar la sentencia AT END OF NROCLIENTE y en caso de ser el último de cliente se ejecutará la lógica que se encuentra dentro del AT END OF que consiste básicamente en imprimir en pantalla el número de cliente y el importe total acumulado por cliente tal como vemos a continuación:
* Imprimir el total por cliente
AT END OF nrocliente.
FORMAT COLOR 3.
WRITE:/30 'Cliente:' wa_clientes_aux-nrocliente,
50 'Importe Total Cliente', v_importe_total_cliente
ENDAT.
Y por último vamos a ejecutar la sentencia AT END OF REGION y en caso de ser la última region se ejecutará la lógica que se encuentra dentro del AT END OF que consiste en imprimir en pantalla el importe total acumulado por región:
AT END OF region.
FORMAT COLOR 1.
WRITE:/30 'Cliente:' wa_clientes_aux-nrocliente,
50 'Importe Total Region: ', v_importe_total_region
ENDAT.
ENDLOOP
 
 
 
Sobre el autor
Publicación académica de Yeny Gisela Yanes Bautista, en su ámbito de estudios para la Carrera Consultor ABAP Nivel Inicial.
Yeny Gisela Yanes Bautista
Profesión: Ingeniera en Sistemas - Honduras - Legajo: XC34C
✒️Autor de: 46 Publicaciones Académicas
🎓Egresado de los módulos:
- Master Funcional ABAP
- Master ABAP for HANA
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial






Disponibilidad Laboral: FullTime


















