PDA

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!!