Programación General > Visual Basic 6.0 e inferiores
Calcular Hora
UserCode:
Bueno, creo que ya esta solucionado el asunto de las sumas, siempre quise probar algo que daba mal hasta que ya de forma más organizada dio.
Debido al problema de mostrar un Total (formato dato numerico) en base a datos de Hora (formato hora), decidí hacer una tablita en la Bd y desde el programa truncar o tomar la porción de interés de cada Total_Horas (las horas y los minutos de cada turno).
Recurri a esto porque de usar alguna función en VB, no sabía luego como solucionarlo igual en Crystal.
Luego de recopilar o llenar eso con cada ingreso de datos, los organizo y sumo asi:
Ejemplo:
--- Código: Text --- Select Sum(hD) As HrsD, Sum(mD) As MinD, Sum(hN) As HrsN, Sum(mN) As MinN, Sum(hExtD) As HrsExtD, Sum(mExtD) As MinExtD, Sum(hExtN) As HrsExtN, Sum(mExtN) As MinExtN From chl_totalesemp Where NumEmp=30915 And Fecha Between #01/05/2007# And #31/05/2007#
Y metiendo eso en unos Labels en la ventana:
--- Código: Text --- Dim THrsD As Integer Dim TMinD As Integer Dim THrsN As Integer Dim TMinN As Integer Dim THrsExtD As Integer Dim TMinExtD As Integer Dim THrsExtN As Integer Dim TMinExtN As Integer Dim Clau26 As Integer With Data2.Recordset While Not .EOF '.................................... 'hD: If IsNumeric(![HrsD]) = False Then Exit Sub Else THrsD = THrsD + Val(![HrsD]) End If 'mD: If IsNumeric(![MinD]) = False Then Exit Sub Else TMinD = TMinD + Val(![MinD]) End If '.................................... 'hN: If IsNumeric(![HrsN]) = False Then Exit Sub Else THrsN = THrsN + Val(![HrsN]) End If 'mN: If IsNumeric(![MinN]) = False Then Exit Sub Else TMinN = TMinN + Val(![MinN]) End If '.................................... 'hExtD: If IsNumeric(![HrsExtD]) = False Then Exit Sub Else THrsExtD = THrsExtD + Val(![HrsExtD]) End If 'mExtD: If IsNumeric(![MinExtD]) = False Then Exit Sub Else TMinExtD = TMinExtD + Val(![MinExtD]) End If '.................................... 'hExtN: If IsNumeric(![HrsExtN]) = False Then Exit Sub Else THrsExtN = THrsExtN + Val(![HrsExtN]) End If 'mExtN: If IsNumeric(![MinExtN]) = False Then Exit Sub Else TMinExtN = TMinExtN + Val(![MinExtN]) End If '.................................... .MoveNext Wend End With LbHrsD.Caption = THrsD & ":" & TMinD LbHrsN.Caption = THrsN & ":" & TMinN LbTotalHrs.Caption = (THrsD + THrsN) & ":" & (TMinD + TMinN) If (THrsD + THrsN) > 44 Then Clau26 = (THrsD + THrsN) - 44 Else Clau26 = 0 End If LbHrsExtD.Caption = THrsExtD & ":" & TMinExtD LbHrsExtN.Caption = THrsExtN & ":" & TMinExtN LbClau26.Caption = Clau26
Lo cual saca al final de los datos traidos a la ventana, el tan sufrido total de horas y minutos como se ve remarcado en recuadro rojo.
Probando como rula:
Y ya con eso, igual para el Reporte, al cual procedere a terminarlos
Además de los totales, preocupaba el dato llamado "Clausula 26" que estima que un Empleado debe trabajar 44 horas a la semana, no más de eso.
--- Código: Text --- If TotalHrsLb >44 Then Clau26 = TotalHrsLb - 44Else Clau26 = 0End If
Ya ese problema lo había mencionado en otro post, antes que viniese el Sr y cambiase todo haciendome perder tiempo, por remplazarlo casi todo :angry:
Yo creo que si furula bien, pues lo dejo así, aplicandose al dicho de "si funciona, dejalo así, ni lo toques" :P
:hola:
:comp:
F_Tanori:
--- Citar ---09:00
08:30
02:30
--------
19:60 ?
--- Fin de la cita ---
que no serian 20 hrs? en ese caso que pasaria si fueran algo como
--- Citar ---09:50
08:40
02:30
--------
19:120
--- Fin de la cita ---
:unsure: :blink:
desde mi punto de vista (humilde opinion :rolleyes: ) deberias de convertir todo a segundos y hacer las operaciones matematicas con ellas una vez obtenido el resultado convertir en formato hh:mm:ss
Saludos
Angel38:
Huy man que pena contigo. Al final suma tienes que darle asi.
--- Código: Text ---Varsuma= format(suma,"hh:mm:ss")
Prueba a ver que te sale.
UserCode:
--- Citar ---
09:00
08:30
02:30
--------
19:60 ?
que no serian 20 hrs? en ese caso que pasaria si fueran algo como
--- Fin de la cita ---
Son 19 Hrs con 60 minutos :P
--- Citar ---09:50
08:40
02:30
--------
19:120
--- Fin de la cita ---
Ese 120 me está asustando :(
tendría que revisar. Pero no es que no sea valido.
Sería fabuloso que por cada 60 minutos o más, se incremente el de hora, es decir, se distribuya como deberia, porque 3:60 podría ser realmente 4:00 por ejemplo.
De todas formas, creo que el formato de todo esto siempre es semanal, claro está que si se desea ver registros de un Empleado de más de una semana, un mes o más, el acumulado excederia lo normal de totales, pero por ejemplo, todo esto a partido de algo en Excel en donde solo se observa la semana, siendo así un control de semana por semana los 7 dias.
Si si, ya sé, ahí dice AM y PM, es que ese era el formato viejo, ahora es con todo este dolor de cabezas de horas haciendo que lo hecho anteriormente haya ido directo al caño cuando yo era feliz y el programa trabajaba por numeros :(
F_Tanori:
--- Citar ---desde mi punto de vista (humilde opinion rolleyes.gif ) deberias de convertir todo a segundos y hacer las operaciones matematicas con ellas una vez obtenido el resultado convertir en formato hh:mm:ss
--- Fin de la cita ---
Aun no sé hacer eso, es la primera vez que trabajo tanto con horas :unsure:
procedere a investigar un poco sobre como hacer eso.
Angel38:
--- Citar ---Varsuma= format(suma,"hh:mm:ss")
--- Fin de la cita ---
Hmmmm.... con razón no furulaba bien, eso tambien lo voy a revisar :huh:
UserCode:
El código que he usado gracias a un ring y pregunta a alguien :P
--- Código: Text --- Dim hc As VariantDim h As VariantDim h1 As VariantDim h2 As VariantDim ht As VariantDim m As VariantDim s As Varianth1 = CmbEntradaD.Texth2 = CmbSalidaD.TextIf h1 = "" Or h2 = "" Then Exit SubEnd Ifhc = Format(CDate(h2) - CDate(h1), "hh:mm:ss")h = Hour(hc)m = Format(Minute(hc) / 60, "0.00")s = Format(Second(hc) / 3600, "0.00")ht = h + m + sLbHorasTurnoD.Caption = ht
Resultados del código:
7:00 am - 12:00 pm = 5
7:30 am - 12:00 pm = 4,5
6:00 am - 6:30 am = 0,5
hc: Hora Completa
h1: Hora de Entrada
h2: Hora de Salida
h: La hora resultado de la diferencia de h2-h1 y ya con su formato "hh:mm:ss"
ht: Hora Total
m: minutos (obviamente)
s: segundos (obviamente)
Por cierto, había preguntado en una ocasión algo sobre como mostrar en controles de calendario DTPicker el 1er y ultimo dia del Mes. Bueno el ultimo día no es importante puesto que con respecto al día presente, no hay manera de conocer ni interes en ver datos que aun no han sido ingresados, ni que viesemos el futuro de los datos de mañana y los continuos dias :P
Seria entonces desde el 1er día del mes hasta el día actual del mismo en el que nos encontramos para mostrar datos de días anteriores.
Primer día del Mes:
DTPicker.Value = "01/" & Month(Date) & "/" & Year(Date)
Para un TextBox pues seria eso mismo pero dentro de un Format.
Por fiiiiiiiin!!! :P
Si alguien lo necesita, ahi ta :kicking:
Navegación
[*] Página Anterior
Ir a la versión completa