PDA

Ver la Versión Completa : Tsv_tnew_page_alloc_failed


Roy
16/03/09, 15:56:34
Hola a todos...

Les cuento, tengo un problema con 1 programa Z, es un Kardex, y bueno tengo que sacar los documentos de materiales de la mseg por un rango de tiempo, para esto hago una consulta por fecha a la mkpf, y con esos documentos materiales hago una consulta a la mseg, asi como describo acontinuacion:

SELECT matnr werks menge mblnr dmbtr shkzg bwart
INTO CORRESPONDING FIELDS OF TABLE ti_mseg FROM mseg
FOR ALL ENTRIES IN ti_mkpf
WHERE mblnr EQ ti_mkpf-mblnr AND
mjahr GE s_fecha-low(4) AND
mjahr LE s_fecha-high(4) AND
werks IN s_werks AND
bwart IN r_bwart AND
sobkz EQ w_consig AND
matnr IN s_matnr.

la tabla ti_mkpf contiene todos los valores de los Doc. de materiales que les habia comentado y tiene la siguiente estructura:

DATA: BEGIN OF w_mkpf OCCURS 0,
mblnr LIKE mkpf-mblnr,
budat LIKE mkpf-budat.
DATA: END OF w_mkpf,
ti_mkpf LIKE TABLE OF w_mkpf.

y esta es la estructura de la ti_mseg:
DATA: BEGIN OF w_mseg,
matnr LIKE mseg-matnr,
werks LIKE mseg-werks,
menge LIKE mseg-menge,
mblnr LIKE mseg-mblnr,
dmbtr LIKE mseg-dmbtr,
shkzg LIKE mseg-shkzg,
bwart LIKE mseg-bwart.
DATA: END OF w_mseg,
ti_mseg LIKE TABLE OF w_mseg.

Cabe resaltar que esto lo tengo como proceso de fondo, y muy aparte de esto, cuando corro el programa para el rango de un solo mes no tengo ningun problema pero cuando lo saco para un año entero (requerimiento basico), me sale el siguiente DUMP, justamente en el select a mseg: TSV_TNEW_PAGE_ALLOC_FAILED

Txt.brv.
No storage space available for extending an internal table.



¿Qué ha sucedido?
You attempted to extend an internal table, but the required space was
not available.

Disculpen la ignorancia si es un tema sencillo, pero les rogaria su ayuda. Mil Gracias desde ya! :)

DavidXD_XD
16/03/09, 16:39:00
Hola Roy, intenta convertir tu tabla interna en la cual almacenas el resultado del query a la MSEG en una tabla HASHED, aver q pasa ....

https://www.sdn.sap.com/irj/scn/thread?messageID=6833394#6833394

Roy
16/03/09, 18:52:33
Doctoraso, de antemano gracias por tu respuesta. Que yo sepa la declaracion hashed es para declarar un campo como clave, es completamente valido ok?, pero tengo unos cuantos contra con eso, la primera es que en Dev no tengo ese problema (lo q me hace pensar que es un tema de memoria mas que de sentencias), segundo que las ordenes de transporte aca se demoran una eternidad, y hasta probar eso en QAS me voy a volver viejo, mas alla de eso mi usuario no esta (un toq dramatica esta mi situacion) y tercero que despues de este Select, varios procesos con la data que obtengo y si utilizo el hashed debo cambiar bastantes cosas. Voy a seguir averigguando a ver si puedo solucionarlo de otra manera, en todo caso lo tendre como as bajo la manga. Gracias doctoraso !....

Si alguien mas a tenido el mismo problema porfavor una mano gracias!

DavidXD_XD
16/03/09, 20:14:17
Claro, declararias como claves a los campos MBLNR, MJAHR y ZEILE, esas combinaciones nunca se van a repetir, en la mayoria de post con ese problema recomiendan declarar la tabla interna de esa forma ...

DATA: gt_mseg TYPE HASHED TABLE OF mseg WITH UNIQUE KEY mblnr mjahr zeile.

Yo tbm trabaje un kardex en el cual me botaba millones de registros y lo podia agrupar en mi tabla interna sin problemas ...

Roy
16/03/09, 20:44:08
Asi?, no te creo...ok lo intentare comparito, ahora me han comentado que a la hora que haga el select en vez de hacer el for all entries, use un inner join...que tan factible sera eso?, sabes por casualidad?

DavidXD_XD
16/03/09, 20:48:39
Tbm ... seria mucho mejor porq ambas tablas son cabecera y detalle :D

Roy
16/03/09, 21:27:41
Excelente, el usuario ya lo esta probando para un mes solamente, ahora hago los cambios en DEV, y mañana lvere los resultados. Te cuento como salio. Gracias!:D

Roy
17/03/09, 21:36:19
En efecto debo darte las gracias David, el porgrama va corriendo cerca de 5 horas y no se cae, antes se caia a la media hora. En conclusion las tablas hashed y los select con inner join son el mejor camino, para una seleccion enorme.