GARANTIR DESCONTO

Fórum Multiplicar Horas por $ #338907

17/03/2007

0

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!!!!!!!!!!!!!


Gameover

Gameover

Responder

Posts

17/03/2007

Delphijean

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]


Responder

Gostei + 0

17/03/2007

Gameover

olá [b:2e9db092a8]delphijean[/b:2e9db092a8] obrigado pela atenção o código que vc me passou
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]


Responder

Gostei + 0

17/03/2007

Gameover

olá [b:d132c1cf3b]delphijean[/b:d132c1cf3b] obrigado pela atenção o código que vc me passou
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!!!!!!!!


Responder

Gostei + 0

17/03/2007

Marco Salles

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 $

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



Responder

Gostei + 0

17/03/2007

Gameover

olá Marcos Salles deu um o seguinte erro ´cannot access field ´PrecoHora´ as type DateTime.

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 ));



Responder

Gostei + 0

17/03/2007

Marco Salles

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;



Responder

Gostei + 0

17/03/2007

Gameover

eu troquei mas deu o mesmo erro


Sim... Troque por ascurrency

Citação:
PrecoTotal :=DM.SuaOutraRablePrecoHora.ascurrency * 24*TotalHoras;



Responder

Gostei + 0

17/03/2007

Marco Salles

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


Responder

Gostei + 0

17/03/2007

Gameover

Marcos

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.


Responder

Gostei + 0

18/03/2007

Gameover

Marcos
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 
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.



Responder

Gostei + 0

18/03/2007

Marco Salles

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;



Responder

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?



Responder

Gostei + 0

18/03/2007

Micheus

Só um pitaco aqui...
É 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:


Responder

Gostei + 0

18/03/2007

Gameover

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


Responder

Gostei + 0

18/03/2007

Marco Salles

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;



Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar