Ver la Versión Completa : end-of-selection
kilofafeure
15/01/10, 10:28:11
Buenos días! espero me puedan ayudar porque es urgentillo...estoy haciendo un report que leo el ultimo registro del infotipo 1
rp-provide-from-last p0001 space inicio final
y le modifico el ename.
Entonces hago un modify que me da sy-subrc 0
MODIFY PA0001 FROM P0001.
También he probado con
MODIFY PA0001 FROM TABLE P0001.
Mientras voy creando una tabla interna con los empleados con los que la modificacion ha tenido exito y otra con los que no. El problema viene aquí, cuando hago el END-OF-SELECTION el sy-subrc se me pone a 4 ¿Por qué?
Además que no se me modifica el infotipo 1.
REPORT ZHR_GIRAR_NOMBRE .
INCLUDE ZHR_GIRAR_NOMBRE_TOP.
INCLUDE ZHR_GIRAR_NOMBRE_SRC.
START-OF-SELECTION.
GET pernr.
PERFORM Tratar_Empleado.
END-OF-SELECTION. --> ANTES DE ENTRAR AQUÍ SY-SUBRC = 0
PERFORM Mostrar_Resultados. --> AQUÍ SY-SUBRC = 4
¿Alguna idea de que está pasando? Muchas gracias de antemano! Saludos!
sconoredhot
15/01/10, 13:39:55
Que esta pasando no se...
pero una solucion rápida sería forzar el sy-subrc a cero...
o sea... en el momento que se pone a 4,
agregar la sentencia sy-subrc = 0.
Saludos
VLozano
15/01/10, 14:33:24
Cuando una SQL (que no sabía que podía usarse "libremente" para actualizar infotipos... ¿seguro que no hay una BAPI para los datos de personal?) no puede llevarse a cabo, sy-subrc cambia a 4.
Si la última sentencia del PERFORM del START-OF-SELECTION es un SQL, y no se puede ejecutar satisfactoriamente, es normal que llegue sy-subrc = 4.
Eso explicaría también que no se actualice el infotipo. ¿Has debugado el SQL y ha devuelto sy-subrc = 0?
En todo caso, aquí hay un error de conceptos... START-OF-SELECTION debería contener sólo instrucciones de lectura de datos, y el END-OF-SELECTION las instrucciones de tratamiento.
Pojemplo: un programa que recoge algunos datos y los modifica (de una Z, que yo no toco una estándard ni cobrando) podría ser del palo:
REPORT nombre_programa.
* declaración de variables (si las hay)
* pantalla de selección (si la hay)
INITIALIZATION.
* Cosas a hacer cuando se ejecuta el programa
* - dar valores a variables predeterminadas
* - recoger valores de memoria para informar la pantalla de selección
* - etc
AT SELECTION-SCREEN. "con todas sus variables
* Cosas a hacer en la pantalla de selección:
* - validaciones de datos
* - pantallas de ayuda y/o selección
* - etc
START-OF-SELECTION.
* Lectura de datos
SELECT lista_campos
INTO TABLE nombre_tabla
FROM tabla
WHERE condiciones.
END-OF-SELECTION.
* Tratamiento de datos
DESCRIBE TABLE nombre_tabla.
IF sy-tfill = 0.
* mensaje_error_no_datos
ELSE.
* tratamiento de datos (lo que sea)
ENDIF.Aunque no creo que eso sea el origen de tu problema. Sin poder debugar el programa es muy complicado darte más pistas.
kilofafeure
18/01/10, 09:02:11
Gracias por su ayuda! pero al final lo logré hacer de otra manera.
El select me daba sy-subrc = 0, el problema venia al hacer el END-OF-SELECTION, entonces me cambia el sy-subrc. Prové con MODIFY y con HR_INFOTYPE_OPERATION y no lo conseguía de ninguna manera, siempre sy-subrc = 0 hasta el END-OF-SELECTION.
Me dijeron que provase a modificar cualquier campo del infotipo 2 y que al grabar se giraban nombre y apellido correctamente (habían estado parametrizando algo, el qué? ni idea). Y así fué, así que cree un batch input modificando las iniciales del empleado y se solucionó. Muchas gracias por su ayuda, me ha servido para entender alguna otra cosilla!! Gracias!!
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web