Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Procedimiento nomina

Estas en el tema de Procedimiento nomina en el foro de Mysql en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 03/05/2013, 10:39
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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
  1. CREATE DEFINER=`proi`@`localhost` PROCEDURE `Alta_Nomina`(IN NominaId VARCHAR(5),
  2.                             IN EmpleadoId VARCHAR(5),
  3.                             IN FechaI DATE,
  4.                             IN FechaF DATE)
  5.     DECLARE fecha DATETIME;
  6.     DECLARE TDeducciones DECIMAL(10,2);
  7.     DECLARE Percepciones_Comisiones DECIMAL(10,2);
  8.     DECLARE Percepciones_Bonos DECIMAL(10,2);
  9.     DECLARE Total_Percepciones DECIMAL(10,2);
  10.     DECLARE Sueldo DECIMAL(10,2);
  11.     DECLARE Total_Quincena DECIMAL(10,2);
  12.    
  13.     SET TDeducciones = (SELECT SUM(Monto) FROM descuentos_empleados WHERE Fecha>=FechaI AND Fecha<=FechaF AND Empleado_Id=EmpleadoId AND Estatus_Descuento='Pendiente');   
  14.     SET Percepciones_Comisiones = (SELECT SUM(Comision) FROM comisiones WHERE Fecha>=FechaI AND Fecha<=FechaF AND Empleado_Id=EmpleadoId AND Estatus_Comision='Pendiente');
  15.     SET Percepciones_Bonos = (SELECT SUM(Monto) FROM bonos WHERE Fecha>=FechaI AND Fecha<=FechaF AND Empleado_Id=EmpleadoId AND Estatus_Bono='Pendiente');
  16.     SET Sueldo=(SELECT Sueldo FROM empleados WHERE Empleado_Id=EmpleadoId);
  17.     SET Total_Percepciones = Percepciones_Comisiones + Percepciones_Bonos + Sueldo;
  18.     SET Total_Quincena = Total_Percepciones-TDeducciones;
  19.     SET fecha=CURDATE();
  20.    
  21.     INSERT INTO Nomina(Nomina_Id, Empleado_Id, Fecha_Inicial, Fecha_Final, Deducciones, Percepciones, Sueldo_Neto, Estatus_Registro)
  22.     VALUES(NominaId, EmpleadoId, FechaI, FechaF, TDeducciones, Total_Percepciones, Total_Quincena, 'Activo');
  23.        
  24.     END$$
  #2 (permalink)  
Antiguo 03/05/2013, 11:55
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 14 años, 2 meses
Puntos: 331
Respuesta: Procedimiento nomina

Para empezar haz un output de cada una de esas select que utilizas y verifica que se ejecutan correctamente. Si sólo se insertan los valores que pasas como parámetros significa que todas las demas variables están vacias. Comprueba sus valores justo después de ser asignados.
Salu2
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 03/05/2013, 12:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
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)
  #4 (permalink)  
Antiguo 03/05/2013, 12:50
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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....
  #5 (permalink)  
Antiguo 03/05/2013, 13:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
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:
SET TDeducciones = (
   SELECT SUM(Monto) 
   FROM descuentos_empleados 
   WHERE 
   DATE(Fecha)>=FechaI AND 
   DATE(Fecha)<=FechaF AND   
   Empleado_Id=EmpleadoId AND 
   Estatus_Descuento='Pendiente')
Haz la prueba y nos comentas.

Saludos
Leo.
  #6 (permalink)  
Antiguo 03/05/2013, 13:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento nomina

La clave de todo está en esto:
Cita:
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);
¿Sabes qué da de resultado esto?:
Cita:
10 + 10 + 10 + 10 + 10 + 10 + NULL
Da 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í
Código MySQL:
Ver original
  1. SET Total_Percepciones = IFNULL(Percepciones_Comisiones, 0)  + IFNULL(Percepciones_Bonos, 0) + IFNULL(Sueldo, 0);
  2. SET Total_Quincena = IFNULL(Total_Percepciones, 0) - IFNULL(TDeducciones, 0);
  3. SET fecha=CURDATE();
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 03/05/2013, 13:54
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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...
  #8 (permalink)  
Antiguo 03/05/2013, 14:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
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)
  #9 (permalink)  
Antiguo 03/05/2013, 14:18
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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
  1. SET TDeducciones = (SELECT SUM(Monto) FROM descuentos_empleados WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Descuento='Pendiente'); 
  2.     SET Percepciones_Comisiones = (SELECT SUM(Comision) FROM comisiones WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Comision='Pendiente');
  3.     SET Percepciones_Bonos = (SELECT SUM(Monto) FROM bonos WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Bono='Pendiente');


el procedimiento ha quedado asi:

Código MySQL:
Ver original
  1. CREATE DEFINER=`proi`@`localhost` PROCEDURE `Alta_Nomina`(IN NominaId VARCHAR(5),
  2.                             IN EmpleadoId VARCHAR(5),
  3.                             IN FechaI DATETIME,
  4.                             IN FechaF DATETIME,
  5.                             OUT TDeducciones DECIMAL(10,2),
  6.                             OUT Percepciones_Comisiones DECIMAL(10,2),
  7.                             OUT Percepciones_Bonos DECIMAL(10,2),
  8.                             OUT Total_Percepciones DECIMAL(10,2),
  9.                             OUT Sueldoq DECIMAL(10,2),
  10.                             OUT Total_Quincena DECIMAL(10,2))
  11.     DECLARE fecha DATETIME;
  12.    
  13.     SET TDeducciones = (SELECT SUM(Monto) FROM descuentos_empleados WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Descuento='Pendiente'); 
  14.     SET Percepciones_Comisiones = (SELECT SUM(Comision) FROM comisiones WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Comision='Pendiente');
  15.     SET Percepciones_Bonos = (SELECT SUM(Monto) FROM bonos WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Bono='Pendiente');
  16.     SET Sueldoq=(SELECT Sueldo FROM empleados WHERE Empleado_Id=EmpleadoId);
  17.     SET Total_Percepciones = IFNULL(Percepciones_Comisiones, 0) + IFNULL(Percepciones_Bonos, 0) + IFNULL(Sueldoq, 0);
  18.     SET Total_Quincena = IFNULL(Total_Percepciones, 0)- IFNULL(TDeducciones, 0);
  19.     SET fecha=CURDATE();
  20.    
  21.     INSERT INTO Nomina(Nomina_Id, Empleado_Id, Fecha_Inicial, Fecha_Final, Deducciones, Percepciones, Sueldo_Neto, Estatus_Registro)
  22.     VALUES(NominaId, EmpleadoId, FechaI, FechaF, IFNULL(TDeducciones, 0), IFNULL(Total_Percepciones, 0), IFNULL(Total_Quincena, 0), 'Activo');
  23.        
  24.     END$$
  #10 (permalink)  
Antiguo 03/05/2013, 14:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
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)
  #11 (permalink)  
Antiguo 03/05/2013, 14:47
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Procedimiento nomina

Inserta solo el sueldo, que selecciono en:
Código MySQL:
Ver original
  1. SET Sueldoq=(SELECT Sueldo FROM empleados WHERE Empleado_Id=EmpleadoId);

las consultas:
Código MySQL:
Ver original
  1. SET TDeducciones = (SELECT SUM(Monto) FROM descuentos_empleados WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Descuento='Pendiente'); 
  2.     SET Percepciones_Comisiones = (SELECT SUM(Comision) FROM comisiones WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Comision='Pendiente');
  3.     SET Percepciones_Bonos = (SELECT SUM(Monto) FROM bonos WHERE (Fecha>=FechaI AND Fecha<=FechaF) AND Empleado_Id=EmpleadoId AND Estatus_Bono='Pendiente');

No me arrojan nada, por eso solo inserta el total del sueldo... los demas valores son "0"
  #12 (permalink)  
Antiguo 03/05/2013, 14:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
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
  1. /* Formatted on 2013/05/03 17:47 (Formatter Plus v4.8.7) */
  2. SELECT SUM (Monto)
  3.   FROM descuentos_empleados
  4.  WHERE Fecha BETWEEN FechaI AND FechaF
  5.    AND Empleado_Id = EmpleadoId
  6.    AND Estatus_Descuento = 'Pendiente'
  7.    INTO TDeducciones ;
  8.  
  9. SELECT SUM (Comision)
  10.   FROM comisiones
  11.  WHERE Fecha BETWEEN FechaI AND FechaF
  12.    AND Empleado_Id = EmpleadoId
  13.    AND Estatus_Comision = 'Pendiente'
  14.    INTO Percepciones_Comisiones;
  15. SELECT SUM (Monto)
  16.   FROM bonos
  17.  WHERE Fecha BETWEEN FechaI AND FechaF
  18.    AND Empleado_Id = EmpleadoId
  19.    AND Estatus_Bono = 'Pendiente'
  20.    INTO Percepciones_Bonos;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 03/05/2013, 15:08
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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...
  #14 (permalink)  
Antiguo 03/05/2013, 15:22
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Procedimiento nomina

He quitado la condicion de las fechas y si funciona.... pero sigo sin entender porque... podrian darme otra sugerencia de como comparar fechas?
  #15 (permalink)  
Antiguo 03/05/2013, 15:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
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.
  #16 (permalink)  
Antiguo 03/05/2013, 15:57
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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... :/
  #17 (permalink)  
Antiguo 03/05/2013, 17:04
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento nomina

Cita:
Iniciado por tanliz Ver Mensaje
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...
Acá la cosa queda clara...


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)
  #18 (permalink)  
Antiguo 03/05/2013, 17:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Procedimiento nomina

Cita:
Iniciado por tanliz Ver Mensaje
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... :/
No, eso no es suficiente, porque sumas todo lo que corresponda a ese Empleado, de todas las fechas que existan.
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)
  #19 (permalink)  
Antiguo 03/05/2013, 17:14
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
Respuesta: Procedimiento nomina

Gnsoloyo, los parametros FechaI y FechaF no son parametros de tipo OUT, son de tipo IN por lo tanto no pueden ser nulos... es eso a lo q te refieres? o no entendi?
  #20 (permalink)  
Antiguo 03/05/2013, 17:20
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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... :(
  #21 (permalink)  
Antiguo 03/05/2013, 17:20
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
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)
  #22 (permalink)  
Antiguo 03/05/2013, 18:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
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
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `Alta_Nomina`(
  4.     IN NominaId VARCHAR(5),
  5.     IN EmpleadoId VARCHAR(5),
  6.     IN FechaI DATE,
  7.     IN FechaF DATE)
  8.     DECLARE vFecha DATE;
  9.     DECLARE TDeducciones DECIMAL(10,2);
  10.     DECLARE Percepciones_Comisiones DECIMAL(10,2);
  11.     DECLARE Percepciones_Bonos DECIMAL(10,2);
  12.     DECLARE Total_Percepciones DECIMAL(10,2);
  13.     DECLARE Sueldo DECIMAL(10,2);
  14.     DECLARE Total_Quincena DECIMAL(10,2);
  15.    
  16.     SET vFecha=CURDATE();
  17.    
  18.     SET TDeducciones =
  19.         (
  20.         SELECT SUM(DE.Monto)
  21.         FROM descuentos_empleados DE
  22.         WHERE
  23.             DATE(DE.Fecha) BETWEEN FechaI AND FechaF
  24.             AND DE.Empleado_Id = EmpleadoId
  25.             AND DE.Estatus_Descuento='Pendiente'
  26.             );    
  27.     SET Percepciones_Comisiones =
  28.         (SELECT SUM(Comision)
  29.         FROM comisiones CO
  30.         WHERE
  31.             DATE(CO.Fecha) BETWEEN FechaI AND FechaF
  32.             AND CO.Empleado_Id = EmpleadoId
  33.             AND CO.Estatus_Descuento='Pendiente'
  34.             );    
  35.     SET Percepciones_Bonos =
  36.         (SELECT SUM(Monto)
  37.         FROM bonos BO
  38.         WHERE
  39.            DATE(BO.Fecha) BETWEEN FechaI AND FechaF
  40.             AND BO.Empleado_Id = EmpleadoId
  41.             AND BO.Estatus_Descuento='Pendiente'
  42.             );  
  43.            
  44.     SET Sueldo =
  45.         (SELECT Sueldo
  46.         FROM empleados
  47.         WHERE Empleado_Id=EmpleadoId);
  48.    
  49.     SET Total_Percepciones = IFNULL(Percepciones_Comisiones, 0) + IFNULL(Percepciones_Bonos, 0) + IFNULL(Sueldo, 0);
  50.    
  51.     SET Total_Quincena = IFNULL(Total_Percepciones, 0) - IFNULL(TDeducciones, 0);
  52.    
  53.    
  54.     INSERT INTO Nomina(
  55.         Nomina_Id,
  56.         Empleado_Id,
  57.         Fecha_Inicial,
  58.         Fecha_Final,
  59.         Deducciones,
  60.         Percepciones,
  61.         Sueldo_Neto,
  62.         Estatus_Registro)
  63.     VALUES(
  64.         NominaId,
  65.         EmpleadoId,
  66.         FechaI,
  67.         FechaF,
  68.         IFNULL(TDeducciones, 0),
  69.         IFNULL(Total_Percepciones, 0),
  70.         IFNULL(Total_Quincena, 0),
  71.         'Activo');
  72.        
  73.     END$$


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)
  #23 (permalink)  
Antiguo 04/05/2013, 09:51
Avatar de tanliz  
Fecha de Ingreso: abril-2013
Ubicación: Irapuato
Mensajes: 63
Antigüedad: 11 años, 7 meses
Puntos: 1
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: insert, nomina, procedimiento, registro, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:12.