Fórum Ajuda com Calculo de Horas #420784
31/07/2012
0
a hora a cada 30 minutos, tem que ser a cada 30 minutos, tipo preço da hora R$ 4,00
o veiculo entrou as 12:00 e saiu as 12:28 valor a ser cobrado R$ 2,00, caso entrou 12:00
e saiu as 12:32 valor a ser cobrado R$ 4,00 e assim por diante.
bem sou iniciante em delphi, bem iniciante mesmo, este programinha peguei na net, só que ele calcula
de hora em hora não importa se o veiculo entrou as 12:00 e saiu as 12:20 ele cobra R$ 4,00, porém eu não sei
modificar o codigo que esta nele calculando as horas, gostaria se vcs puderem deem uma olhada
nele e se possivel passo a passo me ensinen, o que alterar ou modificar, ate mesmo fazer outro.
no banco de dados tenhos os campos :
HoraEntrada Tipo (time)
HoraSaida tipo (Time )
PlacaVeiculo tipo (A)
Dataentrada tipo date
DataSaida tipo (date)
QtdHora tipo (N)
VrHora tipo ($) Money
Tipo (A) 1
Quando o veiculo entra é digitado a placa dele, o modelo e em DbRadioGroup é selecionado Hora, em seguida clico em botão Gravar, apos clicar em gravar no banco de dados já fica os dados, placa, modelo, dataentrada, Horaentrada, Tipo,ficando as horas do sistema sendo exibida em Edit.
quando o veiculo vai sair clico em botão fechar, e no banco grava o restante dos dados : DataSaida, HoraSaida e VrHora.
Ao Clicar no Botão Fechar o Aplicativo passa a executar este procedimento Abaixo:
Gilvanio Gonçalves
Curtir tópico
+ 0Posts
31/07/2012
Gilvanio Gonçalves
Ao Clicar no Botão Fechar o Aplicativo passa a executar este procedimento Abaixo:
procedure TFservico.BtnFecharClick(Sender: TObject);
begin
if btncancelar.Enabled then
BtnGravarClick(self);
if Modulo.TBServico[Tipo]=G then
begin
FechaPagoExecute(Self);
Abort;
end;
if Application.MessageBox(Deseja registrar Fechamento?,Fechamento,0+4+32)=6 then
begin
Modulo.TBServico.Edit;
if (Modulo.TBServico[Tipo]=P) or (Modulo.TBServico[Tipo]=C)then
begin
Modulo.TBServico[horasaida]:= timetostr(now);
Modulo.TBServico[datasaida]:= datetostr(now);
Modulo.TBServicoqtddias.Clear;
Modulo.TBServicoqtdhora.Clear;
end;
if Modulo.TBServico[Especie] = H then
FechaHoraexecute(Self); ( Chama Esta FunÇão)
if Modulo.TBServico[Especie] = D then
FechaDiaExecute(Self);
Modulo.TBServicoSubTotal.Value:=Modulo.TBServicoVrDiaria.Value +
Modulo.TBServicoVrHora.Value + Modulo.TBServicoVrItens.Value +
Modulo.TBServicoVrCera.Value + Modulo.TBServicoVrMotor.Value +
Modulo.TBServicoVrTerceiro.Value ;
Modulo.TBServicoTotal.Value:= Modulo.TBServicoSubTotal.Value -
Modulo.TBServicoDesconto.Value;
Modulo.TBServico.Post;
if Modulo.TBServico[Tipo]= P then
FechaParticularExecute(self);
if Modulo.TBServico[Tipo]= C then
FechaConvenioExecute(self);
try
Modulo.TBServico.Filter :=EntradaN=+EditEntradaN.text+;
Modulo.TBServico.Filtered := True;
Application.CreateForm(TFDialogoImp,FDialogoImp);
FDialogoImp.ShowModal;
FDialogoImp.Release;
finally
FDialogoImp.Free;
Modulo.TBServico.Filtered := false;
end;
BtnCancelar.Enabled:=False;
BtnGravar.Enabled:=False;
end
else
Abort;
EditDinheiro.SetFocus;
end;
Codigo da Função Abaixo:
procedure TFservico.FechaHoraExecute(Sender: TObject);
var
HoraEnt,HoraSaida:TDateTime;
Horas:Integer;
FracaoHora,FracaoDia:Double;
begin
FracaoHora:=0;
FracaoDia:=0;
Horas:=0;
// codigo que exibe o preço da hora e fraciona
if (Modulo.TBServico[Tipo]=P) or (Modulo.TBServico[Tipo]=C)then
begin
HoraEnt:=StrToDateTime(DatetoStr(Modulo.TBServico[DataEntrada])+ +
TimeToStr(Modulo.TBServico[HoraEntrada]));
HoraSaida:=StrToDateTime(DateToStr(Modulo.TBServico[DataSaida])+ +
TimeToStr(Modulo.TBServico[HoraSaida]));
FracaoDia:=HoraSaida-HoraEnt;
FracaoHora:=FracaoDia*24;
while FracaoHora>Horas do
Inc(Horas);
FracaoHora:=FracaoHora-Horas;
if FracaoHora<0>1/6 then
Inc(Horas);
if Horas<1 then
Inc(Horas);
Modulo.TBServico[QtdHora]:=Horas;
end;
if Modulo.TbServico[VrHora]=null then
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*
(Modulo.TbValores[VrHora])
else
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*
(Modulo.TbServico[VrHora]);
if Modulo.TBServico[Itens]<>null then
LavacaoExecute(Self);
end;
Peço a vcs pro favro me ajudem pois eu não entendi nada desta função, Nào sou apto ainda em delphi para isto, para modificar ou fazer uma função correta para atender no que preciso, peço ajuda se puderam me de o exemplo do codigo que devo usar, ou este meu codigo alterado para funcionar no que preciso, desde ja agradeço a quem me ajudar.
Gostei + 0
01/08/2012
Bruno Leandro
while FracaoHora>Horas do
Inc(Horas);
FracaoHora:=FracaoHora-Horas;
if FracaoHora<0>1/2 then
Inc(Horas);
if Horas<1 then
Horas:=0;
Modulo.TBServico[QtdHora]:=Horas;
end;
if Modulo.TbServico[VrHora]=null then
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*(Modulo.TbValores[VrHora]) + ((0,5)*(Modulo.TbValores[VrHora]))
else
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*(Modulo.TbServico[VrHora]) + ((0,5)*(Modulo.TbValores[VrHora]));
Gostei + 0
01/08/2012
Gilvanio Gonçalves
while FracaoHora>Horas do
Inc(Horas);
FracaoHora:=FracaoHora-Horas;
if FracaoHora<0>1/2 then
Inc(Horas);
if Horas<1 then
Horas:=0;
Modulo.TBServico[QtdHora]:=Horas;
end;
if Modulo.TbServico[VrHora]=null then
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*(Modulo.TbValores[VrHora]) + ((0,5)*(Modulo.TbValores[VrHora]))
else
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*(Modulo.TbServico[VrHora]) + ((0,5)*(Modulo.TbValores[VrHora]));
Não consegui adaptar o seu codigo ao meu, da erro nesta linha: if FracaoHora<0>1/2 then
e também nestes campos esta faltando '' [QtdHora])*
(Modulo.TbServico[VrHora]) // sào campos do banco de dados.
Abaixo esta o codigo que esta no programa tem vc adaptar o seu codigo nele por favor.
procedure TFservico.FechaHoraExecute(Sender: TObject);
var
HoraEnt,HoraSaida:TDateTime;
Horas:Integer;
FracaoHora,FracaoDia:Double;
begin
FracaoHora:=0;
FracaoDia:=0;
Horas:=0;
if (Modulo.TBServico['Tipo']='P') or (Modulo.TBServico['Tipo']='C')then
begin
HoraEnt:=StrToDateTime(DatetoStr(Modulo.TBServico['DataEntrada'])+' '+
TimeToStr(Modulo.TBServico['HoraEntrada']));
HoraSaida:=StrToDateTime(DateToStr(Modulo.TBServico['DataSaida'])+' '+
TimeToStr(Modulo.TBServico['HoraSaida']));
FracaoDia:=HoraSaida-HoraEnt;
FracaoHora:=FracaoDia*24;
while FracaoHora>Horas do
Inc(Horas);
FracaoHora:=FracaoHora-Horas;
if FracaoHora<0>1/2 then
Inc(Horas);
if Horas<1 then
Inc(Horas);
Modulo.TBServico['QtdHora']:=Horas;
end;
if Modulo.TbServico['VrHora']=null then
Modulo.TbServico['VrHora']:=(Modulo.TBServico['QtdHora'])*
(Modulo.TbValores['VrHora'])
else
Modulo.TbServico['VrHora']:=(Modulo.TBServico['QtdHora'])*
(Modulo.TbServico['VrHora']);
if Modulo.TBServico['Itens']<>null then
LavacaoExecute(Self);
end;
conto com sua ajuda ainda, desde já agradeço pela a sua atenção.
Gostei + 0
03/08/2012
Bruno Leandro
cria um nova variavel MeiaHora do tipo real
MeiaHora := 0;
while FracaoHoraHoras do
Inc(Horas);
FracaoHora:=FracaoHora-Horas;
if FracaoHora0.5 then
Inc(Horas)
else
MeiaHora := 0.5;
if Horas1 then
Horas:=0;
Modulo.TBServico[QtdHora]:=Horas;
end;
if Modulo.TbServico[VrHora]=null then
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*(Modulo.TbValores[VrHora]) + ((MeiaHora)*(Modulo.TbValores[VrHora]))
else
Modulo.TbServico[VrHora]:=(Modulo.TBServico[QtdHora])*(Modulo.TbServico[VrHora]) + ((MeiaHora)*(Modulo.TbValores[VrHora]));
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)