Amigos buenas tardes, vengo a pedirles una consulta es que tengo un rato pensando y aun no se como hacer algo, me piden que sume por fecha de contabilizacion una tabla interna , les pondre mas o menos las busquedas por la se16n para que mas o menos vean jeje:
SELECT AUFNR GAMNG GSTRP
FROM AFKO
INTO TABLE it_valid
WHERE GSTRP IN s_budat.
IF sy-subrc EQ 0.
SELECT aufnr
FROM AUFK
INTO TABLE IT_aufnr1
FOR ALL ENTRIES IN it_valid
WHERE aufnr = it_valid-aufnr
* AND ERDAT = it_valid-GSTRP
AND AUART EQ p_auart
AND WERKS = p_werks.
IF sy-subrc EQ 0.
* Cantidad de Aves
SELECT AUFNR GAMNG GSTRP AUFPL
FROM AFKO
INTO TABLE it_cantave
FOR ALL ENTRIES IN it_aufnr1
WHERE AUFNR = it_aufnr1-aufnr.
* Mortalidad , Descarte y Error en Sexo
SELECT aufnr XMNGA BUDAT
FROM AFRU
INTO TABLE it_mix1
FOR ALL ENTRIES IN it_aufnr1
WHERE AUFNR = it_aufnr1-aufnr
AND GRUND = 'G001' OR GRUND = 'G002' OR GRUND = 'G003'
AND WERKS = p_werks.
* Ubicarlo en almacen
IF SY-SUBRC EQ 0.
SELECT AUFNR LGORT
INTO TABLE it_afpo
FROM AFPO
FOR ALL ENTRIES IN it_mix1
WHERE AUFNR = it_mix1-aufnr.
ENDIF.
los valores serian mas o menos asi:
it_valid
it_aufnr1
it_cantave
it_mix1
Lo que quiero hacer si ven la ultima tabla it_mix1 quiero sumar por fecha de contabilizacion pero al mismo tiempo por orden para cada tipo de motivo (G001 , 6002, g003), supongamos que para la orden 200100000021, lo primero pienso que deberia hacer algo como un
LOOP AT IT_aufnr1 ASSIGNING <FS_AUFNR>.
READ TABLE it_cantave into wa_cantave WITH KEY AUFNR = <FS_AUFNR>-AUFNR.
IF SY-SUBRC EQ 0.
LOOP AT it_mix1 ASSIGNING <FS_MIX1> WHERE AUFNR = wa_cantave-AUFNR.
IF it_mix1-grund = 'G001'. " Mortalidad
quien me dice mas o menos como podria hacerlo?
Lo que me piden es esto:
Total: debe representar la sumatoria de las mortalidades por fecha de contabilización.
% mortalidad real: resulta de la operación (Total * 100 ) / (Cantidad de aves – Total)
% acumulado real: resulta un acumulado de % mortalidad real.
Bueno y otras busqueda spero la difernecia es el G001, G002 y G003 pero con que haga una lo demas es igual pero aun no me viene una idea. Saludos y muchas gracias por cualquier ayuda.
Hola buenas, para la parte en la que quieres sumar por subtotales, yo sin duda empezaría trabajando con un ALV orientados a objetos (salv en google) el cual tiene entre sus metodos uno que permite hacer subtotales por el criterio que le apliquemos (en tu caso la fecha).
Con una simple llamada al metodo tendrías el TOTAL, el subtotal por fechas, el % de acumulados reales y el % de mortalidad real ya tendrías que implementar la operación que tu mismo pones dentro de un loop.
Lee un poco sobre los ALV orientados a objetos, intenta montarte uno y ponle el metodo que te indico, no me acuerdo del nombre pero en todas las guias de documentacion tiene que venir.
Siento no darte la solucion en código, pero menos es nada jejeje
Ah por registro? Pensaba que era en ALV y subtotalizado. Entonces olvida lo que te he dicho
Si no he entendido mal la tabla que va a hacer los criterios es la it_mix1 por tanto lo primero sería ordenar esta tabla según te piden.
Esto no me cuadra, será en base a la fecha de contabilización (IT_MIX1) y que luego se relacione por orden con la IT_AUFNR1?
Si lo que quieres es la cantidad (entiendo que es la Ctd. Teorica de la it_cantave) a priori lo que veo es que solo necesitaria IT_MIX1 & IT_CANTAVE no? Porque veo que la IT_AUFNR1 & IT_VALID es solamente una tabla que usas para rellenar estas tablas con un FOR ALL ENTRIES
si, amigo , segun mi funcional me informo como es algo diario tendre que ordenar por fecha pero estoy esperando que me responda porque esta el caso en que la condicion que quiero G001 y fecha coincidan pero sean ordenes distintas, tendria que ver si en ese caso las sumaria o no.
Por otra parte si amigo tienes razon con lo de it_aufnr e it_valid
Creo que podria hacer lo de las sumas ocn un at end of it_mix1-fecha_contabilizacion, y si es de la misma condicion G001 voy sumando a todas las fechas pero tengo que esperar a ver si en el caso de que se cumpla eso y las ordenes sean distitnas como aqui:
Como ves, de la tabla it_mix1 hay 7 entradas y en la lt_col sólo hay 5, porque ha sumado por fecha contable igual, orden igual y luego motivo igual.
El código sería algo así:
types: begin of tabla,
fec type budat,
rec type i,
mot type c LENGTH 4,
ord type aufnr,
END OF tabla.
data: lt_int type TABLE OF tabla,
ls_int like LINE OF lt_int.
DATA lt_col type HASHED TABLE OF tabla
WITH UNIQUE KEY fec ord mot .
START-OF-SELECTION.
* Se asume que aquí la tabla esta rellena
LOOP AT lt_int into ls_int.
write: / ls_int-fec,ls_int-rec, ls_int-mot,ls_int-ord.
collect ls_int into lt_col.
ENDLOOP.
Hola @abapero yo haría tal cual indica @Salco lo único a tener en cuenta el tipo de datos a utilizar en el collect que a veces no deja utilizar valores no númericos en la clave, o a mi me tiene dado esos problemas por lo demás tal cual te indican.