FoxPro/Visual FoxPro - LCC

 
Vista:

LCC

Publicado por Pedro Canizales Arredondo (40 intervenciones) el 25/11/2006 01:47:37
hola quiero calcular las horas trabajadas de los empleados segun capturen su hora de entrada y salida, el detalle es que tengo poca experiencia con visual fox, pero no tengo idea de como hacerlo, tengo una tabla en donde estan todos los horarios de los trabajadores, pero los horarios los tengo como caracter, no se si este bien asi ya que no se como calcuar el tiempo total trabajado ya que la operacion seria con caracteres..no se si me explque, o como puedo crear una tabla para que me tome los datos como horas y no como caracteres, espero me puedan ayudar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:LCC

Publicado por Luighi (105 intervenciones) el 25/11/2006 04:31:27
bueno la informacion puede estar hasta en diferentes formatos
para eso estamos los programadores
para resolver situaciones

si los datos que manejas son del tipo caracter
pero leyendo tu mensaje, no sabemos exactamente bajo que forma estan guardados esos datos

voy a suponer que manejas los campos hora_ini, osea hora en que entro y hora_fin, osea, hora en que salio.
cada campo a 8 caracteres, donde cada campo guarda valores que estan
comprendidos entre las 00:00:00 hasta las 23:59:59
pues porque asi se manejan los valores de time() en visual foxpro

si el empleado entra a trabajar a las 08:07:25
y sale a las 19:25:37
entonces cuanto tiempo trabajo?
en horas, minutos y segundos?

horas trabajadas = hora en que salio - hora en que entro
osea:
horas trabajadas = 19:25:37 - 08:07:25

restar eso si que es algo complicado
mejor lo transformamos a segundos haciendo la siguiente operacion bajo una simple formula:

(hh*60+mm)*60+ss = numero segundos transcurridos desde las 00:00:00 horas

reemplazamos valores:

horas trabajadas en segundos = [(19*60+25)*60+37] - [(08*60+07)*60+25]
eso nos da como resultado: 69937-29245 que es igual a: 40692 segundos trabajados

ahora transformemoslo a hh:mm:ss, pero como?
pues, tendremos que crear una funcion, funcion donde le entregue el valor en segundos y esta misma funcion nos devuelva el resultado en caracteres y bajo el formato: hh:mm:ss
hecho eso entonces ya tendremos legiblemente el tiempo total trabajado, asi:

? hhmmss(40692)

entonces en general hariamos siempre:

? 'tiempo total trabajado', hhmmss(hora_fin-hora_ini)

como ya sabras, hhmmss es una funcion de usuario que tendras que crear pero aqui te paso una ya hecha:

****
function hhmmss
parameters nSegTrans, lSegMiles
private all
****
if set('talk')='on'
set talk off
cTalk='on'
else
cTalk='off'
endif
****
nSegTrans=iif(type('nSegTrans')='n' and nSegTrans>0,nSegTrans,0)
****
nValorAux=nSegTrans
nSegTrans=int(nSegTrans)
nSegMiles=nValorAux-nSegTrans
nSegundos=nSegTrans%60
nValorAux=(nSegTrans-nSegundos)/60
nMinutos=nValorAux%60
nHoras=(nValorAux-nMinutos)/60
****
if type('lSegMiles')#'l'
lSegMiles=.f.
endif
****
if cTalk='on'
set talk on
endif
****
retu ;
tran(nHoras ,'@l 99')+':'+tran(nMinutos ,'@l 99')+':'+ ;
tran(nSegundos,'@l 99')+ ;
iif(lSegMiles,'.'+tran(nSegMiles*100,'@l 99'),'')
****
y nada mas eso, los comandos dentro de los if y despues del return estan sin indentar, eso sucede porque aqui en la web del programador los espacios en blanco se eliminan, no se porque sucede eso pero bueno.
ademas tambien supongo que estaras validando las horas que se ingresan en los campos, horas que siempre estaran en el rango 00:00:00 y 23:59:59

a ver si los señores de la web utilizan mejor el tipo de letra Courier New
asi nuestros mensajes como lineas de programa serian mas legibles.

saludos desde Perú.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:LCC

Publicado por Luighi (105 intervenciones) el 25/11/2006 04:37:39
olvide decir que luego de hacer:

? hhmmss(40692)

el resultado seria: 11:18:12
osea 11 horas, 18 minutos y 12 segundos trabajados

chau
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar