ITECH Blog

Entrañas Sistemáticas

Ayudando a otros en ocasiones se ayuda uno mismo

leave a comment »

desktop

Hace un tiempo, me encontraba haciendo un programa de control de horario laboral, el cual tenía un código que se encargaba de tomar las horas, las descomponia en hrs, min, seg, para finalmente dar el resultado de la diferencia entre dos horas (hora de entrada y hora de salida del empleado). El código cada vez se fue haciendo más largo, el error fue intentar calcular 8 datos de hora en un mismo procedimiento o función, lo cual hacia que el resultado fuese inestable, también porque el resultado era un dato numerico decimal a diferencia de estimar la cantidad de horas de datos en formato “hora”.

Además, no solo era calcular las horas entre un par de horas, sino el pasar a otro campo las horas de exceso. Tenía que comparar las horas de entrada y salida con las horas reales de Entrada y Salida del empleado, saber si llego tarde o temprano, o si salio tarde o temprano y en base a eso, indicar las horas extras. A diferencia del empleado Diurno y el Nocturno, el empleado problema en todo esto era el Mixto, ya que no era fácil para el programa saber donde poner las Hrs Extras, es decir, ¿son HrsExt Diurnas o Nocturnas? esto se determinaba precisamente comparando las horas de E/S del empleado con las E/S de su horario y comparando con las horas de la LOT (Ley Organica de Trabajo). Si no existiese el empleado Mixto, todo esto hubiese sido más sencillo.

Otro detalle era que antes las horas no estaban apegadas a un campo Fecha, por lo que en el caso del Empleado Mixto, cuando su horario era entre dos días, por ejemplo, HoraEntrada: 7:00pm, HoraSalida: 2:00am el programa consideraba no calculaba 7pm-2am=7Hrs, sino que calculaba 2am-7pm=17Hrs, así que le coloque unos campos de fecha que el propio usuario maneja, así cuando el horario sea como este ejemplo, debe indicarse en la fecha de (2am) la fecha del siguiente día para que el programa no se confunda, es decir, la falta de razonamiento que ningun programa tiene, había que indicarsela para que calculara bien los datos.

Un día me llega un correo de una de las personas relacionadas a esto, preguntandome si sabría hacer eso en Excel, aunque he usado esta hoja de calculo, hasta la fecha no había hecho algo asi en esta aplicación, incluso, el programa que hacia era debido a que no deseaban que ese control fuese hecho en Excel, sino bajo un ambiente más controlado. El programa guarda informacion de los empleados, su horario, información de días festivos, calculo de las horas del día, informe de todo esto, cualquier cosa rara que quisiesen se agregaba como siempre.

Sabiendo que esto podría ocasionarle problemas a mi programa, igual me puse a investigar y en encontre esto:
=SI(B1>A1;B1-A1;B1+(1-A1)) y colocando las celdas en un formato personalizado de hh:mm se realizaba el calculo de horas.

Envie el archivo por correo y les sirvio, al parecer era para algo que debia de hacerse al momento, como siempre, hay cosas pendientes que eran para antiayer, asi es siempre.

Daba dolor de cabeza ver todo ese largo código con tantas validaciones y subprocedimientos, asi que decidí hacer uno nuevo.
Tome esto que había encontrado y termine con esto:

Hrs1 = 0: Hrs2 = 0
If CmbEntradaD1 "" And CmbSalidaD1 "" Then
Hr1 = CmbEntradaD1 & " " & dtpHED1
Hr2 = CmbSalidaD1 & " " & dtpHSD1
LbHorasTurnoD1 = Mid(CDate(Hr2) + (1 - CDate(Hr1)), 12, 5)
Else
LbHorasTurnoD1 = 0
End If
'Horas Extra:
HoraTope = "05:00"
If CDate(LbHorasTurnoD1) > CDate(HoraTope) Then
HrLimiteD1 = Mid(CDate(LbHorasTurnoD1) + (1 - CDate(HoraTope)), 12, 5)
LbHorasTurnoD1 = "05:00"
Else
HrLimiteD1 = 0
End If
If HrLimiteD1 = 0 And HrLimiteD2 = 0 Then
A = 0
Else
A = CDate(HrLimiteD1) + CDate(HrLimiteD2)
End If
LbTotalHrsExtD(0) = Mid(A, 1, 5)
'...
C = CDate(LbHorasTurnoD1) + CDate(LbHorasTurnoD2) + CDate(LbHorasTurnoN1) + CDate(LbHorasTurnoN2) + CDate(LbTotalHrsExtD(0)) + CDate(LbTotalHrsExtN)
LbTotalHrsLb = Mid(C, 1, 5)

Hice pequeños procedimientos para cada par de horas, siendo dos turnos de trabajo con respecto a la “Ley Organica del Trabajo” (LOT) o como más me gusta decirle “Ley Organica Laboral” (LOL) funciona sin problemas, porque no habría de funcionar. Pero al exceder de 12 Hrs al día, el calculo es diferente, pero esto no importa ya que la jornada laboral diaria era de 8 Hrs, ahora que la han cambiado a 6 Hrs, sería dificil que algun empleado trabaje el doble al día, pueden haber horas extras, lo cual las hay, de ahí todo esto, pero trabajar dos veces su turno al día sería más que una explotación laboral.

En la LOL se indica lo sigueinte:

Articulo 196.- Por acuerdo entre el patrono y los trabajadores, podrá establecerse una jornada diaria hasta de nueve (9) horas sin que se exceda el límite semanal de cuarenta y cuatro (44) horas, para otorgar a los trabajadores dos (2) días completos de descanso cada semana.

Esto era cuando la jornada era de 8 Hrs al día y en donde con un acuerdo entre el empleado y el patron se podría trabajar máximo una hora más (9 hrs la jornada al día) pero que esto no excediese 44 hrs a la semana. Estos cambios (la nueva constitución) no perjudican en nada al programa ni hacen que tenga que modificar nada, siendo en todo caso un beneficio.

En resumen, buscando la solución del correo, sirvio para mejorar y minimizar lo mio, a diferencia del mounstroso código que tenía antes y esto de la LOT o LOL, beneficia al programa y así me evito problemas de horas extras fuera de algun rango que ocasione malos calculos de estimación de horas.

Anuncios

Written by jocdz

octubre 5, 2007 a 4:06 pm

Publicado en Desarrollo, Software

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: