✒️ABAP Los cortes de control utilizando tablas internas
ABAP Los cortes de control utilizando tablas internas
CORTE DE CONTROL TABLA INTERNA
El corte de control nos sirve para visualizar subtotales por algunos campos, de esta forma podemos visualizar un informe de forma sencilla.
Pasos para hacer un corte de control:
1. Ordenar la tabla interna de la forma que se visualice posteriormente.
2. Recorrer la tabla para hacer el listado.
Nota: Es necesario realizar una copia de cada registro ya que en el corte SAP coloca información no deseada en las columnas faltantes.
3. Para seleccionar por bloques de cliente hacemos AT NEW. .... ENDAT
En AT NET campo comparará el valor del campo a evaluar si es diferente (actual con anterior). Si lo es entonces ejecutará lo que haya adentro de AT NEW.
4. Hacer las operaciones deseadas, por ejemplo: acumulo de importe.
ADD st_clientes_aux-importe TO v_importe_acumulado.
5. Luego se procede a colocar AT END OF ... ENDAT. Esta sentencia nos permite comparar el valor actual del campo y con el anterior si hubo cambios, en caso de haber cambios entonces se procede a ejecutar el código dentro de AT END OF y ENDAT.
6. Usar SUM or ADD para sumarizar valores numericos.
NOTA
Supongamos que queremos hacer un corte de control por varios campos entonces:
1. Hacemos el corte al campo mas a la derecha. Por ejemplo si tenemos los campos campo1, campo2 y campo3 entonces hacemos el corte en AT NEW campo3.
SPAN {
font-family: "Consolas";
color: #000000;
background: #FFFFFF;
}
.L0S31 {
font-style: italic;
color: #808080;
}
.L0S32 {
color: #3399FF;
}
.L0S33 {
color: #4DA619;
}
.L0S52 {
color: #0000FF;
}
.L0S55 {
color: #800080;
}
.L0S70 {
color: #808080;
}
*&---------------------------------------------------------------------*
*& Report Z_CORTE_DE_CONTROL
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_corte_de_control.
* Tipo de la estructura de clientes
TYPES: BEGIN OF ty_clientes,
distrito(3) TYPE c,
nrocli(5) TYPE c,
region(4) 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_distrito TYPE i,
v_importe_cliente 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 = '203'.
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 = '203'.
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 = '204'.
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 = '204'.
st_clientes-cuenta = '47100'.
st_clientes-concepto = 'IVA100%'.
st_clientes-importe = 10.
INSERT st_clientes INTO TABLE ti_clientes.
*------------------------------------------------
* Hacer el siguiente informe
*Distrito: XXX
* Cliente Región Cuenta Concepto Importe Total
* XXXXX XXXX XXXXX XXXXXXX XXXXX
* XXXXX XXXX XXXXX XXXXXXX XXXXX
* El importe total del distrito es: XXX
*Distrito: XXX
* Cliente Región Cuenta Concepto Importe Total
* XXXXX XXXX XXXXX XXXXXXX XXXXX
* XXXXX XXXX XXXXX XXXXXXX XXXXX
* El importe total del distrito es: XXX
*------------------------------------------------
* Ordeno la tabla interna
SORT ti_clientes BY distrito nrocli region cuenta concepto. "Es necesario hacer que distrito sea el primero en la tabla interna
* 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 distrito
AT NEW distrito.
CLEAR v_importe_acumulado_distrito.
FORMAT COLOR 1.
WRITE:/ 'Distrito:', st_clientes_aux-distrito.
* Imprimo titulos de los detalles
SKIP 1.
WRITE:/10 'Cliente',
20 'Region',
30 'Cuenta',
45 'Concepto',
65 'Importe Total'.
ENDAT.
* Acumulo el importe por cliente
ADD st_clientes_aux-importe TO v_importe_cliente.
AT END OF nrocli.
* Imprimo titulos de los detalles
WRITE: /10 st_clientes_aux-nrocli,
20 st_clientes_aux-region,
30 st_clientes_aux-cuenta,
45 st_clientes_aux-concepto,
65 v_importe_cliente.
* Acumulo el importe por distrito
ADD v_importe_cliente TO v_importe_acumulado_distrito.
CLEAR v_importe_cliente.
ENDAT.
AT END OF distrito.
SKIP 1.
WRITE:'El importe total del distrito es:',v_importe_acumulado_distrito.
WRITE:/ sy-uline.
ENDAT.
ENDLOOP.
 
 
 
#1 / 15 de Oct de 2018 / Ninoska Marquez: | |||
|
Sobre el autor
Publicación académica de Juan Pablo Giron Ruiz, en su ámbito de estudios para la Carrera Consultor ABAP.
Juan Pablo Giron Ruiz
Colombia - Legajo: FG66E
✒️Autor de: 21 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Presentación:
Ingeniero electrónico con conocimientos sólidos en ciencias de la computación y magister en ciencias de ingeniería eléctrica. proactivo y amante a los retos profesionales.
Certificación Académica de Juan Giron