Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-06-2013
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 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
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
procedimiento que muestre por pantalla vector szunny18 Varios 10 19-09-2010 10:29:01
Convertir n horas en nnn días y nn horas rretamar Trucos 1 01-08-2008 10:16:34
Programa que muestre imagen de una web Celorio10 Internet 4 16-05-2008 21:26:49
Consulta que muestre Si o No segun el valor Cecil SQL 4 17-01-2008 00:49:38
SQL que arroja 20 registros que muestre 10 cahosoft Firebird e Interbase 7 19-02-2004 18:44:29


La franja horaria es GMT +2. Ahora son las 03:22:02.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi