#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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 |
#3
|
||||
|
||||
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.
__________________
Consultor técnico SAP Úlima edición por vic3 fecha: 14/11/17 a las 10:11:53. |
#4
|
|||
|
|||
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|