Fórum Multiplicar Horas por $ #338907
17/03/2007
0
Tenho uma tabela Paradox que tem os seguintes campos:
Campo Tipo
HoraSaída Time | O valor neste campo eu carrego assim DM.tblOSHoraSaida.value := time;
HoraChegada Time | Aqui idem
TotalHoras Time |Aqui recebe adiferença dos dois campos anteriores
PrecoHora $ | Aqui vem atráves de outra tabela ´Tabela de preços´
PrecoTotal $
então eu cobro pelo meu serviço R$9,00 a hora mas com um valor minimo de 2 horas ou seja mesmo que o serviço leve 1 hora pra ser executado será computado o valor de duas horas.
o que eu preciso é multiplicar o campo ´TotalHoras´ pelo campo ´PrecoHora´ e mandar o resultado pro Campo ´PrecoTotal´ lembrando que o valor minimo é de duas horas. Será que fui claro?
Talvez seja o caso de usar uma função?
os campos são como descritos acima mas se tiver algum jeito tendo que mudar os tipos de campos também serve
se puderem me ajudar ficaria muito agradecido.
Valeu!!!!!!!!!!!!!
Gameover
Curtir tópico
+ 0Posts
17/03/2007
Delphijean
Faça:
[b:b57a7f383a]if[/b:b57a7f383a] TotalHoras <= 2 [b:b57a7f383a]then[/b:b57a7f383a]
PrecoTotal := PrecoHora * 2
[b:b57a7f383a]else[/b:b57a7f383a]
PrecoTotal := PrecoHora * TotalHoras;
Bom! Temos que levar em conta que:
1º- Se preenche a Hora de Chagada;
2º- A hora de saída;
2.1º- um instante após Calcula o Total de Horas;
2.2º- outro Instante após Calcula o Preço total;
Obs: A tabela deverá está em modo de edição [color=red:b57a7f383a](isso é óbvio)[/color:b57a7f383a]
Gostei + 0
17/03/2007
Gameover
deu os seguintes erros:
if TotalHoras <= 2 then [Error] UOS.pas(108): Incompatible types else [Error] UOS.pas(110): Operator not applicable to this operand type PrecoTotal := PrecoHora * TotalHoras; [Error] UOS.pas(111): Operator not applicable to this operand type
[/b]
Gostei + 0
17/03/2007
Gameover
deu os seguintes erros:
if TotalHoras <= 2 then [Error] UOS.pas(108): Incompatible types else [Error] UOS.pas(110): Operator not applicable to this operand type PrecoTotal := PrecoHora * TotalHoras; [Error] UOS.pas(111): Operator not applicable to this operand type
[/b]
será que vc pode me ajudar sou iniciante em delphi.
valeu!!!!!!!!
Gostei + 0
17/03/2007
Marco Salles
HoraChegada Time | Aqui idem
TotalHoras Time |Aqui recebe adiferença dos dois campos anteriores
PrecoHora $ | Aqui vem atráves de outra tabela ´Tabela de preços´
PrecoTotal $
var TotalHoras:TTime; PrecoTotal:Real; begin TotalHoras:=DM.tblOSHoraSaida.asdatetime - DM.tblOSHoraEntrada.asdatetime; if (24*TotalHoras) <= 2 then PrecoTotal := DM.SuaOutratablePrecoHora.asdatetime * 2 else PrecoTotal :=DM.SuaOutraRablePrecoHora.asdatetime * 24*TotalHoras; Showmessage(floattostr(PrecoTotal ));
Gostei + 0
17/03/2007
Gameover
acho que é pq o campo PrecoHora e tipo $
var TotalHoras:TTime; PrecoTotal:Real; begin TotalHoras:=DM.tblOSHoraSaida.asdatetime - DM.tblOSHoraChegada.asdatetime; if (24*TotalHoras) <= 2 then PrecoTotal := DM.tblOsPrecoHora.asdatetime * 2 else PrecoTotal :=DM.tblOsPrecoHora.asdatetime * 24*TotalHoras; Showmessage(floattostr(PrecoTotal ));
Gostei + 0
17/03/2007
Marco Salles
Sim... Troque por ascurrency
Gostei + 0
17/03/2007
Gameover
Sim... Troque por ascurrency Citação: PrecoTotal :=DM.SuaOutraRablePrecoHora.ascurrency * 24*TotalHoras;
Gostei + 0
17/03/2007
Marco Salles
Tem que ver se existe este campo nesta tabela..
Tem que ver se esta tabela esta aberta....
Tem que ver se este field foi definido , usando o editor de fileds
com eu disse , use a propriedade fieldByname
Gostei + 0
17/03/2007
Gameover
Tem que ver se existe este campo nesta tabela.. Tem que ver se esta tabela esta aberta.... Tem que ver se este field foi definido , usando o editor de fileds
Até aqui está tudo certo.
coloquei meu projeto aqui [url]http://br.geocities.com/amacco2002/teste.zip[/url]
se vc puder baixar e dar uma olhada!
obrigado.
Gostei + 0
18/03/2007
Gameover
Tem que ver se existe este campo nesta tabela.. Tem que ver se esta tabela esta aberta.... Tem que ver se este field foi definido , usando o editor de fileds
Gostei + 0
18/03/2007
Marco Salles
pelo projeto que voce me passou , voce so trocou uma instrução ..
Voce tem que trocar as duas
Gostei + 0
18/03/2007
Gameover
pelo projeto que voce me passou , voce so trocou uma instrução .. Voce tem que trocar as duas Citação: procedure TfrmOS.Button3Click(Sender: TObject); var TotalHoras:TTime; PrecoTotal:Real; begin TotalHoras:=DM.tblOSHoraSaida.asdatetime - DM.tblOSHoraChegada.asdatetime; if (24*TotalHoras) <= 2 then //tem que trocar esta tb PrecoTotal := DM.tblOsPrecoHora.AsCurrency * 2 else //voce so trocou esta PrecoTotal :=DM.tblOsPrecoHora.asCurrency * 24*TotalHoras; Showmessage(floattostr(PrecoTotal )); end;
É eu já tinha corrigido agora está compilando certinho, mas os cálculos não estão batendo, vc percebeu?
Gostei + 0
18/03/2007
Micheus
Voce tem um campo TotalHoras, que por algum motivo armazena o tempo correto :?. Utilize ele - não terá erro e simplificará os cálculos:
procedure TfrmOS.Button3Click(Sender: TObject); var PrecoTotal :Real; begin DM.tblOSHoraChegada.asdatetime; if (24*DM.tblOSTotalHoras.AsDateTime) <= 2 then PrecoTotal := DM.tblOsPrecoHora.asCurrency * 2 else PrecoTotal :=DM.tblOsPrecoHora.asCurrency * 24*DM.tblOSTotalHoras.AsDateTime; Showmessage(floattostr(PrecoTotal )); end;
De qualquer modo, observe que não parece fazer sentido que a hora de entrada seja posterior a de saída - dê uma olhada nisto. :wink:
Gostei + 0
18/03/2007
Gameover
Desculpe se não ficou claro, e que a hora de saída se refere a hora em que o funcionario saiu para executar o serviço e a hora de chegada se refere a hora em que ele retornou com o serviço executado, e não a entrada e saida do funcionario na empresa
Gostei + 0
18/03/2007
Marco Salles
então voce tem que inverter pô.. No meu modelo ist foi feito ao contrário
Faça assim e ze finin
Gostei + 0