Código MySQL:
Ver original
| ||||
Procedimiento nomina Buen dias compañeros, les pido ayuda con el siguiente procedimiento... he ejecutado cada consulta en un query a parte y me muestra correctamente los resultados, pero cuando mando a llamar al procedimento solo inserta los valores que recibe como parametros y la fecha, los demas valores quedan en blanco.... me podrian decir donde esta mi error?....
Código MySQL:
Ver original |
| ||||
Respuesta: Procedimiento nomina Un buen consejo adicional es que no uses los mismos nombres para los parámetros de entrada o las variables, respecto de los nombres de los campos de la tabla. Puede llevar a MySQL a confundir los objetos por una cuestión de jerarquía semántica. Usa denominaciones diferentes. Puedes hacerlo simplemente poniéndole un prefijo cualquiera a los parámetros y variables.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina He realizado lo q me sugeriste repara2 y en efecto, las variables son nulas, la unica q contiene el valor correcto es: SET Sueldo=(SELECT Sueldo FROM empleados WHERE Empleado_Id=EmpleadoId); y tienes razon gnzsoloyo, y creo q no estoy utilizando los mismo nombres en las variables con el de los campos de la tabla, procuro no hacerlo... asi que, pueden ver el error en mi procedimiento?, porque, repito, he realizado las consultas fuera del procedimiento y si me funcionan.... |
| |||
Respuesta: Procedimiento nomina Hola tanliz: Me parece extraño que sólo funcione la consulta que no considera los parámetros de fecha, por lo que creo que ahí puede estar el problema. Verifica en tu tabla qué tipo de dato tienes asignadas para tus fechas, si lo tienes como DATETIME, te recuerdo que estas consideran también la hora, mientras que en tus parámetros las tienes como tipo date... podrías probar haciendo algo como esto:
Código:
Haz la prueba y nos comentas.SET TDeducciones = ( SELECT SUM(Monto) FROM descuentos_empleados WHERE DATE(Fecha)>=FechaI AND DATE(Fecha)<=FechaF AND Empleado_Id=EmpleadoId AND Estatus_Descuento='Pendiente') Saludos Leo. |
| ||||
Respuesta: Procedimiento nomina La clave de todo está en esto: Cita: ¿Sabes qué da de resultado esto?:He realizado lo q me sugeriste repara2 y en efecto, las variables son nulas, la unica q contiene el valor correcto es: SET Sueldo=(SELECT Sueldo FROM empleados WHERE Empleado_Id=EmpleadoId); Cita: Da NULL.10 + 10 + 10 + 10 + 10 + 10 + NULL Toda operación aritmética o de concatenación entre cualquier valor y NULL, da por resultado NULL. Y tu no estás validando eso en ninguna parte. Como mínimo deberías poner así
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Realicé lo que me han sugerido, y ahora también obtengo el valor del sueldo, ya inserta el total percepciones Y el sueldo neto, pero solo suma sueldo, y sigue siendo nulo las TPercepciones y Total_Comisiones y Total_Bonos... :( alguna otra sugerencia?... ya le di muchas vueltas y no logro entender donde esta el error... :S y gracias por su paciencia... |
| ||||
Respuesta: Procedimiento nomina ¿Entendiste el uso de IFNULL(). Lo tienes que aplicar también en el INSERT, en cada variable... Creí que se entendía el origen del problema y cómo gestionarlo, con sólo el ejemplo que te puse.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Mmm si, y disculpa mi ignorancia... pero ya agregado el IFNULL a las demás variables, pero aun no soluciono mi problema... que me parece esta en estas consultas:
Código MySQL:
Ver original el procedimiento ha quedado asi:
Código MySQL:
Ver original |
| ||||
Respuesta: Procedimiento nomina Bien, el problema que mencionabas al principio, es que dejaba esos valores en "blanco", aunque yo supongo que por tal te referías a NULL. Ahora, cuando mandas a ejecutar, ¿qué inserta?
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Inserta solo el sueldo, que selecciono en:
Código MySQL:
Ver original las consultas:
Código MySQL:
Ver original No me arrojan nada, por eso solo inserta el total del sueldo... los demas valores son "0" |
| ||||
Respuesta: Procedimiento nomina Bueno, si el resto de las consultas no devuelve datos, entonces o no tienes datos en las tablas, o el resto de los parámetros que pones en ellas no son correctos. En principio, el hecho de que estés harcodenado tantos parámetros no es bueno. ¿Qué valores contienen FechaI y FechaF? Y no me refiero a que si son fechas o no, eso ya lo se. Quiero saber qué valores le estás mandando al probarlo... Yo intentaría probar BETWEEM, para usar condiciones como las pones:
Código MySQL:
Ver original
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Las variables de tipo OUT solo las puse para poder ver los valores que obtengo cuando llamo al procedimiento, en un principio los tenia declarados dentro del procedimiento, y las variables fechas les mando a FechaI='2013-04-16' y a FechaF='2013-04-30'... ya implemente BETWEEN y el resultado sigue siendo el mismo... |
| |||
Respuesta: Procedimiento nomina Entonces ese debe ser el problema, que no entran como datetime sino como date. FechaI='2013-04-16' y a FechaF='2013-04-30' Prueba pasando la función DATE sobre tu Fecha en la comparación lo que yo haría sería pasarle la función DATE a tu fecha datetime a ver si hay suerte. Pasa como fecha lo que te entra como fecha: IN FechaI DATE, IN FechaF DATE, y luego en el filtro convierte en fecha tu datetime de origen. ... WHERE DATE(Fecha) ... a ver qué sucede. |
| ||||
Respuesta: Procedimiento nomina Hola jurena, gracias por tu sugerencia pero sigue sin funcionar :( ... de hecho ya lo habia implementado antes porque tambien lo sugirio leonardo_josue... creo que asi lo dejare, porque igual pasa por el filtro Estatus_Comision, Estatus_Bono... y creo que con eso es suficiente... :/ |
| ||||
Respuesta: Procedimiento nomina Cita: Acá la cosa queda clara...
Iniciado por tanliz Las variables de tipo OUT solo las puse para poder ver los valores que obtengo cuando llamo al procedimiento, en un principio los tenia declarados dentro del procedimiento, y las variables fechas les mando a FechaI='2013-04-16' y a FechaF='2013-04-30'... ya implemente BETWEEN y el resultado sigue siendo el mismo... El problema es que tu mandas esos valores en los parámetros de fecha, pero los parámertos son OUT, por lo que no admiten datos de entrada. En ese caso, siendo FechaI y FechaF OUT, cualquier valor que asignes a la llamada se descarta y pasan a valer NULL, porque no están incializados. Lo que en realidad sucede es que no te están funcionando las consultas porque estás comparando con un rango nulo... Cambia los parámetros de fecha por INOUT y prueba de nuevo.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Cita: No, eso no es suficiente, porque sumas todo lo que corresponda a ese Empleado, de todas las fechas que existan.
Iniciado por tanliz Hola jurena, gracias por tu sugerencia pero sigue sin funcionar :( ... de hecho ya lo habia implementado antes porque tambien lo sugirio leonardo_josue... creo que asi lo dejare, porque igual pasa por el filtro Estatus_Comision, Estatus_Bono... y creo que con eso es suficiente... :/ Y francamente no creo que eso sea lo que buscas...
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Ademas, ya he quitado los parametros OUT y he declarado la variables en el procedimiento, ya aplique la conversion de la fecha de datetime a date, utilice la funcion BETWEEN,... he aplicado todas las sugerencias que me han dado pero sigue dandome el mismo resultado... :( |
| ||||
Respuesta: Procedimiento nomina OK. Lectura rápida e incorrecta. Verifico de nuevo.
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina Revisando cuidadosamente tu código hay sólo una cosa que no se puede definir completamente: ¿Para qué usas la variable "fecha" que pones? No parece se rusada luego de cargada, por lo que no queda claro para qué existe. Otra cosa que hay que aclarar es si realmente existe en las tres tablas consultadas para sumatorias el campo "Fecha", o esa es una referencia a la variable. Te lo reformatee para poder verlo mejor (hacer todo amontonado no permite entender las consultas), y puse el inicio de la variable al inicio, que es donde debería ir, pero eso no debería afectar en nada.
Código MySQL:
Ver original Ahora bien, si el SP sigue sin funcionar sólo quedaría una opción: Error de datos en las tablas intermedias consultadas... Por cierto, ¿puedes postear la llamada a la consulta, tal y como la haces? Es decir el "CALL Alta_Nomina(..."
__________________ ¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente... "El problema es la interfase silla-teclado." (Gillermo Luque) |
| ||||
Respuesta: Procedimiento nomina SOLUCIONADO!!! Gnzsoloyo, es verdad, la variable fecha no la estoy utilizando, no me había dado cuenta, acabo de quitarla y ya funciona perfectamente (incluyendo la condición de las fechas!)... Muchas Gracias!!! |
Etiquetas: |