Ver Mensaje Individual
  #22 (permalink)  
Antiguo 03/05/2013, 18:51
Avatar de gnzsoloyo
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)