Programación General > Visual Basic 6.0 e inferiores

 Calcular Hora

<< < (3/3)

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 & &#34;:&#34; & TMinD    LbHrsN.Caption = THrsN & &#34;:&#34; & TMinN    LbTotalHrs.Caption = (THrsD + THrsN) & &#34;:&#34; & (TMinD + TMinN)    If (THrsD + THrsN) &#62; 44 Then        Clau26 = (THrsD + THrsN) - 44    Else        Clau26 = 0    End If    LbHrsExtD.Caption = THrsExtD & &#34;:&#34; & TMinExtD    LbHrsExtN.Caption = THrsExtN & &#34;:&#34; & 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 &#62;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,&#34;hh:mm:ss&#34;) 
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 = &#34;&#34; Or h2 = &#34;&#34; Then   Exit SubEnd Ifhc = Format(CDate(h2) - CDate(h1), &#34;hh:mm:ss&#34;)h = Hour(hc)m = Format(Minute(hc) / 60, &#34;0.00&#34;)s = Format(Second(hc) / 3600, &#34;0.00&#34;)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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa