Eder Postado Outubro 24, 2007 Denunciar Share Postado Outubro 24, 2007 (editado) Ola..pessoalTenho que montar um relatorio no quick.....e nele tenho que diminuir a Dta e hora final - Data e hora inicial da ultima viagem.assim deve ser:Dta Saida----Hra Saida---Dta Chegada----Hra Chegada---Repouso Motorista(em horas) ---------------------------------------------------------------------------------- 15.10.2007 20:00 16.10.2007 16:00 16.10.2007 18:00 17.10.2007 15:00 02:00 17.10.2007 19:00 18.10.2007 16:00 04:00 18.10.2007 17:00 19.10.2007 15:00 01:00eu teria que mostra no relatorio o total de REPOUSO DO MOTORISTAo repouso compreende a data e hora inicio da viagem - data e hora final da ultima viagem. não sei se fui claro....se alguém não entender por favor ......eu já montei o relatorio só falta mostrar aquela continha do REPOUSO DO MOTORISTA...não sei montar....paradox campo da tabela tipo (t)timer + delphi 4.muito Grato :( Editado Outubro 24, 2007 por Micheus Para desenhar tabelas, a dica é utilizar a tag CODE e previsualizar o post antes de enviar. ;-) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 24, 2007 Denunciar Share Postado Outubro 24, 2007 Eder, a sugestão é que você calcule na mão.- Crie uma variável do tipo datetime (vamos chamar DtAnterior) na seção private do seu form (o do relatório). - No BeforePrint da banda que você iniciar o motorista (talvez você liste vários motoristas, então pode ter um groupband) voce inicializa esta variável com o valor do campo (será o primeiro valor, no seu exemplo 16/10/2007 16:00).procedure Form1.group1BeforePrint(....); begin // como você tem os campos data e hora separados, iremos concatená-los para facilitar as coisas DtAnterior := <dataset>DatSaida.value +<dataset>HraSaida.value; end; - Coloca um QRLabel na banda em que a hora será impressa e, depois, no before print você faz a continha e atribui o valor: procedure Form1.band1BeforePrint(....); var QtdHora :TDateTime; begin QtdHora := (<dataset>DatSaida.value +<dataset>HraSaida.value) - DtAnterior; if QtdHora = 0 then QRLabel1.Caption := '' // na primeira linha não há diferença else QRLabel1.Caption := TimeToStr(QtdHora); // guarda campo atual para próxima interação DtAnterior := (<dataset>DatChegada.value +<dataset>HraChegada.value); end;Algo assim. Resta uma pergunta: Há a possibilidade de este intervalo de tempo ser maior que 23:59h? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Outubro 24, 2007 Autor Denunciar Share Postado Outubro 24, 2007 ola..Micheus.....quanto tempo heimmm!!Carinha primeiro vou responder este pergunta:Algo assim. Resta uma pergunta: Há a possibilidade de este intervalo de tempo ser maior que 23:59h? R.: bom infelizmente pode ocorrer sim......por exemplo se a viagem foi dia 10 e depois somente dia 15 ele viajou denovo neste caso da um monte de horas...neste mesmo relatorio eu uso estas duas funções pra converter horas pra segundo e depois voltar de segundo pra horas....//Função converter Hora para Segundosfunction Hora_Seg( Horas:string ):LongInt; Var Hor,Min,Seg:LongInt; begin Horas[Pos(':',Horas)]:= '['; Horas[Pos(':',Horas)]:= ']'; Hor := StrToInt(Copy(Horas,1,Pos('[',Horas)-1)); Min := StrToInt(Copy(Horas,Pos('[',Horas)+1,(Pos(']',Horas)-Pos('[',Horas)-1))); if Pos(':',Horas) > 0 then Seg := StrToInt(Copy(Horas,Pos(']',Horas)+1,(Pos(':',Horas)-Pos(']',Horas)-1))) else Seg := StrToInt(Copy(Horas,Pos(']',Horas)+1,2)); Result := Seg + (Hor*3600) + (Min*60); end; //Função converter Segundos para Horas function Seg_Hora( Seg:LongInt ):string; Var Hora,Min:LongInt; Tmp : Double; begin Tmp := Seg / 3600; Hora := Round(Int(Tmp)); Seg := Round(Seg - (Hora*3600)); Tmp := Seg / 60; Min := Round(Int(Tmp)); Seg := Round(Seg - (Min*60)); Result := FormatFloat( '00', Hora )+ ':' + FormatFloat( '00', Min ) + ':' + FormatFloat( '00', Seg ); end;Será que não teria uma maneira de trabalhar com estas duas funções pra solucionar o problema??Nota: não testei a sua idéia ainda.......tou esperando a sua dica... ;) valeu...muito Grato :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 24, 2007 Denunciar Share Postado Outubro 24, 2007 Resta uma pergunta: Há a possibilidade de este intervalo de tempo ser maior que 23:59h? R.: bom infelizmente pode ocorrer sim......por exemplo se a viagem foi dia 10 e depois somente dia 15 ele viajou denovo neste caso da um monte de horas...Então, provavelmente será interessante olha lá em Tutoriais & Dicas um tópico que fiz para a formatação de horas com mais de 23:59:59hs.neste mesmo relatorio eu uso estas duas funções pra converter horas pra segundo e depois voltar de segundo pra horas....Será que não teria uma maneira de trabalhar com estas duas funções pra solucionar o problema??primeiro devo perguntar: porque você faz este tipo de conversão?e segundo, você realmente está armazenando Data separado da Hora, como eu imaginei no post anterior? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Outubro 24, 2007 Autor Denunciar Share Postado Outubro 24, 2007 (editado) primeiro devo perguntar: porque você faz este tipo de conversão?e segundo, você realmente está armazenando Data separado da Hora, como eu imaginei no post anterior?R.: bom....como o campo é timer e ultrapassa as 23:59 horas então é convertido os dias+horas em segundos....visto quando da os segundos...ai volta de segundos pra horas..pelo menos um colega meu me disse que seria uma solução mais correta pra resolver o problema.vou tentar fazer a sua dica que você exemplicou acima...pra ver...no que da.se tiveres mais alguma dica mais simples...por favor me mostra....infelizmente foi o presente que ganhei hoje no meu primeiro dia após as feiras hehehe... tenho que montar este relatorio até sexta...é mole? ;) Grato Editado Outubro 24, 2007 por Eder Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 24, 2007 Denunciar Share Postado Outubro 24, 2007 se tiveres mais alguma dica mais simples...por favor me mostra....infelizmente foi o presente que ganhei hoje no meu primeiro dia após as feiras hehehe... tenho que montar este relatorio até sexta...é mole? ;)veja bem, desde que você tem dois campos: um Date e um Time, não vejo nada de complicado você somar os dois.Nos posts abaixo, já comentei um pouco sobre esta questão de data e hora em campos TDateTime:http://scriptbrasil.com.br/forum/index.php...st&p=450082http://scriptbrasil.com.br/forum/index.php...st&p=373041e neste post está a explicação de como formatar um texto para mostrar um campo TDateTime que contém dias (ou seja, mais que 23:59:59.999hs). Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Outubro 24, 2007 Autor Denunciar Share Postado Outubro 24, 2007 (editado) Ola...Micheus....fiz o exemplo como me mostrou...funcionou legal...exceto pela questão de ultrapassar a 23:59, tipo como exemplo abaixo:Dta Saida----Hra Saida---Dta Chegada----Hra Chegada---Repouso Motorista(em horas)---------------------------------------------------------------------------------------02.08.2007 23:40 03.08.2007 08:20 05.08.2007 09:00 05.08.2007 19:35 00:4006.08.2007 22:00 07.07.2007 09:40 02:47ai tentei ler o tópico que você me mostrou:e neste post está a explicação de como formatar um texto para mostrar um campo TDateTime que contém dias (ou seja, mais que 23:59:59.999hs).só que este tópico não ta abrindo pra mim. :( Grato Editado Outubro 24, 2007 por Eder Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 24, 2007 Denunciar Share Postado Outubro 24, 2007 ai tentei ler o tópico que você me mostrou:só que este tópico não ta abrindo pra mim. :(eu testei e abriu, mas segue a função aqui (fica faltando a explicação que está lá):function FullTimeToStr(SUMTime: TDateTime): string; var StrHor, StrMin :string; TotHor :double; begin TotHor := SUMTime *24; if (TotHor -Trunc(TotHor)) > 0.9999 then TotHor := Round(TotHor); StrHor := FormatFloat('##0:', Int(TotHor)); StrMin := FormatDateTime('nn:ss', Frac(TotHor)/24); Result := StrHor +StrMin; end; então, ao invés de utilizar TimeToStr naquela parte do exemplo que postei: if QtdHora = 0 then QRLabel1.Caption := '' // na primeira linha não há diferença else QRLabel1.Caption := TimeToStr(QtdHora); voce altera para: if QtdHora = 0 then QRLabel1.Caption := '' // na primeira linha não há diferença else QRLabel1.Caption := FullTimeToStr(QtdHora);Confira aí. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Outubro 25, 2007 Autor Denunciar Share Postado Outubro 25, 2007 ai tentei ler o tópico que você me mostrou:só que este tópico não ta abrindo pra mim. eu testei e abriu, mas segue a função aqui (fica faltando a explicação que está lá):R.: opa agora abriu também.....e li a sua explicação..quanto ao resultado deu certo. :D só achei um coisinha esquisitinha no relatorio(parece falha).....no caso o primeiro registro do motorista..Pois como não tenho a data_saida e hora_saida não tem como fazer a conta...mas beleza....se precisar saber é só tirar o relatorio uns dias antes.Dta Saida----Hra Saida---Dta Chegada----Hra Chegada---Repouso Motorista(em horas)---------------------------------------------------------------------------------------02.08.2007 23:40 03.08.2007 08:20 XX:XX05.08.2007 09:00 05.08.2007 19:35 00:4006.08.2007 22:00 07.07.2007 09:40 02:47Mas Beleza....Micheus....muito grato pela ajuda mais uma vez..Forte Abraço ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Outubro 25, 2007 Denunciar Share Postado Outubro 25, 2007 só achei um coisinha esquisitinha no relatorio(parece falha).....no caso o primeiro registro do motorista..Pois como não tenho a data_saida e hora_saida não tem como fazer a conta...mas beleza....se precisar saber é só tirar o relatorio uns dias antes.certo, mas o lance de testar "QtdHora = 0" e deixar o QRLabel.Caption = '' - não funcionou? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Eder Postado Outubro 25, 2007 Autor Denunciar Share Postado Outubro 25, 2007 (editado) certo, mas o lance de testar "QtdHora = 0" e deixar o QRLabel.Caption = '' - não funcionou?funcionou......porem como ele não tem o valor fora da data que pedi o relatorio...ai não faz conta.?????????????????02.08.2007 23:40 03.08.2007 08:20 ?????05.08.2007 09:00 05.08.2007 19:35 00:4006.08.2007 22:00 07.07.2007 09:40 02:47COMO mostra acima....ele não tem o valor e por isto não tem valor como mostra a sua explicação:If QtdHora = 0 then QRRepouso.Caption := '' // na primeira linha não há diferença elsemas beleza...sem problemas...alias não é problema....valeu...muito gratot+ Editado Outubro 25, 2007 por Eder Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Eder
Ola..pessoal
Tenho que montar um relatorio no quick.....e nele tenho que diminuir a Dta e hora final - Data e hora inicial da ultima viagem.
assim deve ser:
eu teria que mostra no relatorio o total de REPOUSO DO MOTORISTA
o repouso compreende a data e hora inicio da viagem - data e hora final da ultima viagem.
não sei se fui claro....se alguém não entender por favor ......
eu já montei o relatorio só falta mostrar aquela continha do REPOUSO DO MOTORISTA...não sei montar....
paradox campo da tabela tipo (t)timer + delphi 4.
muito Grato :(
Editado por MicheusPara desenhar tabelas, a dica é utilizar a tag CODE e previsualizar o post antes de enviar. ;-)
Link para o comentário
Compartilhar em outros sites
10 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.