🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP Los cortes de control utilizando tablas internas

ABAP Los cortes de control utilizando tablas internas

ABAP Los cortes de control utilizando tablas internas

Los cortes de control utilizando tablas internas


1. ¿Qué es un Corte 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.

2. El paso a paso para implementar un corte de control

Los 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. Se tomará de ejemplos el "Reporte de Clientes por Región y Distrito".

Lo primero que se necesita es declarar la tabla interna de salida del reporte. La particularidad que tendrá 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 se declaran los campos en la tabla interna será el mismo orden en el que se desea que esos campos se visualicen en pantalla. Declaramos la tabla interna TI_CLIENTES y la estructura WA_CLIENTES.


Código de ejemplo:

TYPES: BEGIN OF ty_clientes,

region(10) TYPE c,

distrito(10) TYPE c,

nrocliente(5) TYPE c,

importe TYPE i,

END OF ty_clientes.

*Tabla interna y estructura

DATA: ti_clientes TYPE STANDARD TABLE OF ty_clientes,

wa_clientes LIKE LINE OF ti_clientes.


Por una particularidad de ABAP se necesita declarar una estructura auxiliar, el nombre será WA_CLIENTES_AUX.


Código de ejemplo:

DATA: wa_clientes_aux LIKE LINE OF ti_clientes.


Se declara la variable de tipo I para cada unio de los importes que deseamos sumarizar.


Código de ejemplo:

DATA: v_importe_total_clientes TYPE i,

v_importe_total_distrito TYPE i,

v_importe_total_region TYPE i.


Es una buena práctica de programación borrar la tabla interna, de este modo aseguramos que no hay contenido y que no habrá errores en la ejecución del reporte. Recordamos que esto se hacía con REFRESH. Una vez hecho esto se llena la tabla interna con contenido.


Código de ejemplo:

REFRESH ti_clientes.

CLEAR ti_clientes.

wa_clientes-region = 'CAPITAL'.

wa_clientes-distrito = 'Caballito'.

wa_clientes-nrocliente = '00001'-

wa_clientes-importe = 30.

APPEND wa_clientes TO ti_clientes.


Luego se necesita que la tabla interna TI_CLIENTES sea ordenada por los campos por los cuales se va a realizar el corte de control. En este caso habrá que ordenarlo por REGION, DISTRITO y NROCLIENTE. Para ordenador recordemos que se usa la sentencia SORT y si no se especifica el tipo de ordenamiento por defecto se realizará en forma ascendente.


Código de ejemplo:

SORT ti_clientes BY region distrito nrocliente.


Vamos a recorrer la tabla interna TI_CLIENTES y es aquí donde dentro de este LOOP-ENDLOOP en donde se realiza el corazón de la técnica de corte de control. Una vez dentro del LOOP lo primero que vamos a hacer y que es sumamente importante es pasar el contenido de la estructura o área de trabajo WA_CLIENTES a WA_CLIENTES_AUX.


Código de ejemplo:

* 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.


Ahora viene la parte más importante de la técnica de corte de control. ABAP pone a nuestra disposición dos sentencias que nos facilitan el trabajo como programadores para realizar un corte de control, la sentencia AT NEW cuya sintaxis es la siguiente:


AT NEW CAMPO.

....

ENDAT.


La sentencia AT NEW campo se ejecuta por cada valor nuevo que se encuentra almacenado en el campo. Esta sentencia mira hacia atrás, es decir, compara el contenido del campo del registro actual de la tabla interna que se está procesando contra el contenido del campo del registro anterior de la tabla interna que se procesó.

  • Si el resultado de esa comparación es que lo los contenidos de ambos campos son diferentes, entonces se ejecutara la lógica ABAP que se encuentra dentro del AT NEW.
  • 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 NEW.
  • Si estamos procesando el primer 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 que se encuentra dentro del AT NEW.

Luego tenemos la sentencia AT END OF campo. Esta sentencia se ejecuta cuando se está procesando el último registro que tenga almacenado un valor determinado de ese campo.

La sentencia AT END OF campo mira hacia adelante, es decir, 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 esta 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 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.
  • Si estamos procesando el último registro de la tabla interna, entonces comparará 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 que se encuentra dentro del AT END OF.

Volviendo a nuestro reporte, deberíamos de implementar de la siguiente manera estas sentencias:

Por cada nueva región vamos a ejecutar un AT NEW REGION y aquí dentro vamos a hacer dos puntos fundamentales que son inicializar la variable V_IMPORTE_TOTAL_REGION que sumarizara el importe por región e imprimir la región que estamos procesando.


Código de ejemplo:

* Por cada nueva región

AT NEW region.

CLEAR v_importe_total_region.

FORMAT COLOR 1.

WRITE:/ s-uline(83).

WRITE:/ 'Region:', wa_clientes_aux-region.

WRITE:/ sy-uline(83).

ENDAT.


Por cada nuevo distrito vamos a ejecutar un AT NEW DISTRITO e igual que antes es fundamental inicializar la variable V_IMPORTE_TOTAL_DISTRITO que sumariza el importe por distrito.


Código de ejemplo:

* Por cada nueva región

AT NEW distrito.

CLEAR v_importe_total_distrito.

FORMAT COLOR 5.

WRITE:/ s-uline(83).

WRITE:/ 'Distrito:', wa_clientes_aux-distrito.

WRITE:/ sy-uline(83).

ENDAT.


Por cada nuevo número de cliente vamos a ejecutar un AT NEW NROCLIENTE e igual que antes es fundamental inicializar la variable V_IMPORTE_TOTAL_NROCLIENTE que sumariza el importe por cliente.


Código de ejemplo:

AT NEW nrocliente.

CLEAR v_importe_total_nrocliente.

FORMAT COLOR 10.

WRITE:/ s-uline(83).

WRITE:/ 'Distrito:', wa_clientes_aux-nrocliente.

WRITE:/ sy-uline(83).

ENDAT.


Una vez ejecutados los AT NEW será necesario sumarizar o acumular cada uno de los importes que mostraremos a continuación en el reporte.


Código de ejemplo:

ADD wa_clientes_aux-importe TO v_importe_total_cliente.

ADD wa_clientes_aux-importe TO v_importe_total_distrito.

ADD wa_clientes_aux-importe TO v_importe_total_region.


Luego imprimimos el total por cliente, por distrito y por región, el primero esto se hará cuando se ejecute el último registro correspondiente al número de cliente que estamos procesando, el segundo cuando se ejecute el último registro correspondiente al distrito y el tercero cuando se ejecute el último registro de región.

Para ello vamos a ejecutar la sentencia AT END OF CLIENTE (luego seria con AT END OF DISTRITO y AT END OF REGION) y en caso de ser el último número de cliente (distrito o región) 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 (distrito o región) y el importe total acumulado por cliente (distrito o región) tal como vemos a continuación.


Código de ejemplo:

* Imprimimos total por distrito

AT END OF distrito.

FORMAT COLOR 5.

WRITE:/10 'Importe Total distrito', v_importe_total_distrito.

ENDAT.



 

 

 


Sobre el autor

Publicación académica de Manel Gangolells Isanta, en su ámbito de estudios para la Carrera Consultor ABAP.

SAP SemiSenior

Manel Gangolells Isanta

Profesión: Técnico de Sistemas Informáticos - España - Legajo: MN13W

✒️Autor de: 33 Publicaciones Académicas

🎓Cursando Actualmente: Consultor ABAP Nivel Inicial

Certificación Académica de Manel Gangolells

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "Los cortes de control utilizando tablas internas" de la mano de nuestros alumnos.

SAP SemiSenior

Cortes de control con tablas internas. Puedo realizar el corte segun el acumulado que desee realizar muy util. utilizando sentencias at.

Acceder a esta publicación

Creado y Compartido por: Christian Camilo Alzate Duque

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP SemiSenior

Cortes de control utilizando tablas internas. En este ejemplo ilustran la manera de hacer cortes de control los pasos a seguir son. 1. Cargar tabla interna con distintos registros. 2. Ordenar la tabla interna según orden que se quiere que se visualicen los datos. 3. Recorrer la tabla para realizar listado. 4. Dentro del LOOP se deben pasar los datos que se están recorriendo a una estructura auxiliar. 5. AT NEW compara los campos por los cuales se desea realizar el corte de control. 6. Se acumulan los valores por los cuales se quieren sumar, contar. 7. Para la impresión de los datos se utiliza la sentencia AT END seguida del campo por el cual se realiza el corte.

Acceder a esta publicación

Creado y Compartido por: Fabio Gallo

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

video para crear cortes de control utilizndo tablas internas. con la sentencia AT NEW se realiza el corte de control.

Acceder a esta publicación

Creado y Compartido por: Rainer Diaz

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Unidad 3 - 2 - Cortes de control utilizando tablas internas en reportes. Los cortes de control son utilizados para la generacion e listados, utilizando la sentencia AT. **Antes de realizar el corto de control dentro de un loop. Debemos pasar los datos que se estan recorriendo a una estructura auxiliar.. Esto se debe a que ABAP complete con * todos los campos a la derecha del campo por el cual realizamos el corte.corte. AT NEW: INternamente compara el actual campo con el valr anterior. Si estos son disitntos entonces se preocesa el codigo que esta dentro del AT NEW. AT END: para realizar la impresion de los datos, utilizamos la sentencia AT END. Intermente compara el campo actual con el proximo, si estos son disitintos entonces se procesara...

Acceder a esta publicación

Creado y Compartido por: Matias Ciutat

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Cortes de control utilizando tablas internas en reportes. Veremos como realizar corte de control a una tabla interna para poder imprimir un listado por pantalla. una tabla interna con Registro de clientes que incluyen un importe entre los campos. Y queremos obtener un listado de clientes donde se muestre una solo linea el total por clientes. En este caso se realizaría un corte de control por cada nuevo cliente y un corte para imprimir los resultados. Cargar tabla de clientes con diferentes registros. Abap completa con asteriscos todos los campos a la derecha del campo por el cual hacemos el corte. Sentencia AT NEW= compara el actual numero de cliente con el anterior numero de cliente. en caso de ser distintos se procederá....

Acceder a esta publicación

Creado y Compartido por: Rafael Razo

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

- Cortes de control utilizando tablas internas Corte de control: Forma de estructurar un reporte de salida de modo de poder sumarizar datos y mostrar totales por distintos campos del reporte. Una condición importante de los cortes de control es que la tabla de salida del reporte debe ordenarse por los campos que se realiza el corte de control. Es indispensable usar una tabla auxiliar para almacenar los datos del registros de la tabla interna, ya que ABAP llenará con asteriscos los campos que se encuentren a la derecha del campo por el que se realiza el corte y se perderá la info almacenada en ellos. AT NEW <campo> : Compara el valor actual del campo con el anterior, si es distinto entonces se procesa el código...

Acceder a esta publicación

Creado y Compartido por: Sandra Erika Bernabe Abreu

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Cortes de control utilizando tablas internas Corte de control: Estructurá un reporte de salida para poder sumarizar datos y mostrar totales por distintos campos del reporte. Una condición importante de los cortes de control es que la tabla de salida del reporte debe ordenarse por los campos que se realiza el corte de control. Es indispensable usar una estructura auxiliar para almacenar los datos del registros de la tabla interna, ya que ABAP llenará con asteriscos los campos que se encuentren a la derecha del campo por el que se realiza el corte y se perderá la info almacenada en ellos. AT NEW <campo> : Compara el valor actual del campo con el anterior, si es distinto entonces se procesa el código...

Acceder a esta publicación

Creado y Compartido por: Miguel Mauricio Sierra Cardona

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Cortes de control utilizando tablas internas Corte de control: Forma de estructurar un reporte de salida de modo de poder sumarizar datos y mostrar totales por distintos campos del reporte. Una condición importante de los cortes de control es que la tabla de salida del reporte debe ordenarse por los campos que se realiza el corte de control. Es indispensable usar una tabla auxiliar para almacenar los datos del registros de la tabla interna, ya que ABAP llenará con asteriscos los campos que se encuentren a la derecha del campo por el que se realiza el corte y se perderá la info almacenada en ellos. AT NEW <campo> : Compara el valor actual del campo con el anterior, si es distinto entonces se procesa el código...

Acceder a esta publicación

Creado y Compartido por: Juan Rodrigo Meza Avina

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

CORTES DE CONTROL UTILIZANDO TABLAS INTERNAS: Para hacer un corte de control tenemos que seguir los siguientes pasos: Cargar la tabla interna. Ordenar la tabla segun el orden que queramos, esto lo hacemos con la sentencia SORT. Se recorre la tabla interna para realizar el listado. Esto lo haremos con la sentencia LOOP AT. Antes de realizar el corte debemos pasar los datos a una estructura auxiliar. Se realiza el corte con la sentencia AT NEW que compara el valor del campo actual con el del campo anterior y si son distintos se procesa el codigo de AT NEW. Usamos ADD TO para acumular los importes. Para imprimir los datos usamos AT END seguida del campo por el cual hacemos el corte, que compara el campo actual con proximo...

Acceder a esta publicación

Creado y Compartido por: Gema Moreno Ferreiro

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


CORTES de CONTROL Es un forma de estructurar un reporte de salida de modo de poder sumar campos y poder mostrar totales por los campos seleccionados del reporte. Una condición esencial para los cortes de control es que la tabla debe estar ordenada por los campos a los cuales se le va a realizar el corte de control. Es indispensable utilizar una estructura auxiliar para almacenar los datos internos del registro . Se va a utilizar la sentencias: AT NEW <campo> Esta compara el valor anterior del campo con el valor actual, si es diferente entonces se procesará lo que esta en AT NEW AT END <campo> Compara el valor actual con el valor siguiente, si son diferente se procesará el código del AT END. Se puede realizar...

Acceder a esta publicación

Creado y Compartido por: Maria Guadalupe Gonzalez Sanchez

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 79.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!