✒️ABAP Los cortes de control utilizando tablas internas
ABAP Los cortes de control utilizando tablas internas
Cortes de control usando tablas internas en reportes
¿Cómo realizar un corte de control a una tabla interna para poder imprimir un listado por pantalla?
Supongamos que tenemos una tabla interna con registros de clientes que incluyen un importe entre sus campos y queremos obtener un listado de clientes donde se muestre en una sola linea el total por clientes. En este caso tendriamos que realizar un corte de control por cada nuevo cliente y otro corte para imprimir los resultados. Lo primero que hacemos es cargar la tabla interna de clientes con distintos registros, luego debemos ordenar la tabla interna de clientes segun el orden en el que queremos que se visualicen los datos, ahora recorremos la tabla para realizar el listado. Antes de realizar el corte de control dentro del LOOP debemos pasar los datos que se estan recorriendo a una estructura auxiliar, ya que ABAP completa con asteriscos todos los campos a la derecha del campo por el cual hacemos el corte.
Para realizar el corte de control por cliente usaremos la sentencia AT NEW seguida del campo numero de cliente (nrocli):
*Por cada nuevo cliente
AT NEW nrocli.
CLEAR v_importe_acumulado.
FORMAT COLOR 1.
WRITE:/ 'Cliente:', st_clientes_aux-nrocli.
ENDAT.
Internamente la sentencia AT NEW compara el actual numero de cliente con el anterior numero de cliente, si estos son distintos entonces se procesara el codigo que esta dentro del AT NEW.
Luego, como lo que queremos imprimir por pantalla es el total por cliente, acumulamos el importe:
*Acumulo el importe
ADD st_clientes_aux-importe TO v_importe_acumulado.
Para realizar la impresion de los datos usamos la sentencia AT END seguida del campo por el cual hacemos el corte (en este caso numero de cliente). Internamente la sentencia AT END compara el actual numero de cliente con el proximo numero de cliente, si estos son distintos entonces se procesará el codigo que esta dentro del AT END:
AT END OF nrocli.
Ejecutamos el programa y vemos el listado ordenado por cliente donde se muestra el total acumulado para cada uno de ellos.
Conceptos mas importantes:
-Un corte de control es una forma de estructurar un reporte de salida para poder sumarizar datos y mostrar totales por distintos campos del reporte.
-Una condición esencial que presentan los cortes de control es que la tabla de salida del reporte debe ordenarse por los campos por los cuales se va a realizar el corte de control.
-Es indispensable usar una estructura auxiliar para almacenar los datos del registro de la tabla interna del reporte ya que ABAP completará con asteriscos los campos a la derecha del campo por el cual realizamos el corte y se perderá la información almacenada en ellos.
-Principalmente usaremos las sentencias AT NEW y AT END
-La sentencia AT NEW campo comparará el valor actual del campo con el valor anterior, y en caso de ser distintos se procesará el codigo dentro del AT NEW
-La sentencia AT END campo comparará el valor actual del campo con el valor siguiente, es decir, el que se encuentra en la proxima vuelta de la tabla interna, y en caso de ser distintos se procesará el codigo dentro del AT END.
-Para sumar campos dentro del LOOP a la tabla interna del reporte podemos usar la sentencia ADD o tambien la sentencia SUM que se usa para sumarizar variables de tipo INTEGER, P o FLOAT
-Es posible realizar un corte de control por mas de un campo, en ese caso colocaremos en el AT NEW o en el AT END el campo que se encuentre mas a la derecha, por ejemplo suponiendo que tenemos nuestra tabla interna ti_tabla con los campos campo1, campo2 y campo3 en ese orden, si quisieramos realizar un corte de control por campo 3 solo colocaríamos AT NEW campo3 o AT END campo3
-Tambien existen las sentencias AT FIRST y AT LAST que no se usan muy a menudo pero pueden ayudar en algun requerimiento muy especifico.
 
 
 
Sobre el autor
Publicación académica de Diamela Serignese, en su ámbito de estudios para la Carrera Consultor ABAP.
Diamela Serignese
Profesión: Consultor Sap Crm / Solman - Argentina - Legajo: AA51D
✒️Autor de: 38 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
Certificación Académica de Diamela Serignese