generalmente estos dispositivos entregan una archivo de texto con la información de marcaje
algo asi como el siguiente ejemplo:
r0120160815001.dat -> RELOJ 01 día 15/08/2016 arch 001
# Estructura interna #
IN0005201608151355 -> IN = INGRESO 0005 = COD.TARJETA 20160815=FECHA DEL MOV 1355= 13:55
OT0005201608151823 -> OT= SALIDA 0005 = COD.TARJETA 20160815=FECHA DEL MOV 18:23= 18:23
IN0006020160815823
OT0006201608151618
...
Con esta estructura creaba una dbf con los mismos campos * esto es como ejemplo
....
mov caracter 2
code caracter de 4
fecha caracter de 8
hora caracter 5
...
y lo
llamaba mas menos de esta forma como ejemplo
Code: Select all | Expand
#include "FiveWin.ch"
STATIC oWnd
FUNCTION Main()
LOCAL oBar, oPopup, oBtn, oSay
SET DATE FRENCH
SET CENTURY ON
SET DELETED ON
SET _3DLOOK ON
SetBalloon( .T. )
DEFINE WINDOW oWnd TITLE "Subir Datos del Reloj Control"
DEFINE BUTTONBAR oBar OF oWnd SIZE 60, 60 2007
DEFINE BUTTON OF oBar ACTION Llamar(), oWnd:End() RESOURCE "attach" PROMPT "Marcas" TOOLTIP "Subir Marcas del BioMetrico"
SET MESSAGE OF oWnd TO "Soporte para el sistema RENNOXP" KEYBOARD 2007
ACTIVATE WINDOW oWnd
RETURN nil
//----------------------------------------------------------------------------//
STATIC FUNCTION Llamar()
LOCAL cFile, xMov, xTar, xDia, xMes, xAno, xFec, xEnt, xSal , yMov, yTar, yDia, yMes, yAno, yFec, yEnt, ySal, uTar , tuca
LOCAL Mov1 , Mov2, xTim
tuca := 0
cFile := cGetFile("*.DAT","Archivo de Transmisión de Capturador de Huellas","Archivo de Marcas | *.dat","F:\VIGATEC\TEMPO\")
USE "UNICORN.DBF" ALIAS PAS1 NEW EXCLUSIVE
USE "RELOJCO.DBF" ALIAS PAS2 NEW EXCLUSIVE
INDEX ON PAS2->MOV+PAS2->TARJETA+PAS2->DIA+PAS2->MES+PAS2->ANO+PAS2->ENTR TO R1.NTX
INDEX ON PAS2->MOV+PAS2->TARJETA+PAS2->DIA+PAS2->MES+PAS2->ANO TO R2.NTX
SET INDEX TO R1,R2
IF LEN(cFile) > 0
IF MsgYesNo("Esta por recibir el Archivo del Capturador de Huellas...Está seguro de realizar proceso ?", cFile)
SELECT PAS1 ; __DBZAP()
APPEND FROM &cFile SDF
dbgotop()
// calculando los tiempos en minutos
MSGWAIT("ESPERE POR FAVOR...CALCULANDO LOS TIEMPOS...")
DO WHILE !EOF()
PAS1->TIME := STRTRAN( STR((VAL(SUBSTR(PAS1->HORA,1,2))*60)+(VAL(SUBSTR(PAS1->HORA,4,2))),5,0) ," ","0")
SKIP
ENDDO
// validando la fecha
MSGWAIT("ESPERE POR FAVOR...VALIDANDO FECHAS...")
DBGOTOP()
DO WHILE !EOF()
PAS1->DATA := CTOD(PAS1->FECHA)
SKIP
ENDDO
//---------------------------------------------
FERASE( "F:\RENNOXP\INDICES\001\RELOJC1.NTX" )
FERASE( "F:\RENNOXP\INDICES\001\RELOJC2.NTX" )
WinExec(".\RENOM.BAT")
MSGINFO("Proceso terminado con exito...","ok")
ENDIF
ENDIF
RETURN Nil
con esto tenia una DBF con los campos necesarios para seguir con el procedimiento especifico para mi programa de sueldos.
Espero que te sirva
saludos