![](/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/133.jpg)
Cortes de Control utilizando tablas internas en reportes.
Esto simplifica mucho la tarea del programador en la generación de reportes. Utilizando sentencias AT.
EJ: En este ejemplo se realiza un corte de control a una tabla interna para poder imprimir un listado por pantalla en una sola linea por cliente.
*Tipo de Esctructura de Clientes
TYPES: BEGIN OF ty_clientes,
nrocli(5) TYPE c, region(4) TYPE c,
distrito(3) TYPE c, cuenta(5) TYPE c,
concepto(30) TYPE c,
importe TYPE i,
END OF ty_clientes.
* Tablas internas y estructuras
DATA: ti_clientes TYPE STANDARD TABLE OF ty_clientes,
st_clientes LIKE LINE OF ti_clientes,
st_clientes_aux LIKE LINE OF ti_clientes.
* Flag
DATA: v_importe_acumulado TYPE i.
*----------------------------------------------------------------------* START-OF-SELECTION. *----------------------------------------------------------------------*
* 1 st_clientes-nrocli = '00001'.
st_clientes-region = 'RECA'.
st_clientes-distrito = '202'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'IVA100%'.
st_clientes-importe = 30.
INSERT st_clientes INTO TABLE ti_clientes.
* 2 st_clientes-nrocli = '00005'.
st_clientes-region = 'RECA'.
st_clientes-distrito = '202'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'RECARGOS NPRIV'.
st_clientes-importe = 90.
INSERT st_clientes INTO TABLE ti_clientes.
* 3* st_clientes-nrocli = '00012'.
st_clientes-region = 'RECA'.
st_clientes-distrito = '202'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'IVA21%'.
st_clientes-importe = 20.
INSERT st_clientes INTO TABLE ti_clientes.
* 4 st_clientes-nrocli = '00012'.
st_clientes-region = 'RECA'.
st_clientes-distrito = '202'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'IVA21%'.
st_clientes-importe = 40.
INSERT st_clientes INTO TABLE ti_clientes.
* 5 st_clientes-nrocli = '00005'.
st_clientes-region = 'RECA'.
st_clientes-distrito = '202'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'RECARGOS NPRIV'.
st_clientes-importe = 30.
INSERT st_clientes INTO TABLE ti_clientes.
* 6 st_clientes-nrocli = '00001'.
st_clientes-region = 'RECA'.
st_clientes-distrito = '202'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'IVA100%'.
st_clientes-importe = 10.
INSERT st_clientes INTO TABLE ti_clientes.
* Ordeno la tabla interna
SORT ti_clientes BY nrocli region distrito cuenta concepto. "Ordeno la tabla por numero de clientes
* Recorro la tabla interna
LOOP AT ti_clientes INTO st_clientes.
* Copio el contenido del registro a una estructura auxiliar
CLEAR st_clientes_aux. st_clientes_aux = st_clientes.
* Por cada nuevo cliente
AT NEW nrocli. "AT NEW compara el actual número de cliente con el anterior número de cliente si estos son distintos entonces se procesara el código que está adentro del AT NEW
CLEAR v_importe_acumulado.
FORMAT COLOR 1.
WRITE:/ 'Cliente:', st_clientes_aux-nrocli.
ENDAT.
* Acumulo el importe
ADD st_clientes_aux-importe TO v_importe_acumulado.
AT END OF nrocli. " AT END compara el actual número de cliente con el próximo número de cliente si son distintos se procesa el código que esta adentro del AT END
* Imprimo titulos de los detalles
FORMAT COLOR 1.
WRITE:/10 'Region',
20 'Distrito',
30 'Cuenta',
45 'Concepto',
55 'Importe Total'.
WRITE: /10 st_clientes_aux-region,
20 st_clientes_aux-distrito,
30 st_clientes_aux-cuenta,
45 st_clientes_aux-concepto,
55 v_importe_acumulado.
WRITE:/ sy-uline.
ENDAT. ENDLOOP.
Un corte de control es una forma de estructura reporte de salida de modo de poder sumarizar datos y mostrar totales por distintos campos del reporte. Una condición escensial que presentan los cortes de control es que la tabla de salida del reporte debe ordenarse por los campos se va a realizar el corte de control. Es indispensable utilizar una estructura auxiliar para almacenar los datos de registros de la tabla interna del reporte ya que ABAP completa con * los campos que se encuentren a la derecha del campo o por el cual realizamos el corte y se perderá la información almacenada en ello.
- AT NEW campo: comparará el valor actual del campo con el valor anterior, en caso de ser distinto entonces se procesará el código dentro del AT NEW.
- AT END campo: comparará el actual valor del campo con el valor siguiente, es decir el que se encuentra en la proxima vuelta de la tabla interna, en caso de ser distinto entonces se procesa el código interno del AT END.
- Para sumar campos dentro del LOOP a la tabla interna del reporte se puede utilizar la sentencia ADD o también la sentencia SUM que se utiliza para sumar variables tipo integrer, float. Es posible realizar un corte de control por más de un campo en ese caso ponemos en el AT NEW o AT END el campo que se encuentre mas a la derecha.
 
 
 
Sobre el autor
Publicación académica de Juan Carlos Pavicich, en su ámbito de estudios para la Carrera Consultor ABAP.
Juan Carlos Pavicich
Profesión: Técnico Informático - Argentina - Legajo: VR91L
✒️Autor de: 116 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Presentación:
Tengo el agrado de dirigirme a ud/s con el objeto de mencionar mi experiencia y conocimientos técnicos necesarios para desarrollar actividades en el rubro de su empresa.
Certificación Académica de Juan Pavicich