MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 11/11/17, 23:53:53
ac050 ac050 is offline
Junior Member
 
Fecha de Ingreso: abr 2006
Mensajes: 6
Unhappy 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.
Responder Con Cita
  #2  
Viejo 14/11/17, 09:36:55
Raulalsan Raulalsan is offline
Junior Member
 
Fecha de Ingreso: sep 2016
Mensajes: 8
Smile

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
Responder Con Cita
  #3  
Viejo 14/11/17, 11:01:01
Avatar de vic3
vic3 vic3 is offline
Junior Member
 
Fecha de Ingreso: mar 2017
Mensajes: 16
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 11:11:53.
Responder Con Cita
  #4  
Viejo 14/11/17, 18:00:04
omegaotaku omegaotaku is offline
Member
 
Fecha de Ingreso: nov 2011
Mensajes: 37
Cita:
Originalmente Escrito por ac050
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.

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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 16:10:16.


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