Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

l_nando

[Resolvido] Erro 0x800A000D

Recommended Posts

Pessoal, boa noite.

 

Estou tentando fazer uns testes para calcular um total de horas e mostra um valor a ser pago, por enquanto é só por formulário, sem bd.

 

Preencho um form com hora de entrada e hora de saída e quando clico em executar aparece o seguinte erro:

 

Tipo de erro:

Erro de tempo de execução do Microsoft VBScript (0x800A000D)

Tipos incompatíveis: '[string: "03:00"]'

/teste/est2.asp, line 10

 

 

Segue o cód. da pág de resposta a est2.asp:

 

<% 
Dim Vtxthorae, Vtxthoras, Vtotal, Vahora, Vhorac, Vmhota, Vthora

Vtxthorae = request.Form("txthorae") 'Hora de entrada
Vtxthoras = request.Form("txthoras") 'Hora de saída
Vtotal = HoraMinuto(Vtxthoras) - HoraMinuto(Vtxthorae) ' período de horas
Vahora = "2,00" ' Valor da hora adicional
Vhorac = "5,00" ' Valor da primeira hora
Vmenoshora = "01:00" 
Vmhora = MinutoHora(Vtotal) - Vmenoshora 'Subtrair o período de horas por 1 hora
Vthora = Vmhora * Vahora + Vhorac 'Multiplicar a subtração do período por 1 hora e somar com 5 reais

Function HoraMinuto(Hora)
  HoraMinuto = (Hour(Hora)*60) + Minute(Hora)
End Function

Function MinutoHora(Minutos)
  Hora = (Minutos \ 60)
  If Len(Hora) = 1 Then Hora = "0" & Hora
  Minuto = (Minutos Mod 60)
  If Len(Minuto) = 1 Then Minuto = "0" & Minuto
  MinutoHora = Hora & ":" & Minuto
End Function

Response.Write "Total de horas = " & MinutoHora(Vtotal)

if MinutoHora(Vtotal) > "01:00" then
 
response.Write "<br>Valor a pagar = R$ " & Vthora & ",00"
 
else if MinutoHora(Vtotal) <= "01:00" then

response.Write "<br>Valor a pagar = R$ " & Vchora

end if
end if

%>

Linha 10:

Vmhora = MinutoHora(Vtotal) - Vmenoshora

Alguém pode me ajudar?

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é possível calcular hora dessa forma. O ideal é transformar em segundos e depois converter em hora novamente.

 

Postei uma função no Laboratório de Scripts, dê uma olhada lá. Qualquer dúvida poste aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hargon, desculpe minha ignorância, mas dei uma olhada lá e não entendi nada, pois não manjo nada disso.

Esta é primeira vez que tento mexer com hora e somas.

 

Se você puder me ajudar eu te agradeço muito.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

existe uma o´tima função no lab. de script, dá uma pesquisada lá...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual parte da função você não entendeu?

 

Ela já está pronta, é só informar os horários e se deseja subtrair, somar, etc...

 

Ex.: response.write converteSegundosHorario(converteHorarioSegundos("1:30:00") + converteHorarioSegundos("2:50:00"))

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, boa noite!

 

Depois de olhar a função com mais calma, consegui resolver meu problema.

Adaptei ao que eu estava precisando e parece que está funcionando direitinho.

 

Agora preciso adptar tudo isso com banco de dados.

 

Segue o cód. para verificação:

 

<% 
Dim Vahora, Vhorac, Vtxthorae, Vtxthoras, Vtotal, VCtotal, Vmenoshora, VCmenoshora, Vmmmhora, Vmhora, Vthora

'###########################################################
'*********************************************************
' Função para conversão de horário
' Autor: hargon
' Propósito: Converter Horário em Segundos ou vice-versa
' Data: 02/06/2008
' Fórum: Imasters (www.imasters.com.br/forum)
'*********************************************************
'Option Explicit

Function converteHorarioSegundos(ByVal horario)
	Dim segundos, minutos, horas
	Dim horarioArray
	
	segundos = "00"
	minutos = "00"
	horas = "00"
	
	horarioArray = split(horario,":")
	
	If (uBound(horarioArray) >= 0) Then
		horas = horarioArray(0)
	End If
	If (uBound(horarioArray) >= 1) Then
		minutos = horarioArray(1)
	End If
	If (uBound(horarioArray) >= 2) Then
		segundos = horarioArray(2)
	End If
	
	converteHorarioSegundos = (horas*3600) + (minutos*60) + segundos
End Function

Function converteSegundosHorario(segundos)
	Dim minutos, horas
	horas = int(segundos/3600)
	minutos = int((segundos mod 3600) / 60)
	segundos = int((segundos mod 3600) mod 60)
	if len(minutos) < 2 then : minutos = 0 & minutos : end if
	if len(segundos) < 2 then : segundos = 0 & segundos : end if
	
	converteSegundosHorario = horas & ":" & minutos & ":" & segundos
End Function
'############################################################

Vahora = "2" ' Valor da hora adicional
Vhorac = "5" ' Valor da primeira hora
Vtxthorae = request.Form("txthorae") 'Hora de entrada
Vtxthoras = request.Form("txthoras") 'Hora de saída
Vtotal = converteHorarioSegundos(Vtxthoras) - converteHorarioSegundos(Vtxthorae) ' calcula período de horas em segundos
VCtotal = Vtotal ' Mostra o resultado do cálculo em segundos
Vmenoshora = "1:00:00" 'Hora a ser subtraída se o resultado for maior que 1:00:00 h
VCmenoshora = converteHorarioSegundos(Vmenoshora) 'Converte a hora a ser subtraída em segundos
Vmmmhora = VCtotal - VCmenoshora 'Subtrai o resultado do calculo do período da hora a ser subtraída se o resultado for maior que 1:00:00 h em segundos
Vmhora = Vmmmhora / 3600 'Pega o resultado da subtração e divide por 3600 para obter um nº inteiro
Vthora = Vmhora * Vahora + Vhorac 'Multiplica o nº inteiro pelo valor da hora adicional e soma com o valor da 1ª hora

Response.Write "Total de horas = " & converteSegundosHorario(Vtotal)
Response.Write "<hr>"
if converteSegundosHorario(Vtotal) > "01:00:00" then
 
response.Write "<br>Valor a pagar = " & formatcurrency(Vthora)
Response.Write "<hr>" 
else if converteSegundosHorario(Vtotal) <= "01:00:00" then

response.Write "<br>Valor a pagar = " & formatcurrency(Vthora)

end if
end if

%>

Abraço a todos, vcs são os feras.

 

Valeu mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.