✒️ABAP Los cortes de control utilizando tablas internas
ABAP Los cortes de control utilizando tablas internas
LECCION 2 – Cortes de Control en Tablas internas:
Cuando trabajamos realizando reportes, se nos puede presentar la necesidad de ordenar la tabla interna de salida del reporte, de una determinada forma en donde se agrupen los datos a mostrar en la pantalla.
Para realizar cortes de control vamos a utilizar las siguientes sentencias:
- AT NEW: esta sentencia comparará el actual valor del campo con el valor anterior, en caso de ser distintos entonces se procesará el código dentro del AT NEW.
- AT END: esta sentencia comparará el actual valor del campo con el valor siguiente, es decir el que se encuentra en la próxima vuelta de la tabla interna, en caso de ser distintos entonces se procesará el código dentro del AT END.
- AT FIRST: esta sentencia se ejecutará cuando estemos leyendo el primer registro de la tabla interna.
- AT LAST: esta sentencia se ejecutará cuando estemos leyendo el último registro de la tabla interna.
La tabla de salida del reporte debe ordenarse por los campos por los cuales se va a realizar el corte.
Es indispensable utilizar una estructura auxiliar para almacenar los datos del registro de la tabla interna del reporte ya que ABAP completará con asteriscos los campos que se encuentren a la derecha del campo por el cual realizamos el corte y se perderá la información almacenada en ellos.
Un corte de control nos permite estructurar un reporte de salida para poder sumarizar datos y mostrar totales.
Código Fuente del ejemplo:
*&---------------------------------------------------------------------*
*& Report Z_PRUEBA_ABAP_3_3
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT z_prueba_abap_3_3.
* Tipo de la estructura 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.
* 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.
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.
* 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.
 
 
 
Sobre el autor
Publicación académica de Gustavo Bolivar, en su ámbito de estudios para la Carrera Consultor ABAP.
Gustavo Bolivar
Profesión: Ing Sistemas - Chile - Legajo: EU47Z
✒️Autor de: 45 Publicaciones Académicas
🎓Egresado del módulo:
Presentación:
Enfocado en programación sap abap.
Certificación Académica de Gustavo Bolivar