Página 1 de 1
GET para hora
Enviado: 29 Mar 2008 22:13
por ERASMO ANDRIOLI
AMIGOS...
Alguem tem um exemplo de entrada no get para a hora?
Exemplo:
Tenho uma var chamada HORA1 = campo de 4 digitos... alfa...
Ela deve receber a entrada do get no formato "99:99"
Más depois de feita a leitura pelo READ é necessário que a hora digitada exista, por exemplo: se alguem digitar a hora: 26:39 o prog não deverá aceitar. Podemos usar a clausula VALID?
Aguardo informações...
Saudações a agradeço desde já o apoio dos colegas do forum...
Erasmo
Enviado: 29 Mar 2008 22:37
por Maligno
Não existe uma máscara que invoque a funções apropriadas para essa validação. Você terá de usar uma máscara normal (@R 99:99) e usar a cláusula VALID para executar uma função sua de checagem.
Enviado: 29 Mar 2008 23:45
por alaminojunior
Ilustrando a idéia do Maligno....
Código: Selecionar todos
cls
cTime:= space(5)
@ 10,10 get cTime pict "@ 99:99" valid Chk_Time(@cTime)
read
Function Chk_Time(par)
if settime(par+":00",.t.) // SetTime() é da CATools
return .t.
else
alert("nananina")
return .f.
endif
ou mais enxuto ainda...
Código: Selecionar todos
cls
cTime:= space(5)
@ 10,10 get cTime pict "@ 99:99" valid SetTime(cTime+":00",.t.)
read
Enviado: 30 Mar 2008 11:27
por Pablo César
Outra coisa que acho muito importante, é transformar as horas em TIMETOSEC() da CT.LIB para transformar em segundos. Isto é muito bom para comparar horas com exatidão de uma forma analógica.
Enviado: 30 Mar 2008 11:36
por Maligno
Acho que não precisa, Pablo. O código de teste é bem simples. Algo do tipo:
Código: Selecionar todos
function ValHora(cHora) // formato esperado: "99:99"
return Val(Left(cHora,2)) <= 23 .and. Val(Right(cHora,2)) <= 59
Pelo menos é isso que eu imagino que o Erasmo precisa.
Editado: eu tinha invertido os operados lógicos.
Editado: eu coloquei um IF desnecessário.

Enviado: 30 Mar 2008 11:42
por filizola
se estiver usando "@r 99:99"
get hora pict "@r 99:99" valid(hora<"2360")
Enviado: 30 Mar 2008 12:06
por alaminojunior
Meus caros, podem testar a rotina postada lá em cima, funciona !
Não precisa da máscara "@R", a função SetTime() da Catools pega como parâmetro uma string como "00:00:00", e ela própria já retorna verdadeiro ou falso, no caso de intervalos não aceitos, não precisando portanto de outras funções de checagem, a menos que se queira fazer outras verificações.
Enviado: 30 Mar 2008 12:14
por Maligno
filizola escreveu:se estiver usando "@r 99:99"
get hora pict "@r 99:99" valid(hora<"2360")
Você deu uma solução bem prática, mas que não vai funcionar a contento, infelizmente. Esse VALID retornará TRUE para algo do tipo "2299". Por conta dos segundos limitados a 60, a checagem precisa ser separada.
Enviado: 30 Mar 2008 12:16
por Maligno
alaminojunior escreveu:Não precisa da máscara "@R", a função SetTime() da Catools pega como parâmetro uma string como "00:00:00", e ela própria já retorna verdadeiro ou falso
Nem duvido que funcione. É que se alguém, por algum motivo, resolve não usar a CATools, fica complicado usá-la só por causa de uma função. E como a coisa é simples, uma checagem simples também resolve.
Tela Clipper que mostra a "Hora Atual do Sistema"
Enviado: 30 Mar 2008 14:45
por Manuel Luis Modernel
Muito bom domingo Clipperiano à todos !
Adorei este forum, e por isto virou para mim leitura cotidiana obrigatória.
Peço desculpas sim, de só mostrar exemplos feitos em Summer 87, posto ser o único Clipper do qual conheço alguma coisa.
Foge um pouquinho do tema mais pode ser útil e interessante o exemplo abaixo onde eu mostrava na minha tela (no canto superior direito) a hora atual do sistema atualizada segundo a segundo.
Fiz uma pequena função chamada H() e depois chamava ela a cada GET usado no desenvolvimento do programa como segue:
Código: Selecionar todos
func h
@ 00,71 say time()
hora=time()
return 0
e dai usava assim em todo lugar que pedisse uma atualização, um get, um dbedit em fim em qualquer lugar do programa, assim sempre atualizava e mostrava a hora certa que nem um relogio qualquer.
da seguinte forma
*ver o estoque.dbf geral
FUNC VERDBF
* AQUI EMBAIXO FAZIA MOSTRAR A HORA CERTA NO CANTO DA TELA!!
h()
save screen
declare cpo[4],tit[4]
cpo[1]=[DESCRI]
cpo[2]=[tamanho]
cpo[3]=[CODIGO]
cpo[4]=[qtdatual]
tit[1]=[DESCRI€ŽO DO PRODUTO]
tit[2]=[NUMERO]
tit[3]=[CODIGO]
tit[4]=[ESTOQUE]
set color to g+/n
@ 04,04,22,75 box boxd
set color to n/bg,w/n,,,n/bg
dbedit(05,05,21,74,cpo,"",.t.,tit)
restore screen
RETURN 0
Era uma "frescurite a mais", mas ficava legal !!!
Get para Hora
Enviado: 30 Mar 2008 15:19
por Manuel Luis Modernel
Nunca gostei de usar "formatos de hora" pre-determinados, dai criava meu jeito próprio.
Hora eu usava sempre como "String" e debulhava ela matematicamente para usar em cálculos (sou engenheiro e não programador hihihi).
vé o trabalho que me dava mais não tinha erro possível !!!
segue uma função que eu usava para Inclusão e Calculos de Horas Extras.
pode criticar a Vontade tá

?
Código: Selecionar todos
func telinche
sele a
SET INDEX COD20
icodigo=space(8)
inome=space(30)
idatas=space(8)
idiasem=space(14)
ientrou="07:30" &&space(5)
isaiu="00:00" &&space(5)
imintot=0
imintot2=0
ihoras=0
ihoras2=0
iminutos=0
iminutos2=0
itothora=0
itothora2=0
itotminu=0
itotminu2=0
ialmoco=90
do while .t.
limpa23()
@ 05,27 clear to 07,52
@ 07,02 clear to 18,77
set color to gr+
@ 07,02,18,77 box boxd
@ 05,27,07,52 box boxd
set color to w+/n,n/w,,,w/n
centra("INCLUSAO DE HORAS EXTRAS",6)
@ 08,04 say "Codigo do Funcionario.......: "
@ 09,04 say "Nome do Funcionario.........: "
@ 10,04 say "Data da Hora Extra..........: (data/mes/ano)"
@ 11,04 say "Dia da Semana ou Feriado ...: "
@ 12,04 say "Hora de Entrada.............: "
@ 13,04 say "Hora de Saida...............: "
@ 14,04 say "Desconto para Almoco/Janta..: "
set index to
if repete=0
GO BOTTOM
endif
iCodigo=CODIGO
inome =NOME
idatas =DATAS
idiasem=DIASEM
IENTROU="07:30" &&ENTROU
SET INDEX COD20
@ 08,42 SAY iCodigo
@ 09,42 SAY inome
@ 10,42 SAY idatas
@ 11,42 SAY idiasem
@ 12,42 SAY ientrou
@ 14,42 say ialmoco
@ 08,42 get icodigo picture'AA999999'
read
IF icodigo=space(8)
sele b
save screen
declare cpo[2],tit[2]
cpo[1]=[NOME]
cpo[2]=[CODIGO]
tit[1]=cpo[1]
tit[2]=cpo[2]
limpa23()
sai()
@ 09,43,20,77 box boxd
cb()
dbedit(10,44,19,76,cpo,"",.t.,tit)
restore screen
set color to
icodigo=codigo
inome=substr(nome,1,30)
endif
sele a
SET INDEX COD20
@ 08,42 SAY iCodigo
@ 09,42 SAY inome
@ 09,42 get inome picture'@!'
@ 10,42 get idatas picture'99/99/99'
read
j=recno()
go top
LOCATE for codigo=icodigo.and.datas=idatas
if found()
@ 23,5 say 'achei um'
if lastkey()=27
return 0
endif
* loop
endif
edatas=ctod(idatas)
z=dow(edatas)
dia()
@ 10,42 say edatas pict'XX/XX/XX'
@ 11,42 say ' '
@ 11,42 say dia
@ 12,42 get ientrou picture'99:99'
@ 13,42 get isaiu picture'99:99'
@ 14,42 get ialmoco
read
aenhora=substr(ientrou,1,2)
aenminu=substr(ientrou,4,2)
asaihora=Substr(isaiu,1,2)
asaiminu=substr(isaiu,4,2)
eenhora=val(aenhora)
eenminu=val(aenminu)
esaihora=val(asaihora)
esaiminu=val(asaiminu)
imintot=((esaihora-eenhora)*60+(esaiminu-eenminu))-ialmoco
ihoras=int(imintot/60)
iminutos=(imintot/60-int(imintot/60))*60
IF diasem="SABADO".or.diasem="DOMINGO"
imintot2 =imintot
ihoras =0
iminutos =0
ihoras2 =int(imintot2/60)
iminutos2=imintot2-ihoras2*60
imintot=0
ELSE
if imintot>=510 && aqui ve se tem hora extra
imintot2=imintot-510
imintot=510
endif
ihoras=int(imintot/60)
iminutos=int((imintot/60-int(imintot/60))*60)
ihoras2=int(imintot2/60)
iminutos2=int((imintot2/60-int(imintot2/60))*60)
if lastkey()=27.or.icodigo=space(8)
return 0
endif
centra("Confirma Dados <S/N> ?",23)
conf()
set color to
limpa23()
do case
case lastkey()=27
return 0
case conf="S"
append blank
repl codigo with icodigo
repl nome with inome
repl datas with idatas
repl diasem with dia
repl entrou with ientrou
repl saiu with isaiu
repl mintot with imintot
repl mintot2 with imintot2
repl horas with ihoras
repl horas2 with ihoras2
repl minutos with iminutos
repl minutos2 with iminutos2
repl almoco with ialmoco
exit
endcase
endif
repete=repete+1
enddo
SET COLOR TO
RETURN 0
mais uma em Clipper Summer 87 hihihihi
Enviado: 30 Mar 2008 16:00
por Toledo
Bom, usando o Clipper puro, sem LIBs externas... o exemplo do Maligno é perfeito, mas no exemplo dele tem que alterar o seguinte código:
Código: Selecionar todos
return if(Val(Left(cHora,2)) <= 23 .and. Val(Right(cHora,2)) <= 59
para
Código: Selecionar todos
return (Val(Left(cHora,2)) <= 23 .and. Val(Right(cHora,2)) <= 59)
Abraços,
Enviado: 30 Mar 2008 17:33
por Maligno
Hoje eu to meio zureta mesmo. Penso numa coisa e escrevo outra. Esse IF não tinha nada a ver mesmo. Obrigado pela correção, Toledo.