Multiplicar Horas por $
Olá pessoal meu 1º post neste fórum
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!!!!!!!!!!!!!
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
Curtidas 0
Respostas
Delphijean
17/03/2007
Exatamente um instante após o preenchimento de ´TotalHoras´
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]
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
Gameover
17/03/2007
olá [b:2e9db092a8]delphijean[/b:2e9db092a8] obrigado pela atenção o código que vc me passou
deu os seguintes erros:
[/b]
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
Gameover
17/03/2007
olá [b:d132c1cf3b]delphijean[/b:d132c1cf3b] obrigado pela atenção o código que vc me passou
deu os seguintes erros:
[/b]
será que vc pode me ajudar sou iniciante em delphi.
valeu!!!!!!!!
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
Marco Salles
17/03/2007
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 $
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 ));
P:S1) TotalHoras e ProcoTotal são variáveis e não campos
P:S2)
não sei o nome da sua outra tabela , portanto eu usei : DM.SuaOutratablePrecoHora
P:s3)
Melhor do que usar os fiels é usar o FiledByName para referencia-los:
Assim : DM.tblOSHoraSaida.asdatetime por
DM.tblOS.FieldByName(´HoraSaida´).asdatetime
P:S4)
e finalmente para não deixar dúvidas , note o fator 24 *
(vinte e quatro) multiplicando nas expressãoes
GOSTEI 0
Gameover
17/03/2007
olá Marcos Salles deu um o seguinte erro ´cannot access field ´PrecoHora´ as type DateTime.
acho que é pq o campo PrecoHora e tipo $
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
Marco Salles
17/03/2007
olá Marcos Salles deu um o seguinte erro ´cannot access field ´PrecoHora´ as type DateTime
Sim... Troque por ascurrency
PrecoTotal :=DM.SuaOutraRablePrecoHora.ascurrency * 24*TotalHoras;
GOSTEI 0
Gameover
17/03/2007
eu troquei mas deu o mesmo erro
Sim... Troque por ascurrency Citação: PrecoTotal :=DM.SuaOutraRablePrecoHora.ascurrency * 24*TotalHoras;
GOSTEI 0
Marco Salles
17/03/2007
olá Marcos Salles deu um o seguinte erro ´cannot access field ´PrecoHora´ as type DateTime
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
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
Gameover
17/03/2007
Marcos
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.
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
Gameover
17/03/2007
Marcos
ainda está dando o erro.
coloquei meu projeto aqui [url]http://br.geocities.com/amacco2002/teste.zip[/url]
se vc puder baixar e dar uma olhada!
obrigado.
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
Marco Salles
17/03/2007
Citação:
olá Marcos Salles deu um o seguinte erro ´cannot access field ´PrecoHora´ as type DateTime
Sim... Troque por ascurrency
Citação:
PrecoTotal :=DM.SuaOutraRablePrecoHora.ascurrency * 24*TotalHoras;
pelo projeto que voce me passou , voce so trocou uma instrução ..
Voce tem que trocar as duas
procedure TfrmOS.Button3Click(Sender: TObject);
var
TotalHoras:TTime;
PrecoTotal:Real;
begin
TotalHoras:=DM.tblOSHoraSaida.asdatetime - DM.tblOSHoraChegada.asdatetime;
if (24*TotalHoras) <= 2 then
//[u:cdccb43253]tem que trocar esta tb[/u:cdccb43253]
[b:cdccb43253]PrecoTotal := DM.tblOsPrecoHora.AsCurrency * 2[/b:cdccb43253]
else
//[u:cdccb43253]voce so trocou esta[/u:cdccb43253]
[b:cdccb43253]PrecoTotal :=DM.tblOsPrecoHora.asCurrency * 24*TotalHoras;[/b:cdccb43253]
Showmessage(floattostr(PrecoTotal ));
end;
GOSTEI 0
Gameover
17/03/2007
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
Micheus
17/03/2007
Só um pitaco aqui...
Voce tem um campo TotalHoras, que por algum motivo armazena o tempo correto :?. Utilize ele - não terá erro e simplificará os cálculos:
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:
É eu já tinha corrigido agora está compilando certinho, mas os cálculos não estão batendo, vc percebeu?
Se está se referindo ao primeiro item exemplo de sua base de dados (ref. José), o problema é que a hora de Saída (18:55:44) é menor que a de Chegada (21:20:00)! Com isso, o resultado é negativo (portanto menor que 2), donde resulta o valor total sempre igual a R$ 22,00.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
Gameover
17/03/2007
Só um pitaco aqui...
GameOver escreveu:
É eu já tinha corrigido agora está compilando certinho, mas os cálculos não estão batendo, vc percebeu?
Se está se referindo ao primeiro item exemplo de sua base de dados (ref. José), o problema é que a hora de Saída (18:55:44) é menor que a de Chegada (21:20:00)! Com isso, o resultado é negativo (portanto menor que 2), donde resulta o valor total sempre igual a R$ 22,00.
Voce tem um campo TotalHoras, que por algum motivo armazena o tempo correto Confused. Utilize ele - não terá erro e simplificará os cálculos:
Código:
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
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
Marco Salles
17/03/2007
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
então voce tem que inverter pô.. No meu modelo ist foi feito ao contrário
Faça assim e ze finin
var
TotalHoras:TTime;
PrecoTotal:Real;
begin
TotalHoras:=DM.tblOSHoraChegada.asdatetime -
DM.tblOSHoraSaida.asdatetime;
Showmessage(Timetostr(totalHoras));
if (24*TotalHoras) <= 2 then
PrecoTotal := DM.tblOsPrecoHora.AsCurrency * 2
else
PrecoTotal :=DM.tblOsPrecoHora.asCurrency * 24*TotalHoras;
Showmessage(floattostr(PrecoTotal ));
end;
GOSTEI 0
Gameover
17/03/2007
então voce tem que inverter pô.. No meu modelo ist foi feito ao contrário
Faça assim e ze finin
é acabei de perceber ia postar o resultado agora mas vc meu a ´bronca´ primeiro (´:oops:´)
procedure TfrmOS.Button3Click(Sender: TObject); var TotalHoras:TTime; PrecoTotal:Real; begin TotalHoras:=DM.tblOSHoraChegada.asdatetime - DM.tblOSHoraSaida.asdatetime; if (24*TotalHoras) <= 2 then PrecoTotal := DM.tblOsPrecoHora.asCurrency * 2 else PrecoTotal :=DM.tblOsPrecoHora.asCurrency * 24*TotalHoras; Showmessage(floattostr(PrecoTotal )); end;
Valeu pessoal, pela paciência.
GOSTEI 0
Marco Salles
17/03/2007
[b:c66373c79c]marco salles citou[/b:c66373c79c]
[b:c66373c79c]GameOver[/b:c66373c79c]
Rapâ o pô é brincadeira.. Modo de descontrair ..
[b:c66373c79c]Pô [/b:c66373c79c]´mermo´ eu tô é com a torcida do FlAMENGO que tã [u:c66373c79c]acreditando...... [/u:c66373c79c] Só para me fazer Raiva :twisted: :twisted: :twisted:
então voce tem que inverter pô.. No meu modelo ist foi feito ao contrário
Faça assim e ze finin
[b:c66373c79c]GameOver[/b:c66373c79c]
é acabei de perceber ia postar o resultado agora mas vc meu a ´bronca´ primeiro (´´)
Rapâ o pô é brincadeira.. Modo de descontrair ..
[b:c66373c79c]Pô [/b:c66373c79c]´mermo´ eu tô é com a torcida do FlAMENGO que tã [u:c66373c79c]acreditando...... [/u:c66373c79c] Só para me fazer Raiva :twisted: :twisted: :twisted:
GOSTEI 0
Gameover
17/03/2007
Rapâ o pô é brincadeira.. Modo de descontrair ..
Tô Ligado.......
Valeu!!!!!!!!!!!!!!
GOSTEI 0
Delphijean
17/03/2007
Olá amigo para que nao ocorra os erros vc deve transformar o total de horas em inteiros.
Tipo:
A cada 60min vc transforma em 1 hora
Tipo:
A cada 60min vc transforma em 1 hora
GOSTEI 0