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 23/07/14, 20:30:34
acesar acesar is offline
Member
 
Fecha de Ingreso: abr 2014
Localización: Córdoba, Argentina
Mensajes: 44
Tabla Interna con muchos datos ¿memoria?

Hice un proceso que combina 2 tablas internas con selección de registros, generando una tercera tabla interna combinada.

El proceso funcionó bien hasta hace poco que tuvieron que seleccionar una gran cantidad de registros de ambas, con lo cual la tercer tabla interna quedaria muy grande.
El punto es que el proceso, sin mensaje de por medio, sale de SAP.

Me parece que es un problema de memoria.

A la definicion de la tabla combinada le puse INITIAL SIZE n pero parece peor.

Types:
Begin of t_com,
...aca van los campos
end of t_com.

Data:
lt_com Type Standard Table of t_com initial size 100,
wa_com type t_com.

probé con initial size 1000, con 100 y con 10 y el resultado es el mismo o peor (salta en menos tiempo).

El proceso es un loop a una de las tablas. Con cada registro hace un loop de la segunda tabla. De la combinación de ambas, hago un append a la lt_com.

El punto del programa en que salta es cuando hago el append a lt_com...

¿es correcta mi definición del initial size de la tabla?
Estuve leyendo y OCCURS es obsoleto. Ya no está recomendado.

¿alguna otra sugerencia?

Agregado:
En una de las tantas pruebas (en este caso con menos registros) empezó a aparecer el mensaje de si deseaba salir (que si salia se perderian datos) ¿what?

y luego de clickear varias veces NO, apareció este mensaje

JAD: Internal Error (this retcode should be handled by caller of DPTM-layer)

El detalle del mismo dice:
Fecha...
Component: DPTM
Release: 730
Version: 10
Return Code: -2
Counter: 2

¿será memoria u otra cosa?

Úlima edición por acesar fecha: 23/07/14 a las 20:59:40.
Responder Con Cita
  #2  
Viejo 24/07/14, 08:41:58
coloso coloso is offline
Senior Member
 
Fecha de Ingreso: feb 2006
Mensajes: 110
Hola compañero, varias preguntas......

Más o menos cuantos registros puede tener la tabla 1 y la tabla 2 ????

Es necesario que por cada registro de la tabla 1 te tengas que recorrer la tabla 2 entera ???? No lo puedes acotar en el loop para que no pierda tanto tiempo ????

Para que quieres la tabla 3 ????? O puedes bajar los datos a un fichero .txt ????

La tabla 3 también es tuya o es de SAP ????

Salu2.
Responder Con Cita
  #3  
Viejo 24/07/14, 10:31:40
acesar acesar is offline
Member
 
Fecha de Ingreso: abr 2014
Localización: Córdoba, Argentina
Mensajes: 44
Hola Coloso

La tabla 1 y 2 son variables en sus registros. La 1 son los clientes de determinados vendedores y la 2 son los materiales que podrian aplicar a los clientes. De ambas tablas podes seleccionar 1, varios o todos.

En el caso que estoy probando, tengo que elegir a todos los clientes, que le voy a asignar algunos materiales nuevos para la venta.

Por cada cliente, debo recorrer la tabla de materiales para obtener solo los seleccionados y de esos ver cuales coinciden con otros datos de los clientes seleccionados.

La tabla combinada la tengo que generar, porque con la misma hago (posteriormente) un batch input, pero eso es un paso posterior (primero muestro otra grilla de resultado y de ahi, podes procesar o cancelar).

El error se produce cuando estoy armando la combinación.
No es un problema de tiempo, sino que va procesando y llenando la tabla 3 y en algun momento, chau SAP.

pseudocódigo:

Loop Clientes (tabla interna 1)
...Loop Materiales (tabla interna 2)
......IF se cumplen condiciones,
APPEND a tabla interna 3 con datos combinados.
En algun punto esto hace saltar a SAP. Se cierra la sesion
o aparece el mensaje que les mandé.
Si elijo pocos clientes, lo procesa sin problemas y pasa a la
grilla de resultado que indico mas abajo.
......Endif
...EndLoop Materiales
EndLoop Clientes

Grilla de Resultado de Tabla interna 3 (cuando se produce el error, no alcanza a mostrarse)
Responder Con Cita
  #4  
Viejo 24/07/14, 13:27:27
acesar acesar is offline
Member
 
Fecha de Ingreso: abr 2014
Localización: Córdoba, Argentina
Mensajes: 44
Bueno, de tanto probar, creo que conseguí la solución.

1) Le puse INITIAL SIZE 10 a las 3 tablas internas (antes le habia puesto solo a la tercera).

2) Saqué el llamado a CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'.
No se si tiene algo que ver, pero ya tuve problemas otra vez usando esta función, que cuando la usas un monton de veces, daba error.

Con eso obtuve 2 cosas:
* No dio mas el error.
* El proceso está con Turbo! Super Veloz!

Voy a seguir probando y si hay algun cambio les aviso...
Responder Con Cita
  #5  
Viejo 24/07/14, 13:34:08
acesar acesar is offline
Member
 
Fecha de Ingreso: abr 2014
Localización: Córdoba, Argentina
Mensajes: 44
Volvi a activar SAPGUI_PROGRESS_INDICATOR y volvió el error, además de volverlo lerdo al proceso...
¿hay alguna alternativa para poder poner mensajes similares a esta función?


CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
* "PERCENTAGE = P_INCREMENTO
TEXT = P_TEXT.


Dentro del LOOP hacia un llamado a esta funcion, para que fuera avanzando el reloj. Primero le saque el incremento. El error seguia pero el proceso duraba un poco mas. Después lo anule completamente. Y ahi se solucionó.
Responder Con Cita
  #6  
Viejo 25/07/14, 07:27:54
coloso coloso is offline
Senior Member
 
Fecha de Ingreso: feb 2006
Mensajes: 110
Hola compañero para la función esa olvídate de actualizarla cada paso en el loop se vuelve muy pesado el programa y suelen petar con programas grandes. Es mejor que la ejecutar cada "X" pasos del loop.

No sé haz una reglar de 3 y por cada "X" registros que se actualice un % o algo así.....
Responder Con Cita
  #7  
Viejo 25/07/14, 10:30:57
acesar acesar is offline
Member
 
Fecha de Ingreso: abr 2014
Localización: Córdoba, Argentina
Mensajes: 44
Muy bonito el reloj pero poco práctico en la forma en que lo usé.

Tal como decís, habria que ejecutarla cada x% cosa que no se ejecute mas de 4 o 5 veces por proceso.
Es impresionante el cambio de tiempos cuando estaba dentro del loop.

Para una muestra de avance menos complicada, es mejor usar

message S398 With 'Texto'.

Espero que esto sirve de ayuda.
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 06:17:46.


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