✒️ABAP Los cortes de control utilizando tablas internas
ABAP Los cortes de control utilizando tablas internas
Resumen
Unidad 3 lecció 2
Los cortes de control utilizando tablas internas.
1- Que es un corte de control?
Xa realizar los reportes vamos a trabajar con tablas internas, ya q de esta forma podemos almacenar, los registros q obtenemos de las tablas DB o cargar manual/ los registro q suger del procesamiento del programa y luego vamos a estructurar y formatear los datos q se muestran.
Cuando hablamos de estructurar y formatear nos referimos a:
== Organizar la salida de los datos en pantalla, dándoles un formato determinado.
== Ordenando el reporte a determinados campos
== Sumarizando campos
== Mostrando totales
== Entre otros. Todo esto se denomina cortes de control.
Corte de control => es una forma de estructurar un reporte de salida x pantalla de modo de poder sumarizar datos y mostrar totales, por distintos campos.
Ej corte de control: Supongamos q tenemos q generar un reporte de clientes x región y distrito, en donde se muestre x c/region x distrito, los clientes existentes junto con sus importes. También se desea mostrar el importe total x cliente, el importe total x distrito, y el importe total x región, luego de aplicar la técnica corte de control de salida por pantalla.
2- El paso a paso xa implementar un corte de control.
Toda técnica debe cumplir una serie de pasos y son:
Seguimos con el ej: Reporte de clientes región y distrito.
1ro declarar la tabla interna de salida del reporte. La particularidad q va a tener la tabla, es q esta compuesta x c/u de los campos q se desea incluir en el reporte de salida. y el orden en q se declaran los campos en q se declaran en la tabla interna, va hacer el mismo orden den el q se desea q esos campos se visualicen en pantalla.
Declaramos tabla interna ti_clientes y estructura o área de trabajo wa_clientes.
Como TYPES. (tipos)
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.
* una particularidad de ABAP se declara una estructura auxiliar wa_clientes_aux.
DATA: wa_clientes_aux LIKE LINE OF ti_clientes.
x último declaramos un variable x c/u de los importes
DATA: w_importe_total_cliente TYPE i,
w_importe_total_distrito TYPE i,
w_importe_total_region TYPE i.
Borramos contenido de la tabla interna ==> REFRESH ti_clientes.
En el día a día del programador ABAP, se toma la tabla DB y luego realizar el procesamiento con ellos (datos) q sería la información precisa, con la cual se va a elaborar el reporte.
Luego ordenar la tabla interna x Región, distrito y cliente.
* ordenamos la tabla
SORT ti_clientes BY región distrito nrocliente.
A continuación recorrer la ti_clientes y es aquí dentro de este LOOP-ENDLOOP => se realiza el corazón de la técnica de corte de control.
dentro del LOOP => sumamente importante es PASAR el contenido de la estructura wa_clientes a wa_clientes_aux.
Recorremos la tabla interna
LOOP AT ti_clientes INTO wa_clientes.
*copiamos el contenido del registro a aun estructura wa_clientes_aux.
CLEAR wa_clientes_aux.
wa_clientes_aux = wa_clientes.
END LOOP.
Esto es lo importante de la técnica de corte de control
ABAP => Dos sentencias
AT NEW campo.
.....
ENDAT.
La sentencia AT NEW campo. se ejecuta x c/valor nuevo q se encuentre almacenado en campo.
La sentencia AT NEW campo mira hacia atrás, es decir compara el contenido del campo del registro actual de la tabla interna q se esta procesando contra el contenido del campo del registro anterior de la tabla interna q se proceso.
- Si el resultado de esta comparación es q los contenido de ambos campos son DIFERENTES entonces se ejecuta la lógica ABAP q se encuentra dentro de AT NEW.
- Si el resultado de los campos son iguales entonces NO se ejecuta la lógica.
- Si estamos procesando el primer registro el campara el contenido del campo contra nada y aquí se ejecuta la logic de AT NEW.
Y la sentencia AT END OF campo.
....
ENDAT.
La sentencia AT END OF campo se ejectua cuando se esta procesando el último registro q tenga almacenado un vlr determinado en el campo.
Esta sentencia mira hacia adelante es decir compara el contenido del campo del registro actual de la tabla interna q se esta procesando contr el contenido del campo del registro sgnte de la tabla interna q todavi no se proceso.
- Si el resultado de esta comparacion es q los contenidos de ambos campos son diferentes entonces se ejecuta la lógica ABAP q se encuentra dentro del AT END OF.
- Si el resultado de ambos campos son iguales no se ejecuta esta lógica.
- Si estamos procesando el último registro de la tabla interna entonces compara el contendio del campo contra nada y el resultado es distinto entonces se ejecuta la logica ABAP q se encuentra denro del AT END OF.
X c/nueva region vamos a ejecutar un AT NEIW REGION y aqui hacemos dos puntos q son:
== Inicializar las variables v_importe_total_region q sumara el importe x region.
== E imprimir la region q estamos procesando
* X c/nueva region
AT NEW region
CLEAR v_importe_total_region.
FORMAT COLOR 1.
WRITE:/ sy-uline(83).
WRITE:/ 'Region :', wa_clientes_aux.region.
WRITE:/ sy-unile(83).
ENDAT.
X c/nuevo distrito vamos a ejecutar un AT NEW distrito, aquí dentro vamos a hacer dos puntos fundamentales q son inicializar la variable v_importe_total_distrito q sumarice el importe x distrito e imprimir el distrito q estamos procesando.
* x c/nuevo distrito
AT NEW distrito
CLEAR v_importe_total_distrito.
FORMAT COLOR 5.
WRITE:/10 'Distrito:', wa_clientes_aux.distrito.
ENDAT.
X c/nuevo numero de cliente vamos ajecutar un AT NEW nrocliente y aqui dentro vamos a incializar la variable v_importe_total_cliente.
* x cada nuevo cliente
AT NEW nrocliente.
CLEAR v_importe_total_cliente.
ENDAT.
Una vez q se ejecutaron c/u de los AT NEW entonces fuera de ellas será necesario sumarizar o acumular c/u de los importes q mostraremos a continuación en el reporte.
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.
Vamos a imprimir el total de cliente hacer cuando se ejecute el ultimo registro correspondiente al numero de cliente q estamos procesando.
Sentencia AT END OF nrocliente, q en caso de ser el ultimo cliente se ejecutara la lógica q se encuentra dentro del AT END OF q consiste en imprimir en pantalla el numero del cliente y el importe total acumulado x cliente.
* imprimir total de 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 vamos a imprimir el total x distrito. esto lo vamos hacer cuando se ejecute el ultimo registro correspondiente al distrito q estamos procesando.
* imprimir total distrito
AT END OF distrito
FORMAT COLOR 5.
WRITE:/10 'Importe total distrito ', v_importe_total_distrito.
ENDAT.
X ultimo hacemos lo mismo con la región.
Aquí ejecutamos la sentencia AT END OF región. en caso de ser la ultima región se ejecutará la lógica a se encuentre dentro del AT END OF. q consiste en imprimir el importe total acumulado x región.
 
 
 
Sobre el autor
Publicación académica de Gustavo Betancur Guzmán, en su ámbito de estudios para la Carrera Consultor ABAP.
Gustavo Betancur Guzmán
Profesión: Ingeniero de Sistemas - Colombia - Legajo: WS86O
✒️Autor de: 164 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP MM Nivel Avanzado
- Carrera Consultor en SAP MM Nivel Inicial