domingo, 9 de abril de 2017

LÓGICA 10/04/2017

* Tu tabla, ti_pos por ejemplo con su work area st_pos, producto del submit dentro de su estructura tiene dentro de todos sus campos, los siguientes:

HKONT (cuenta)
LIFNR (acreedor)
DMBTR (ó el campo monto que vayas a tomar)

*Crearás dos tablas, TI_CALCULOS, TI_EXTERIOR con las siguientes estructuras respectivamente:

DATA: BEGIN OF ty_calculos,
      HKONT type BSEG-HKONT,                (cuenta)
      TOTAL_CTA type BSEG-DMBTR,          (monto total por cuenta)
      TOTAL_NAC type BSEG-DMBTR,         (monto total acreedor nacional x  cuenta)
      TOTAL_EXT type BSEG-DMBTR,           (monto total acreedor internacional x cuenta)
END OF ty_calculos.

DATA: BEGIN OF ty_exterior,
       HKONT type BSEG-HKONT,            (cuenta)
       MONTO type BSEG-dmbtr,                (monto total exterior x cuenta)
END OF ty_exterior.

*A estas le creatas sus estructuras ST_CALCULOS, ST_EXTERIOR y sus field symbols, FS_CALCULOS, FS_EXTERIOR.

*A tu tabla principal le harás un LOOP y dentro de este acumularas los datos a cada tabla...

LOOP AT TI_POS INTO ST_POS.
CLEAR: st_calculos, st_exterior.
"(no olvidar siempre limpiar las estructuras a agregar a una tabla con cada loop a la tabla matriz, ti_pos)

st_calculos-hkont = st_pos-hkont.
st_calculos-total_cta = st_pos-dmbtr.
COLLECT st_calculos INTO ti_calculos.    
"(esto hará que por se acumule los montos de cada cuenta haciendo un registro por cuenta y un acumulado del monto al finalizar el loop al TI_POS)

IF st_pos-lifnr+0(1) EQ '2'.
st_exterior-hkont = st_pos-hkont.
st_exterior-monto = st_pos-dmbtr.
COLLECT st_exterior INTO ti_exterior.
"(esto hará que por cada cuenta, para cada acreedor exterior de dicha cuenta se cree un registro por cuenta y un acumulado de todo monto acreedor exterior)
ENDIF.

ENDLOOP.

*Al final en tu tabla ST_CALCULOS tendrás el total por cada cuenta y en ST_EXTERIOR deberás tener por cada cuenta la suma de los montos cuyos acreedores sean del exterior (inician con 2). Finalmente con la ayuda de esta última tabla actualizarás la tabla de calculos, para esto te ayudarás del field symbol para actualizar cada registro apuntado.

LOOP AT st_calculos ASSIGNING <fs_calculos>.

READ TABLE ti_exterior INTO st_exterior WITH KEY hkont = <fs_calculos>-hkont.
IF sy-subrc EQ 0.
<fs_calculos>-total_ext = st_exterior-monto.
<fs_calculos>-total_nac = <fs_calculos>-total_cta - <fs_calculos>-total_ext.
"(esto hará que de la tabla CALCULOS busque en la tabla EXTERIOR la cuenta respectiva y tome el monto exterior por cada cuenta y con este haga
el calculo par asacar el total nacional)
ENDIF.
ENDLOOP.

*Con esta lógica ya tendrías en una tabla por cuenta los montos que requieres, podrías probar para empezar por dos cuentas.
Tu puedes, vamos, fuerza pollita!

No hay comentarios.:

Publicar un comentario