Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-01-2008
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Question Sumar Horas

Hola amigos foreros:

Junto con saludarlos, quisiera que me ayudaran con "problemilla" que tengo, resulta que tengo que sacar las horas extras realizadas por un empleado en un mes y para ellos debo sumar las horas extras trabajadas, alguien me podría decir como puedo hacer esto:

Código SQL [-]
  
 01:25:00
 03:20:00
 02:00:00
---------
 06:45:00

desde ya, muchas gracias por su ayuda..
Responder Con Cita
  #2  
Antiguo 26-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me parece, segun entiendo, que estos datos están en una tabla, si es asi por que no usar una sentencia sql?.
Saludos
Responder Con Cita
  #3  
Antiguo 26-01-2008
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Smile

eso intente, pero me da error, ademas hice lo siguiente..

Código SQL [-]
 
Declare @Fecha as smalldatetime
Declare @FechaM as smalldatetime
--Sacamos la Maxima Fecha Actual...
  Set @Fecha=(Select Max(FechaControl)
                From Control)    
--Obtenemos la Fecha de 4 meses Atraz...     
  Set @FechaM=(DATEADD(mm, -4, @Fecha) ) 

--select @FechaM as max

Select Tiempo.div,Tiempo.DivName,Semana=dbo.ObtenerSemana(Tiempo.FechaControl),
       Times=CONVERT(DATETIME, 
       CONVERT (CHAR (3), SUM (DATEPART(MINUTE, Tiempo.TCD )) / 60 + SUM (DATEPART(HOUR, Tiempo.TCD)) ) + ':' + 
       CONVERT (CHAR (3), SUM (DATEPART(minute, Tiempo.TCD )) + (SUM(DATEPART(second, Tiempo.TCD))/60) % 60)+ ':' +
       CONVERT (CHAR (3), SUM (DATEPART(second, Tiempo.TCD )) % 60)), Anio=0
  From(Select a1.div,DivName=Case a1.div When 42 Then 'MENDOZA'
                                         When 43 Then 'CORDOVA'     
                                         When 44 Then 'BUENOS AIRES' End,    
              A1.LocName as Origen, A.LocOrigen,A2.LocName as Destino, A.LocDestino,A.HrEntrada,A.HrSalida,A.FechaControl ,
              TCD=cast( (A.HrSalida - A.HrEntrada) as datetime)--,
              --TCD=left(convert(varchar,(A.HrSalida - A.HrEntrada), 108), 8)
         From Control A
        Inner Join LocNames  As A1
           On A1.Loc=A.LocOrigen 
        Inner Join LocNames  As A2
           On A2.Loc=A.LocDestino
        Where A.FechaControl >=@FechaM) Tiempo 
  Group By Tiempo.div,Tiempo.DivName,dbo.ObtenerSemana(Tiempo.FechaControl)

eso funciona bien, pero cuando la cantidad de minutos es sobrepasada, osea la suma de minutos es superior a 60, arroja error...

Muchas gracias por tu ayuda..
Responder Con Cita
  #4  
Antiguo 26-01-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad no entiendo.
El empleado ingresa la hora de entrada y la hora de salida en la tabla?.
Si es asi uno supondria que hay una hora predeterminada de entrada y otra de salida.
Por ejemplo:
la hora de entrada es 7 am
La hora de salida almuerzo es 12 m
La hora de entrada es 1 pm
La hora de salida es 5 pm
Esto nos da parametros.
Si el empleado entra a las 7 am y sale a almorzar a las 12.30 pm ya tiene 30 minutos de extras, pero su entra a su vez a la 1.30 pm y salio a las 5 pm, entonces cumplio con su horario.
No se, me parece que depende de como se esten colocando los datos y que tipo de datos se colocan en la tabla, el resto es hacer unas sumas y restas sencillas.
Bueno, es lo que me pareceria mas logico y por supuesto mas sencillo.
La verdad no entiendo bien el concepto de lo que estas haciendo.
Saludos
Responder Con Cita
  #5  
Antiguo 26-01-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Aparte del buen apunte de Caral, lo mejor en estos casos es pasar todo a segundos, sumar y por último volver a pasar a formato hh:nn:ss

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #6  
Antiguo 26-01-2008
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
es verdad..

disculpa caral, por no haber explicado la consulta Sql, lo que pasa es que de esa manera estoy calculando un control de flota de camiones, era solo para mostrar la manera en la que he estado sumando Horas.., ahora voy a intentarlo convirtiendo las horas a segundos y luego sumarlas..gracias por tu ayuda..
Responder Con Cita
  #7  
Antiguo 26-01-2008
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Smile

Asi es Lepe, eso voy a hacer convertir todo a segundos y luego convertir, nuevamente, a formato de hora.
Responder Con Cita
  #8  
Antiguo 26-01-2008
Avatar de BuenaOnda
BuenaOnda BuenaOnda is offline
Miembro
 
Registrado: feb 2006
Ubicación: La Serena - Chile
Posts: 347
Poder: 19
BuenaOnda Va por buen camino
Thumbs up Solucionado..

solucione mi problema. converti todo a segundos y luego formatee la hora de la siguiente manera.

funcion.
Código SQL [-]
CREATE FUNCTION [dbo].[FormatHora] 
(@Segundos float) 
RETURNS varchar(50) AS 
BEGIN 
        DECLARE @RES VARCHAR(50) 
        DECLARE @HORAS FLOAT 
        DECLARE @MINS FLOAT 
        DECLARE @SEGS FLOAT 
        DECLARE @RESTO FLOAT 

        SET @HORAS = @Segundos /60/60 
        SET @RESTO = @HORAS - FLOOR(@HORAS) 
        --LISTO HORAS 
        SET @HORAS = FLOOR(@HORAS) 

        SET @MINS = @RESTO * 60 
        SET @RESTO = @MINS - FLOOR(@MINS) 
        --LISTO MINS 
        SET @MINS = FLOOR(@MINS) 

        SET @SEGS = @RESTO * 60 

        SET @RES = CAST(@HORAS as varchar) + ':' + right('00'+cast(@MINS as 
varchar),2) + ':' + right('00'+cast(@segs as varchar),2) 
        RETURN @RES 
END

Utilizando la conulta anterior..
Código SQL [-]
Declare @Fecha as smalldatetime
Declare @FechaM as smalldatetime
--Sacamos la Maxima Fecha Actual...
  Set @Fecha=(Select Max(FechaControl)
                From Control)    
--Obtenemos la Fecha de 4 meses Atraz...     
  Set @FechaM=(DATEADD(mm, -4, @Fecha) ) 
Select Tiempo.div,Tiempo.DivName,Semana=dbo.ft_ieo_ObtenerSemana(Tiempo.FechaControl),
       Times=dbo.FormatHora( SUM(DATEDIFF(s, CAST('00:00:00'AS datetime), CAST(Tiempo.TCD as datetime)))) , 
       Anio=0
  From(Select a1.div,DivName=Case a1.div When 42 Then 'MENDOZA'
                                         When 43 Then 'CORDOVA'     
                                         When 44 Then 'BUENOS AIRES' End,    
              A1.LocName as Origen, A.LocOrigen,A2.LocName as Destino, A.LocDestino,A.HrEntrada,A.HrSalida,A.FechaControl ,
              TCD=cast( (A.HrSalida - A.HrEntrada) as datetime)--,
              --TCD=left(convert(varchar,(A.HrSalida - A.HrEntrada), 108), 8)
         From Control A
        Inner Join LocNames  As A1
           On A1.Loc=A.LocOrigen 
        Inner Join LocNames  As A2
           On A2.Loc=A.LocDestino
        Where A.FechaControl >=@FechaM) Tiempo 
  Group By Tiempo.div,Tiempo.DivName,dbo.ft_ieo_ObtenerSemana(Tiempo.FechaControl)

muchas gracias por su ayuda..
Responder Con Cita
Respuesta



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
Sumar Horas con RAVE zerelho Impresión 2 27-07-2005 13:25:32
sumar horas rober Varios 14 10-06-2004 01:30:57
sumar horas y minutos acrophet Varios 1 29-01-2004 17:29:46
Sumar Horas?? YolandaM Varios 4 09-11-2003 09:21:46


La franja horaria es GMT +2. Ahora son las 15:37:10.


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