Cita:
Empezado por Caral
Hola
Ahora veo lo que estas haciendo, es algo asi.
Saludos
|
Si tienes razon... el problema es que los datos los capturo de un
reloj control biometrico de estos
entonces los datos que capturo son del sgte formato
Código:
1 01005 20080218 1519
1 02003 20080218 1525
1 01012 20080218 1525
0 01012 20080218 1526
1 06012 20080218 1533
1 06014 20080218 1535
1 02001 20080218 1537
0 02010 20080218 1538
0 02011 20080218 1538
1 02019 20080218 1544
1 01012 20080218 1749
0 06012 20080218 1821
0 06014 20080218 1822
donde :
la primera columna es el tipo de entrada
0 -> salida
1 -> entrada
la segunda columna es la ficha del trabajador
la tercera columna es la fecha
la cuarta columna es la hora
entonces eso lo traspaso a un tabla de SQL... (Horario) y se me almacena de la sgte forma
Hor_Numero -> Numero autoincremental
Per_Nro -> ficha del trabajador
Hor_Tipo -> Tipo de marcado (1 Entrada / 0 Salida )
Hor_Fecha -> Fecha y hora de marcado
para rescatar los datos de un trabajador en especifico realizo una consulta así.. ej. Ficha 1015
Código SQL
[-]
Select Per_Nro, Hor_Tipo,
CONVERT(Char(10), Hor_Fecha, 103) As Fecha,
CONVERT(Char(8), Hor_Fecha, 108) As Hora
From Horario
Where Per_Nro=1015
Order By Fecha, Hora
con el siguiente codigo... traspaso los datos a un StringGrid... con el sgte formato:
Dia Semana / Fehca / ent 1 / sal 1 / ent 2 / sal 2 / ent 3 / sal 3 / total hras
el sgte codigo me genera un StringGrid de x Fila segun el rango de fecha que se haya señalado.. y además, me va agregando la el dia de la semana y la fecha en la primera y segunda columna del stringgrid
Código Delphi
[-]
Marcado.RowCount := Trunc(vFecH.Date - vFecD.Date)+2;
i:= 1;
For i:=1 to Marcado.RowCount-1 Do
Begin
Marcado.rows[i][0] := FormatDateTime('ddd', (Trunc(vFecD.Date-1)+i));
Marcado.rows[i][1] := DateToStr(Trunc(vFecD.Date-1)+i);
End;
despues si ejecuto este codigo me empieza a buscar segun la ficha ingresada y segun la fecha de la columna fecha del StringGrid.. los datos y los va distribuyendo dentro del StringGrid
Código Delphi
[-]
i:= 1;
For i:=1 to Marcado.RowCount-1 Do
Begin
Datos.AQ_Horario.First;
While Not Datos.AQ_Horario.Eof Do
Begin
if Datos.AQ_Horario['Fecha'] = StrToDAte(Marcado.Rows[i][1]) Then
If Datos.AQ_Horario['Hor_Tipo'] = 0 Then
Begin
if Marcado.Rows[i][3] = '' Then
Marcado.Rows[i][3] := Datos.AQ_Horario['Hora']
Else
if Marcado.Rows[i][5] = '' Then
Marcado.Rows[i][5] := Datos.AQ_Horario['Hora']
Else
Marcado.Rows[i][7] := Datos.AQ_Horario['Hora'];
End
Else
Begin
if Marcado.Rows[i][2] = '' Then
Marcado.Rows[i][2] := Datos.AQ_Horario['Hora']
Else
if Marcado.Rows[i][4] = '' Then
Marcado.Rows[i][4] := Datos.AQ_Horario['Hora']
Else
Marcado.Rows[i][6] := Datos.AQ_Horario['Hora'];
End;
Datos.AQ_Horario.Next;
End;
End;
eso me entrega un resultado como el de la sgte imagen
como veras pueden haber dias que no tenga nada de marcado.. otros que solo han marcado 4 veces.. y otros seis veces...
Salu2

PS: estube revisando tu programa.. me parece genial.. pero tu de antemano le pides si marca 1, 2 , 3 o 4...