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 15/01/10, 17:37:00
braschilester
 
Mensajes: n/a
Thumbs down S.O.O ABAP por favor ayuda que paso ?

Err.tmpo.ejec. TIME_OUT
Fecha y hora 15.01.2010 15:22:00



Texto breve
Time limit exceeded.



¿Qué ha sucedido?
The program "ZPRO_004" has exceeded the maximum permitted runtime without
interruption and has therefore been terminated.




¿Qué puede hacer?
Note down which actions and inputs caused the error.


To process the problem further, contact you SAP system
administrator.

Using Transaction ST22 for ABAP Dump Analysis, you can look
at and manage termination messages, and you can also
keep them for a long time.

Anál.errores
After a specific time, the program is terminated to make the work area
available to other users who may be waiting.
This is to prevent a work area being blocked unnecessarily long by, for
example:
- Endless loops (DO, WHILE, ...),
- Database accesses with a large result set
- Database accesses without a suitable index (full table scan)

The maximum runtime of a program is limited by the system profile
parameter "rdisp/max_wprun_time". The current setting is 3000 seconds. If this
time limit is
exceeded, the system attempts to cancel any running SQL statement or
signals the ABAP processor to stop the running program. Then the system
waits another 60 seconds maximum. If the program is then still active,
the work process is restarted.


Notas para corregir errores
Programs with long runtime should generally be started as background
jobs. If this is not possible, you can increase the system profile
parameter "rdisp/max_wprun_time".

Depending on the cause of the error, you may have to take one of the
following measures:
- Endless loop: Correct program;
- Dataset resulting from database access is too large:
Instead of "SELECT * ... ENDSELECT", use "SELECT * INTO internal table
(for example);
- Database has unsuitable index: Check index generation.

If the error occures in a non-modified SAP program, you may be able to
find an interim solution in an SAP Note.
If you have access to SAP Notes, carry out a search with the following
keywords:

"TIME_OUT" " "
"ZPRO_004" or "ZPRO_004"
"CARGA_PROVEEDORES"

If you cannot solve the problem yourself and want to send an error
notification to SAP, include the following information:

1. The description of the current problem (short dump)

To save the description, choose "System->List->Save->Local File
(Unconverted)".

2. Corresponding system log

Display the system log by calling transaction SM21.
Restrict the time interval to 10 minutes before and five minutes
after the short dump. Then choose "System->List->Save->Local File
(Unconverted)".

3. If the problem occurs in a problem of your own or a modified SAP
program: The source code of the program
In the editor, choose "Utilities->More
Utilities->Upload/Download->Download".

4. Details about the conditions under which the error occurred or which
actions and input led to the error.


Info posición de cancelación
Termination occurred in the ABAP program "ZPRO_004" - in "CARGA_PROVEEDORES".
The main program was "ZPRO_004 ".

In the source code you have the termination point in line 987
of the (Include) program "ZPRO_004".


957 * --> p1 text
958 * <-- p2 text
959 *----------------------------------------------------------------------*
960 FORM CARGA_PROVEEDORES.
961 *-----------------------------------------------------------------
962 * PROCESO DE OBTENCION DE LA INFORMACION DESDE LA BASE DE DATOS
963 *-----------------------------------------------------------------
964 * Captura de los proveedores :
965 *----------------------------------
966 DATA HAY_COMPRAS.
967 REFRESH S_EKORG.
968 SELECT * FROM T024E WHERE BUKRS IN S_BUKRS.
969 CLEAR S_EKORG.
970 S_EKORG-SIGN = 'I'.
971 S_EKORG-OPTION = 'EQ'.
972 S_EKORG-LOW = T024E-EKORG.
973 APPEND S_EKORG.
974 ENDSELECT.
975
976
977
978
979 SELECT * FROM LFA1 WHERE LIFNR IN S_LIFNR.
980 * AND bukrs IN s_bukrs ORDER BY lifnr.
981 * ON CHANGE OF lfb1-lifnr.
982 SELECT * FROM LFB1 WHERE LIFNR = LFA1-LIFNR
983 AND BUKRS IN S_BUKRS.
984 * check sy-subrc EQ 0.
985 CLEAR HAY_COMPRAS .
986 SELECT * FROM T024E WHERE BUKRS EQ LFB1-BUKRS.
>>> SELECT * FROM LFM1 WHERE LIFNR EQ LFB1-LIFNR
988 AND EKORG EQ T024E-EKORG.
989
990
991 CLEAR TABPRO.
992 HAY_COMPRAS = 'X'.
993 *tabpro-banks = ' '. tabpro-bankl = ' '. tabpro-bankn = ' '.
994 SELECT * FROM LFBK WHERE LIFNR = LFM1-LIFNR.
995
996 MOVE-CORRESPONDING LFBK TO TABPRO.
997
998 ENDSELECT.
999
000 MOVE-CORRESPONDING LFM1 TO TABPRO.
001 MOVE-CORRESPONDING LFA1 TO TABPRO.
002 MOVE-CORRESPONDING LFB1 TO TABPRO.
003
004 MOVE TABPRO-NAME1 TO I_TEXTO_DEPURADO.
005 PERFORM DEPURA_TEXTO.
006 MOVE I_TEXTO_DEPURADO TO TABPRO-NAME1.
Responder Con Cita
  #2  
Viejo 15/01/10, 18:31:24
kreuzigen kreuzigen is offline
Member
 
Fecha de Ingreso: feb 2009
Mensajes: 53
Que que paso?

Es muy sencillo, tienes anidados 5 selects!!!!!!!

Es el programa mas ineficiente que he visto; debes contactar al autor de este programa para pedirle que optimize este código.

La lógica puede ser correcta, sin embargo esta consumiendo al maximo los recursos del servidor.
Responder Con Cita
  #3  
Viejo 15/01/10, 21:49:23
braschilester
 
Mensajes: n/a
Wink Amigo Gracias - Select

Amigo eso quier decir qur al tener una cadena de SELECT

Utiliza mucho recurso en el servidor.-

CUAL PUEDE SER LA SOLUCION SEGUN TU ???

YO TENGO Q REALIZA EL CAMBIO EL AUTOR NO ESTA MAS.
Responder Con Cita
  #4  
Viejo 18/01/10, 07:13:06
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Lo primero y más importante, mantener la calma.

Primero la parrafada tocapelotas, y en el mensaje siguiente un poco de ayuda.

Cuando consigas eso, si el problema persiste y tienes que preguntar en un foro, intenta poner un asunto al hilo que sea relevante. "Ayuda", "No funciona" y cosas así no sirven de nada. O sí, para que la gente NO entre a leer el mensaje y te deje tirado.

Por ejemplo, este hilo podría "asuntarse": Error de ejecución por Time-out
Entonces, los que crean que pueden echarte un cable, entrarán a leer el hilo, y los que se crean incapaces de hacerlo, y no quieran entrar a aprender nada, podrán ignorar el mensaje y ahorrar tiempo y ancho de banda.

Cuando tengas solventado lo del asunto, empieza con el cuerpo del mensaje. Cosas que ayudan:

1- los mensajes de texto del DUMP ponlos en una cita (tag [ QUOTE]), así distinguiremos el problema del mensaje de error
2- el código en un bloque de código (tag [ CODE]), así distinguiremos el problema del mensaje del código (excepto como en este caso, cuando el código forme parte del mensaje de error)

Y a continuación, la respuesta.
__________________
"Porque algunos sabemos que somos parte del problema"
Responder Con Cita
  #5  
Viejo 18/01/10, 07:29:34
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Y ahora un poco de ayuda específica (el mensaje anterior también es de utilidad, pero más generalizada).

El problema que tienes es que tu programa ("tu" porque ahora está bajo tu responsabilidad) accede a un montón de datos de la forma menos optimizada posible. Y si ha funcionado hasta ahora probablemente ha sido por casualidad.

Opciones:

1- verifica todas las tablas LF* (¿datos de clientes?), busca sus campos comunes (LIFNR probablemente para todas, y luego algunas más específicas) y monta una JOIN (IMPORTANTE: asegúrate de utilizar los índices, o podrías llegar a empeorar el problema)

2- crea secuencas de SQL llamándolas para rellenar tablas internas (INTO TABLE) y encadenadas con sentencias FOR ALL ENTRIES IN (IMPORTANTE: si vas a usar el FAEI, asegúrate antes de que la tabla interna de referencia tiene datos, o bajarás la tabla entera empeorando el problema)

Yo en este caso optaría por la opción 1, pero tomaría esa decisión en base a los datos que contienen MIS tablas LF*.
__________________
"Porque algunos sabemos que somos parte del problema"
Responder Con Cita
  #6  
Viejo 18/01/10, 07:30:05
VLozano VLozano is offline
Senior Member
 
Fecha de Ingreso: nov 2009
Mensajes: 124
Cómo construir la JOIN:
- haz una lista de las SQL en un papel
- para cada SQL, anota los campos del WHERE
- subraya para cada campo WHERE aquellos que apuntan a una SQL anterior
- construye la nueva SQL con tantas JOIN como hagan falta
- Nota: las tablas realmente pequeñas (como la T024E, en MI caso) no las metas en la JOIN, esa lectura no afecta realmente al rendimiento, aunque no sea código optimizado.

Ejemplo: Tu programa (el feo) sería algo así:
__________________
"Porque algunos sabemos que somos parte del problema"
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 15:47:16.


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