![](/cvo_files/imgs_sap_abap/logos/logo_cvo_academy_it.png)
✒️ABAP Los cortes de control utilizando tablas internas
ABAP Los cortes de control utilizando tablas internas
![ABAP Los cortes de control utilizando tablas internas ABAP Los cortes de control utilizando tablas internas](https://www.cvosoft.com/cvo_files/imgs_sap_abap/og-images/461.jpg)
Cortes de control
Es una forma de estructurar y formatear un reporte de salida por pantalla de modo que se sumarizen datos y se muestren distintos totales por campo del reporte. Lo vamos a necesitar para organizar la salida de los datos, dar un formato determinado, agrupar campos de salida, ordenar el reporte por campo, sumarizar datos, etc.
Un ejemplo para entenderlo mejor es el de un reporte de clientes por region y distrito; en el que se muestre por cada region y distrito los clientes junto con sus importes. Ademas se debe mostrar el total de importes por cliente, distrito y region.
Los cortes de control son una tecnica que esta compuesta por una serie de pasos:
- Primero se declara una tabla interna de salida del reporte, el detalle va a ser que se van a declarar los campos en el orden que se quieran visualizar en pantalla. (se declara ty_clientes, ti_clientes y wa_clientes)
- La tabla debe tener los campos en orden(region(10) tipo c, distrito(10) tipo c, nrocliente(5) tipo c, importe tipo i)
- Ademas siempre se debera necesitar una estructura auxiliar (wa_clientes_aux)
- Tambien se declararan las variables en donde se vallan a sumarizar los importes totales: v_importe_total_cliente tipo i, v_importe_total_distrito tipo i y v_importe_total_region tipo i.
- Luego se inicializa la ti_clientes utilizando REFRESH y posterior a eso se procede con el llenado de la tabla interna completando cada uno de los campos.
- Despues se necesita ordenar con la sentencia SORT BY la ti_clientes por los campos en los que se realizara el corte de control (en este caso: region, distrito, nrocliente)
- Luego se recorre la tabla interna dentro de un LOOP-ENDLOOP en donde estara el corazon de la tecnica.
- Dentro del LOOP lo primero es pasar el contenido de la estructura wa_clientes a la estructura auxiliar wa_clientes_aux.
- Ahora la parte mas importante de la tecnica que se realizan con dos sentencias de ABAP:
AT NEW <campo>: se ejecuta por cada valor nuevo que se encuentre almacenado en <CAMPO>. Esta sentencia mira en un campo el registro anterior que se proceso para comparar con registro actual. Si el resultado da que los contenidos de ambos son diferentes entonces ejecuta la logica dentro del AT NEW; si el resultado da que son iguales entonces no se ejecuta la logica. Si es el primer registro entonces compara con nada por lo que seran distintos y se ejecutara.
AT END OF <campo>: se ejecuta cuando procesa el ultimo registro que tenga almacenado un valor determinado en <campo>. Esta sentencia mira en un campo el registro siguiente que no se proceso para comparar con el registro actual que este en proceso. Si el resultado es que son diferentes entonces ejecuta la logica dentro de AT END OF; si el resultado da que son iguales entonces no se ejecuta. Si es el ultimo registro entonces compara con nada por lo que seran distintos y se ejecutara.
- Regresando al reporte (region, distrito y nrocliente) entonces se ejecutaria de la siguiente forma para cada nueva region:
AT NEW region. (por cada nueva region se ejecutara el AT NEW)
CLEAR v_importe_total_region. (inicializamos la variable que va a sumarizar el importe por region)
FORMAT COLOR 1.
WRITE:/ 'Region: ', wa_clientes_aux-region. (se imprime la region que se esta procesando)
ENDAT.
- Para el distrito lo mismo:
AT NEW distrito. (por cada nuevo distrito se ejecutara el AT NEW)
CLEAR v_importe_total_distrito. (inicializamos la variable que va a sumarizar el importe por distrito)
FORMAT COLOR 5. (le da un color diferente a la salida por pantalla)
WRITE:/10 'Distrito: ', wa_clientes_aux-distrito. (se imprime el distrito que se esta procesando)
ENDAT.
- Para el cliente :
AT NEW nrocliente. (por cada nuevo nrocliente se ejecutara el AT NEW)
CLEAR v_importe_total_cliente. (inicializamos la variable que sumariza el importe total por cliente)
ENDAT.
- Luego que se ejecuten todos los AT NEW, fuera de ellos se tiene que sumarizar cada uno de los importes:
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.
- Despues se imprime el importe 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.
- Luego imprimimos el total por distrito:
AT END OF distrito.
FORMAT COLOR 5.
WRITE:/30 'Distrito:', v_importe_total_distrito.
ENDAT.
- Por ultimo el importe total por distrito:
AT END OF region.
FORMAT COLOR 1.
WRITE:/30 'Importe total region', v_importe_total_region.
ENDAT.
 
 
 
Sobre el autor
Publicación académica de Luciano Martinez, en su ámbito de estudios para la Carrera Consultor ABAP.
Luciano Martinez
Profesión: Consultor Abap - Argentina - Legajo: LR86R
✒️Autor de: 66 Publicaciones Académicas
🎓Egresado del módulo:
Disponibilidad Laboral: FullTime
Presentación:
Me capacito para desempeñar el rol de un consultor abap, además soy sql developer jr, como ambos lenguajes (sql y abap) se relacionan, hace que mi perfil sea más completo y se complemente.
Certificación Académica de Luciano Martinez