(Solucionado resta de horas) Como validar retardo ...

(Solucionado resta de horas) Como validar retardo ...

Postby ACC69 » Fri May 16, 2014 9:03 pm

Hola buenas tardes como estan, aqui de nuevo con una pregunta sencilla, o no tan sencilla.
Como puedo validar el tiempo con 15 minutos de tolerancia, o convertir 15 minutos a hora time(), u otro metodo de funcion.

1.- Por ejemplo en el sistema hora de entrada de empleado 9:00 am
2.- En otro campo con 15 minutos de tolerancia...
3.- O sumarle time + 15 minutos y me de suma de 9:15 am, cual seria la instruccion y validar si time() > 9:15 am como ejemplo

Como puedo validar despues de 9:16 am, me valide, MsgAlert("Retardo de entrada")...esta es la intruccion, pero no le hallo forma :

Code: Select all  Expand view
cEntr := "9:00 am" // Variable dato en DBF como hora entrada        Caracter  // aqui validar su hora de entrada
 nTole := 15        // variable dato en DBF 15 minutos de tolerancia Numerico          // Aqui validar 15 minutos de tolerancia

 IF TIME() > STR(nTole)  // Aqui con la funcion TIME() "9:16 am" que ya se paso 15 minutos de tolerancia de entrada...
     MsgAlert("Retardo de entrada...")
 ENDIF


Espero sus comentarios, ejemplos, ayuda que me puedan ayudar con esta validacion u o condicion.

Saludos .!
Last edited by ACC69 on Wed May 21, 2014 8:45 pm, edited 1 time in total.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby FranciscoA » Sat May 17, 2014 3:22 am

Hola.
Algo rapido, chapucero, pero talvez te sirve de guia.
Code: Select all  Expand view
LOCAL nEntrConToler := 555   //09:15 = 9*60=540 + 15 = 555 minutos
local nEntRetraso   := Val(substr(time(),1,2))*60 + val(substr(time(),4,2))
if nEntRetraso > nEntrConToler
   MsgInfo("Castigo por retraso de "+Str(nEntRetraso-nEntrConToler)+" minutos")
endif
 

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby ACC69 » Sun May 18, 2014 1:46 am

FranciscoA wrote:Hola.
Algo rapido, chapucero, pero talvez te sirve de guia.
Code: Select all  Expand view
LOCAL nEntrConToler := 555   //09:15 = 9*60=540 + 15 = 555 minutos
local nEntRetraso   := Val(substr(time(),1,2))*60 + val(substr(time(),4,2))
if nEntRetraso > nEntrConToler
   MsgInfo("Castigo por retraso de "+Str(nEntRetraso-nEntrConToler)+" minutos")
endif
 

Saludos.



Gracias por tu interes de siempre Francisco,el resultado si me da a tu ejemplo sencillo.
Pero...quisiera que desde mi campo lunes,martes.miercoles,etc etc , y dependiendo de horario de sea matutino, vespertino y nocturno me convirtiera la variable de "09:00:00 am" a "09:20:00 am" me dijera diferencia minutos de retardo desde las 9 am, pero pasado de mas de 25 minutos,que me dijera ya no puede checar entrada..a lo que me refiero es sumar desde el inicio de entrada menos la diferencua de retardo,y eso que con la varariable ,la estoy declarando solo caracter y no con time() ...y validar con mas de 25 minutos ya no te deje checar tu entrada...es algo asi con esa rutina....BUENO YO CREO QUE SI SERIA CON TIME(),DESPUES DEL TIEMPO TRANSCURRIDO DESDE LA ENTRADA DE CHECADOR DE RELOJ, O SEA LA VARIABLE DESDE QUE LA CONFIGURO MATUTINO cHoraEntrada:="09:00: am" hasta el tiempo transcurrido despues de la tolerancia de 15 minutos o sea "09:15 am" y de ahi contar que desde "09:016 am" diferencia de minutos de retardo, pero tipo caracter, pero si sumandole diferencia transcurrido de retardo....
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby ACC69 » Sun May 18, 2014 5:13 pm

ACC69 wrote:
FranciscoA wrote:Hola.
Algo rapido, chapucero, pero talvez te sirve de guia.
Code: Select all  Expand view
LOCAL nEntrConToler := 555   //09:15 = 9*60=540 + 15 = 555 minutos
local nEntRetraso   := Val(substr(time(),1,2))*60 + val(substr(time(),4,2))
if nEntRetraso > nEntrConToler
   MsgInfo("Castigo por retraso de "+Str(nEntRetraso-nEntrConToler)+" minutos")
endif
 

Saludos.



Gracias por tu interes de siempre Francisco,el resultado si me da a tu ejemplo sencillo.
Pero...quisiera que desde mi campo lunes,martes.miercoles,etc etc , y dependiendo de horario de sea matutino, vespertino y nocturno me convirtiera la variable de "09:00:00 am" a "09:20:00 am" me dijera diferencia minutos de retardo desde las 9 am, pero pasado de mas de 25 minutos,que me dijera ya no puede checar entrada..a lo que me refiero es sumar desde el inicio de entrada menos la diferencua de retardo,y eso que con la varariable ,la estoy declarando solo caracter y no con time() ...y validar con mas de 25 minutos ya no te deje checar tu entrada...es algo asi con esa rutina....BUENO YO CREO QUE SI SERIA CON TIME(),DESPUES DEL TIEMPO TRANSCURRIDO DESDE LA ENTRADA DE CHECADOR DE RELOJ, O SEA LA VARIABLE DESDE QUE LA CONFIGURO MATUTINO cHoraEntrada:="09:00: am" hasta el tiempo transcurrido despues de la tolerancia de 15 minutos o sea "09:15 am" y de ahi contar que desde "09:016 am" diferencia de minutos de retardo, pero tipo caracter, pero si sumandole diferencia transcurrido de retardo....



Alguien mas ha hecho algo parecido, entrada y salida de personal con codigo de barras...y con validacion de 15 minutos de retardo y restarle el tiempo de entrada de retardo con caracter "09:00:00 am" menos 09:16:00 am con diferencia de 1 minuto de retardo ???

Saludos
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby FranciscoA » Mon May 19, 2014 4:30 am

Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2110
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby cmsoft » Mon May 19, 2014 4:57 pm

Yo tengo un sistema de control de personal con acceso por medio de un programa con tarjetas de codigos de barra.
En mi caso, cada empleado tiene definido el horario de entrada limite (pero es facil aplicar ya que es comparar dos datos tipo string)
Te paso la función que calcula las horas extras (en valores enteros). Tal vez te sirva.
Code: Select all  Expand view

// cEntra es la hora de entrada
// cSale es la hora de salida
// nJornada es el total de horas que debe trabajar en esa jornada
STATIC FUNCTION HorasExtras(cEntra,cSale,nJornada)
LOCAL nHoras := 0, nHora1, nHora2
           nHora1 := VAL(LEFT(cEntra,1,2)) * 60 + VAL(SUBSTR(cEntra,4,2))
           nHora2 := VAL(LEFT(cSale ,1,2))  * 60 + VAL(SUBSTR(cSale,4,2))
           IF cSale < cEntra
              nHora2 := nHora2 + 24 * 60
           ENDIF
           nHoras := (nHora2 - nHora1) / 60 - nJornada          
RETURN nHoras

Recuerda que el valor te lo devuelve en horas (en forma decimal) por lo tanto 1:30 hs = 1.5
O sea que con el mismo criterio, la llegada tarde podrias consultarla asi:
Code: Select all  Expand view

IF HorasExtras(cFichada,cFechaLim,0) > 0.25
   MsgInfo("Llego tarde")
ENDIF

Obviamente hay muchos mas controles que puedes hacer, como que pasa si falta una fichada, si los dias son hábiles, feriados, no laborables, etc.
Pero esto es un punta, que espero te sirva
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby ACC69 » Tue May 20, 2014 2:53 pm

cmsoft wrote:Yo tengo un sistema de control de personal con acceso por medio de un programa con tarjetas de codigos de barra.
En mi caso, cada empleado tiene definido el horario de entrada limite (pero es facil aplicar ya que es comparar dos datos tipo string)
Te paso la función que calcula las horas extras (en valores enteros). Tal vez te sirva.
Code: Select all  Expand view

// cEntra es la hora de entrada
// cSale es la hora de salida
// nJornada es el total de horas que debe trabajar en esa jornada
STATIC FUNCTION HorasExtras(cEntra,cSale,nJornada)
LOCAL nHoras := 0, nHora1, nHora2
           nHora1 := VAL(LEFT(cEntra,1,2)) * 60 + VAL(SUBSTR(cEntra,4,2))
           nHora2 := VAL(LEFT(cSale ,1,2))  * 60 + VAL(SUBSTR(cSale,4,2))
           IF cSale < cEntra
              nHora2 := nHora2 + 24 * 60
           ENDIF
           nHoras := (nHora2 - nHora1) / 60 - nJornada          
RETURN nHoras

Recuerda que el valor te lo devuelve en horas (en forma decimal) por lo tanto 1:30 hs = 1.5
O sea que con el mismo criterio, la llegada tarde podrias consultarla asi:
Code: Select all  Expand view

IF HorasExtras(cFichada,cFechaLim,0) > 0.25
   MsgInfo("Llego tarde")
ENDIF

Obviamente hay muchos mas controles que puedes hacer, como que pasa si falta una fichada, si los dias son hábiles, feriados, no laborables, etc.
Pero esto es un punta, que espero te sirva


Hola buenos dias, gracias a todos los que me respondieron por este sencillo codigo, que yo hacia mal, que no me restaba la fecha,por ser tipo caracter,pero ya funciono, gracias cmsoft por el interes de esta rutina, y por lo que comentas tienes desarollado sistema entrada y salida, con codigo de barras, yo anbude buscando por el foro, pero ya no funciona el link, no se si alguien me pueda proporcionar la clase de codigo de barras actualizado y un ejemplo sencillo, de como crear dando de alta codigo de barras e imprimirlo y leer por escaner, estaba pensando en hacer lo mas sencillo de entrada con codigo y clave de usuario.

Saludos y buen dia. y les agradezco de nuevo por la ayuda y el interes.

Atte: Adrian C. C.
acc69@hotmail.com
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby cmsoft » Wed May 21, 2014 3:59 am

Hola Adrian:
Para la entrada de datos, no necesitas nada, ya que si elijes un scanner con emulador de teclado, lo que hace es emular que el usuario ingresa los dígitos que tiene el código de barras de la tarjeta personal del empleado.
Para la impresión de las tarjetas con códigos de barras, lo mejor sería elegir un FONT Interleave 2 of 5, una tipografía que imprima códigos de barra. Entonces, lo que defines en un obtejo PRINTER es el font apropiado y listo.
Aca te dejo un ejemplo de impresión de carnet y la función que arma el código de barras
Code: Select all  Expand view

***********************************
** Emision de tarjeta personal
// base es la tabla de personal que viene como parametro
STATIC FUNCTION Tarjeta(base)
LOCAL oPrn, oFont1, oFont2, nCol, nRow, i, mfoto,;
      mbarra, mtama1, mtama2, mtama5
// Busco los tamños de letra para cada font en una
// tabla que guardo los valores
USE fuentes ALIAS "datos" NEW
mtama1 := datos->tama1
mtama2 := datos->tama2
mtama5 := datos->tama5
close datos
// La foto del empleado la tengo guardada en una
// carpeta FOTOS con el codigo de empleado completado con ceros
mfoto   := "FOTOS\" + STRTRAN(STR((base)->codigo ,8)," ","0") + ".BMP"
// El codigo de barras lo armo con la funcion CodigoBarra
// que arma el conjunto de pares que la tipografia puede
// mostrar (siempre tiene que ser par el nro de digitos)
// Los () de inicio y fin son necesarios para delimitar el codigo
mbarra  := "
("+CodigoBarra( STRTRAN(STR((base)->codigo ,6)," ","0") )+")"
// Defino los distintos tipos de letra
     DEFINE FONT oFont1 NAME "
TAHOMA" SIZE mtama1, mtama1*2
     DEFINE FONT oFont2 NAME "
Interleaved 2of5 Text" SIZE mtama4, mtama4*2
PRINT oPrn NAME "
Tarjeta" PREVIEW
   // Divido la hora en 72 lineas x 80 Columnas
   nRow = oPrn:nVertRes() / 72
   nCol = oPrn:nHorzRes() / 80
   PAGE
     // Imprimo un logo de la empresa para el carnet
     oPrn:SayBitmap(7,nCol*20,"
LOGOCARN.BMP",mtama5/5,mtama5/5)
     oPrn:SayBitmap(nRow*2,nCol*24,mfoto,mtama5+mtama5/3,mtama5)
     oPrn:Say(nRow*2,nCol*5,oApp:nomb_emp,oFont1)
     oPrn:Say(nRow*4,nCol*5,"
Legajo Nro.:"+STR((base)->codigo),oFont1)
     oPrn:Say(nRow*5,nCol*5,(base)->nombre,oFont1)
     oPrn:Say(nRow*6,nCol*5,"
Categoria: "+;
          IF(cate04->(DBSEEK((base)->categoria)),cate04->nombre,"
"),oFont1)
     oPrn:Say(nRow*7,nCol*5,"
Direccion: "+(base)->direccion,oFont1)
     oPrn:Say(nRow*8,nCol*5,"
D.N.I: "+STR((base)->dni),oFont1)
     oPrn:Say(nRow*9,nCol*5,"
Fecha Ingreso: "+DTOC((base)->fechaing),oFont1)
     oPrn:Say(nRow*10,nCol*5,mbarra,oFont2)
   ENDPAGE
ENDPRINT
RELEASE FONT oFont1
RELEASE FONT oFont2
RETURN nil

************************************
** Codigo de barra de un numero
STATIC FUNCTION CodigoBarra( x )
LOCAL i, bar := {}, j := 0, bar1 := {}, cBarr := "
"
   FOR i := 48 TO 97
       AADD(bar ,CHR(i))
       AADD(bar1,STRTRAN(STR(j,2),"
","0"))
       j++
   NEXT i
   FOR i := 192 TO 241
       AADD(bar,CHR(i))
       AADD(bar1,STRTRAN(STR(j,2),"
","0"))
       j++
   NEXT i
FOR j := 1 TO LEN(x)-1 STEP 2
    i := ASCAN(bar1,SUBSTR(x,j,2))
    cBarr := cBarr + bar[i]
NEXT j
RETURN cBarr

Espero te sirva!
User avatar
cmsoft
 
Posts: 1189
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Como validar retardo despues de 15 minutos tolerancia...

Postby ACC69 » Wed May 21, 2014 4:51 pm

cmsoft wrote:Hola Adrian:
Para la entrada de datos, no necesitas nada, ya que si elijes un scanner con emulador de teclado, lo que hace es emular que el usuario ingresa los dígitos que tiene el código de barras de la tarjeta personal del empleado.
Para la impresión de las tarjetas con códigos de barras, lo mejor sería elegir un FONT Interleave 2 of 5, una tipografía que imprima códigos de barra. Entonces, lo que defines en un obtejo PRINTER es el font apropiado y listo.
Aca te dejo un ejemplo de impresión de carnet y la función que arma el código de barras
Code: Select all  Expand view

***********************************
** Emision de tarjeta personal
// base es la tabla de personal que viene como parametro
STATIC FUNCTION Tarjeta(base)
LOCAL oPrn, oFont1, oFont2, nCol, nRow, i, mfoto,;
      mbarra, mtama1, mtama2, mtama5
// Busco los tamños de letra para cada font en una
// tabla que guardo los valores
USE fuentes ALIAS "datos" NEW
mtama1 := datos->tama1
mtama2 := datos->tama2
mtama5 := datos->tama5
close datos
// La foto del empleado la tengo guardada en una
// carpeta FOTOS con el codigo de empleado completado con ceros
mfoto   := "FOTOS\" + STRTRAN(STR((base)->codigo ,8)," ","0") + ".BMP"
// El codigo de barras lo armo con la funcion CodigoBarra
// que arma el conjunto de pares que la tipografia puede
// mostrar (siempre tiene que ser par el nro de digitos)
// Los () de inicio y fin son necesarios para delimitar el codigo
mbarra  := "
("+CodigoBarra( STRTRAN(STR((base)->codigo ,6)," ","0") )+")"
// Defino los distintos tipos de letra
     DEFINE FONT oFont1 NAME "
TAHOMA" SIZE mtama1, mtama1*2
     DEFINE FONT oFont2 NAME "
Interleaved 2of5 Text" SIZE mtama4, mtama4*2
PRINT oPrn NAME "
Tarjeta" PREVIEW
   // Divido la hora en 72 lineas x 80 Columnas
   nRow = oPrn:nVertRes() / 72
   nCol = oPrn:nHorzRes() / 80
   PAGE
     // Imprimo un logo de la empresa para el carnet
     oPrn:SayBitmap(7,nCol*20,"
LOGOCARN.BMP",mtama5/5,mtama5/5)
     oPrn:SayBitmap(nRow*2,nCol*24,mfoto,mtama5+mtama5/3,mtama5)
     oPrn:Say(nRow*2,nCol*5,oApp:nomb_emp,oFont1)
     oPrn:Say(nRow*4,nCol*5,"
Legajo Nro.:"+STR((base)->codigo),oFont1)
     oPrn:Say(nRow*5,nCol*5,(base)->nombre,oFont1)
     oPrn:Say(nRow*6,nCol*5,"
Categoria: "+;
          IF(cate04->(DBSEEK((base)->categoria)),cate04->nombre,"
"),oFont1)
     oPrn:Say(nRow*7,nCol*5,"
Direccion: "+(base)->direccion,oFont1)
     oPrn:Say(nRow*8,nCol*5,"
D.N.I: "+STR((base)->dni),oFont1)
     oPrn:Say(nRow*9,nCol*5,"
Fecha Ingreso: "+DTOC((base)->fechaing),oFont1)
     oPrn:Say(nRow*10,nCol*5,mbarra,oFont2)
   ENDPAGE
ENDPRINT
RELEASE FONT oFont1
RELEASE FONT oFont2
RETURN nil

************************************
** Codigo de barra de un numero
STATIC FUNCTION CodigoBarra( x )
LOCAL i, bar := {}, j := 0, bar1 := {}, cBarr := "
"
   FOR i := 48 TO 97
       AADD(bar ,CHR(i))
       AADD(bar1,STRTRAN(STR(j,2),"
","0"))
       j++
   NEXT i
   FOR i := 192 TO 241
       AADD(bar,CHR(i))
       AADD(bar1,STRTRAN(STR(j,2),"
","0"))
       j++
   NEXT i
FOR j := 1 TO LEN(x)-1 STEP 2
    i := ASCAN(bar1,SUBSTR(x,j,2))
    cBarr := cBarr + bar[i]
NEXT j
RETURN cBarr

Espero te sirva!



Gracias cmsfot, por tu interes, entonces no es necesario tener la clase de barcode o barlib, que con eso es mas que suficiente, ahora en caso que no tuviera escaner con emulador de teclado, ahi si a fuerzas usaria la clase, segun yo supongo,de todas maneras no tengo escaner para hacer pruebas,espero conseguir uno prestado y a ver que sale .

Saludos de antemano cmsoft, gracias de nuevo.

acc69@hotmail.com
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm

Re: (Solucionado resta de horas) Como validar retardo ...

Postby ACC69 » Wed May 21, 2014 8:46 pm

ACC69 wrote:Hola buenas tardes como estan, aqui de nuevo con una pregunta sencilla, o no tan sencilla.
Como puedo validar el tiempo con 15 minutos de tolerancia, o convertir 15 minutos a hora time(), u otro metodo de funcion.

1.- Por ejemplo en el sistema hora de entrada de empleado 9:00 am
2.- En otro campo con 15 minutos de tolerancia...
3.- O sumarle time + 15 minutos y me de suma de 9:15 am, cual seria la instruccion y validar si time() > 9:15 am como ejemplo

Como puedo validar despues de 9:16 am, me valide, MsgAlert("Retardo de entrada")...esta es la intruccion, pero no le hallo forma :

Code: Select all  Expand view
cEntr := "9:00 am" // Variable dato en DBF como hora entrada        Caracter  // aqui validar su hora de entrada
 nTole := 15        // variable dato en DBF 15 minutos de tolerancia Numerico          // Aqui validar 15 minutos de tolerancia

 IF TIME() > STR(nTole)  // Aqui con la funcion TIME() "9:16 am" que ya se paso 15 minutos de tolerancia de entrada...
     MsgAlert("Retardo de entrada...")
 ENDIF


Espero sus comentarios, ejemplos, ayuda que me puedan ayudar con esta validacion u o condicion.

Saludos .!


Gracias solucionado la resta de horas y tolerancia de entrada.
ACC69
 
Posts: 632
Joined: Tue Dec 12, 2006 7:34 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 111 guests