Ver Mensaje Individual
  #1  
Antiguo 20-06-2013
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Reputación: 14
novato_erick Va por buen camino
Procedimiento que me muestre total de horas

Hola Chicos:

nuestro amigo Chogo creó este procedimiento almacenado en Firebird el cual trae consulta por parámetro de un máximo de 15 días pero necesito realizar la suma de horas el cual están en el campo de HORA y no se como implementarlo me da muchos errores alguna idea como implementarlo?

Código SQL [-]
CREATE PROCEDURE CALCULOMARCACIONES(
  INICIO DATE,
  FINAL DATE,
  CODIGO INTEGER)
RETURNS(
  ID_EMPLEADOS INTEGER,
  FECHA DATE,
  NUM_DIA SMALLINT,
  DIA VARCHAR(30) CHARACTER SET NONE COLLATE NONE,
  ENTRADA0 TIMESTAMP,
  SALIDA0 TIMESTAMP,
  ENTRADA1 TIMESTAMP,
  SALIDA1 TIMESTAMP,
  ENTRADA2 TIMESTAMP,
  SALIDA2 TIMESTAMP,
  FALTA VARCHAR(1) CHARACTER SET NONE COLLATE NONE,
  HORASORDINARIAS DECIMAL(12, 2),
  HORASEXTRAS DECIMAL(12, 2))
AS
DECLARE VARIABLE FILA INTEGER;
DECLARE VARIABLE COLUMNA SMALLINT;
DECLARE VARIABLE XFECHAHORA TIMESTAMP;
DECLARE VARIABLE HORASORDEXTRA VARCHAR(20);
DECLARE VARIABLE MINUTOSAHORA VARCHAR(20);
BEGIN

  FOR
 
   SELECT
                    TMARCACIONES.ID_EMPLEADOS
                    -->LINEA.LINEA
                    FROM
                    TMARCACIONES                    
                      -->INNER JOIN LINEA ON (MARCACIONES_RELOJ.IDLINEA = LINEA.IDLINEA)
                    WHERE
                    TMARCACIONES.FECHA BETWEEN :INICIO AND :FINAL AND TMARCACIONES.ID_EMPLEADOS = :CODIGO
                    GROUP BY
                    TMARCACIONES.ID_EMPLEADOS
                    -->LINEA.LINEA
                    ORDER BY
                    -->LINEA.LINEA,
                    TMARCACIONES.ID_EMPLEADOS
  
        INTO
            :ID_EMPLEADOS-->,                       
             DO 
  BEGIN
       /*ESTE CICLO CREA 7 REGISTROS, ES UN REGISTRO DE POR CADA DIA DE LA SEMANA*/
       Fila=1;
       FECHA = INICIO;
       WHILE (Fila<>16) DO
       BEGIN 
               NUM_DIA=FILA;
               COLUMNA=0;
               
               ENTRADA0=NULL;
               SALIDA0=NULL;
               
               ENTRADA1=NULL;
               SALIDA1=NULL;
               
               ENTRADA2=NULL;
               SALIDA2=NULL;
               
               HORASORDINARIAS=NULL;
               HORASEXTRAS=NULL;
               
               FOR 
                       SELECT 
                          M.HORA 
                       FROM 
                          TMARCACIONES M
                       WHERE 
                           M.ID_EMPLEADOS = :ID_EMPLEADOS AND  M.FECHA = :FECHA
                       ORDER BY
                             m.HORA
                       INTO 
                             :XFECHAHORA                            
                       
               DO
               BEGIN
                   /* AQUI CONSULTAS LAS MARCACIONES DE UN EMPLEADO EN UNA SOLA FECHA */     
                        
                   IF (COLUMNA = 0) THEN
                   ENTRADA0=XFECHAHORA;
                        
                   IF (COLUMNA = 1) THEN
                   SALIDA0=XFECHAHORA;

                   IF (COLUMNA = 2) THEN
                   ENTRADA1=XFECHAHORA;
                   
                   IF (COLUMNA = 3) THEN
                   SALIDA1=XFECHAHORA;                   

                   IF (COLUMNA = 4) THEN
                   ENTRADA2=XFECHAHORA;
                  
                   IF (COLUMNA = 5) THEN
                   SALIDA2=XFECHAHORA;
                   
                   IF (COLUMNA = 6) THEN
                   HORASORDINARIAS=XFECHAHORA;  
                   
                   COLUMNA = COLUMNA + 1;
               END 
              
              IF (ENTRADA0 IS NULL) THEN FALTA = 'X'; ELSE FALTA='';  
       
                SUSPEND;
              FECHA = INICIO + FILA;
              Fila = Fila + 1;
              
       END       
       /* Procedure body */
  END
END;


Saludos

novato_erick
Responder Con Cita