MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Agrupar datos tabla interna (foro/showthread.php?t=77642)

ac050 11/11/17 23:53:53

Agrupar datos tabla interna
 
Hola, tengo una tabla interna it_data1 con tres campos Cliente, saldo y fecha.

cliente saldo fecha
1 10 01.11.2017
1 -3 15.11.2017
2 20 20.11.2017
2 30 30.11.2017

Estoy buscando la forma de agrupar por cliente, el sum del campo saldo y el max del campo fecha.
Este es el resultado que busco.

cliente saldo fecha
1 7 15.11.2017
2 50 30.11.2017

He intentado con (collect it_data1 into it_data2) pero no me sirve para el campo fecha. Alguna idea que me pueda ayudar?

Mucahs gracias.:confused:

Raulalsan 14/11/17 09:36:55

Acabo de empezar en ABAP y seguro que hay una forma mejor, pero yo haría una lógica propia.
Te dejo una lógica que he implementado y que creo que funcionaría tal como deseas.

CLEAR ls_cliente_aux.
SORT lt_cliente BY cliente date DESCENDING.
DATA(num_rows) = lines( lt_cliente ).
LOOP AT lt_cliente INTO ls_cliente.
IF ls_cliente_aux-cliente NE ls_cliente-cliente AND sy-tabix NE
'1'.
APPEND ls_cliente_aux TO lt_cliente_aux.
ls_cliente_aux-cliente = ls_cliente-cliente.
ls_cliente_aux-date = ls_cliente-date.
ls_cliente_aux-saldo = ls_cliente-saldo.
ELSE.
IF sy-tabix EQ '1'.
ls_cliente_aux-cliente = ls_cliente-cliente.
ls_cliente_aux-date = ls_cliente-date.
ls_cliente_aux-saldo = ls_cliente-saldo.
ELSE.
IF sy-tabix EQ num_rows.
ls_cliente_aux-saldo = ls_cliente-saldo +
ls_cliente_aux-saldo.
APPEND ls_cliente_aux TO lt_cliente_aux.
ELSE.
ls_cliente_aux-saldo = ls_cliente-saldo +
ls_cliente_aux-saldo.
ENDIF.
ENDIF.
ENDIF.

ENDLOOP.

Saludos

vic3 14/11/17 11:01:01

Yo haría lo siguiente:

* Definición de variables: Esto lo haces a tu gusto... :) :)
Supongamos que tu tabla interna donde tienes los datos se llama GT_TABLA
DATA: gt_tabla_suma LIKE gt_tabla,
..........gs_tabla_suma LIKE LINE OF gt_tabla_suma.

TYPES: BEGIN OF ty_clientes,
..cliente TYPE i,
END OF ty_clientes.
DATA: gt_clientes TYPE STANDARD TABLE OF ty_clientes,
..........gs_clientes LIKE LINE OF gt_clientes

DATA: lv_clientes TYPE i.
DATA: lv_suma_saldo TYPE i.

* Nº de clientes: Vamos a ver cuantos clientes diferentes hay :) :)
LOOP AT gt_tabla INTO gs_tabla.
..gs_clientes-cliente = gs_tabla-cliente.
..APPEND gs_clientes TO gt_clientes.
ENDLOOP.
SORT gt_clientes BY cliente ASCENDING.
DELETE ADJACENT DUPLICATES FROM gt_clientes COMPARING ALL FIELDS.

CLEAR lv_clientes.
DESCRIBE TABLE gt_clientes LINES lv_clientes.

* Hacemos la suma de los saldos: Para tu caso, entiendo que solo necesitas sumar los saldos y quedarte con el nº de cliente y con la última fecha (la más reciente) :) :)
SORT gt_tabla BY cliente fecha ASCENDING. (pon el nombre correcto de tus campos en GT_TABLA)
DO lv_clientes TIMES.
..READ TABLE gt_clientes INTO gs_clientes WITH KEY sy-index.

..CLEAR lv_suma_saldo.
..LOOP AT gt_tabla INTO gs_tabla WHERE cliente = gs_clientes-cliente.
....gs_tabla_suma-cliente = gs_tabla-cliente.
....gs_tabla_suma-fecha = gs_tabla-fecha.
....lv_suma_saldo = lv_suma_saldo + gs_tabla-saldo.
....gs_tabla_suma-saldo = lv_suma_saldo.
..ENDLOOP.

..APPEND gs_tabla_suma TO gt_tabla_suma.
ENDDO.

omegaotaku 14/11/17 18:00:04


Acá te paso mi desarrollo:

REPORT ytempo1.

TYPES:BEGIN OF ty_data,
cliente TYPE i,
saldo TYPE i,
fecha TYPE sy-datum,
END OF ty_data.


DATA: it_data TYPE STANDARD TABLE OF ty_data,
wa_data TYPE ty_data,
it_data_aux TYPE STANDARD TABLE OF ty_data,
wa_data_aux TYPE ty_data.

INITIALIZATION.

DEFINE m_macro.

wa_data_aux-cliente = &1.
wa_data_aux-saldo = &2.
wa_data_aux-fecha = &3.

append wa_data_aux to it_data_aux.
clear wa_data_aux.

END-OF-DEFINITION.

m_macro: 1 10 '20171101',
1 -3 '20171115',
2 20 '20171120',
2 30 '20171130'.

START-OF-SELECTION.

SORT it_data_aux BY cliente fecha DESCENDING.

LOOP AT it_data_aux INTO wa_data_aux.

IF wa_data-fecha IS INITIAL.
wa_data-fecha = wa_data_aux-fecha.
ENDIF.

wa_data-saldo = wa_data-saldo + wa_data_aux-saldo.

AT END OF cliente.

wa_data-cliente = wa_data_aux-cliente.
APPEND wa_data TO it_data.
CLEAR wa_data.

ENDAT.

ENDLOOP.

Saludos.


Husos Horarios son GMT. La hora en este momento es 05:21:27.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web