✒️ABAP Los cortes de control utilizando tablas internas
ABAP Los cortes de control utilizando tablas internas
Lección 3.2:
Cortes de control utilizando tablas internas
Se utilizan para poder imprimir datos por pantalla, listados, informes, etc.
Es una forma de estructurar un reporte de salida de modo de poder sumarizar datos y mostrar totales por distintos campos del reporte. Una condición esencial es que la tabla de salida del reporte debe ordenarse por los campos por los cuales se va a realizar el corte de control. Es indispensable utilizar una estructura auxiliar para almacenar los datos de 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.
Pasos a seguir: Luego de cargar la tabla con registros...
- Ordenar la tabla según orden de visualización de los datos. (SORT...BY...)
- Recorrer la tabla para realizar listado. (LOOP AT .... INTO...)
- Pasar los datos (que se estan recorriendo) a una estructura auxiliar. (CLEAR est_aux. / <est_aux = est>.
- Se hace el corte de control según campo de ordenamiento previo. (AT NEW <campo>. / Sentencias... ENDDAT.)
- Acumulamos el importe según ejemplo
- Se hace la impresión de los datos. según campo de ordenamiento (AT END OF <campo> / Sentencias, normalmente write... ENDDAT.)
AT NEW <NombreCampo>: comparará el valor actual del <campo> con el valor anterior. En caso de ser distinto entonces se procesara el código dentro del AT NEW.
AT END OF <nombreCampo>: comparada el valor actual 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 distinto entonces se procesara el código dentro del AT END.
ADD y SUM: para agregar / sumar valores a los campos numéricos. (I,P,F).
Es posible realizar un corte de control por más de un campo.
Para este caso poner en el AT NEW o AT END el campo que se encuentre más a la derecha
Ejemplo: Si se tiene la Tabla Interna ti_tabla con los campos campo1, campo2, campo3 en ese orden y nos piden el corte por campo3, sólo colocamos el AT NEW campo3 o AT END campo3.
-----------------------------------------------------------------------------------------------------------------------------------
SPAN {
font-family: "Courier New";
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_prueba_abap_3_3_v2.
* 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.
DATA: v_importe_acumulado_distrito TYPE i,
v_importe_cliente TYPE i,
v_importe_total 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.
* Ordeno la tabla interna
SORT ti_clientes BY distrito nrocli region 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 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: ', 65 v_importe_acumulado_distrito.
WRITE:/ sy-uline.
ENDAT.
ADD st_clientes-importe TO v_importe_total.
ENDLOOP.
SKIP 1.
WRITE:/ 'El importe total es: ',65 v_importe_total.
WRITE:/ sy-uline.
 
 
 
Agradecimiento:
Ha agradecido este aporte: Patricia Lopez Cuevas
Sobre el autor
Publicación académica de Elisa Munoz Robles, en su ámbito de estudios para la Carrera Consultor ABAP.
Elisa Munoz Robles
Profesión: Analista Orgánico - España - Legajo: CM72B
✒️Autor de: 68 Publicaciones Académicas
🎓Egresado del módulo:
Presentación:
Perfil: analista orgánico
Certificación Académica de Elisa Munoz