Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mauro Sergio Nascimento

Tempo de permanencia de funcionári

Recommended Posts

Boa noite, estou enfrentando problemas sérios pra calcular o tempo de permanencia de marinheiro na marina, conforme abaixo:

 

=========================================================

CREDENCIAL ENTRADA SAÍDA PERMANÊNCIA HS/DIA

=========================================================

DATA: 01/07/2009

600106 01/07/2009 08:02:00 01/07/2009 11:45:23 03:43:23

600106 01/07/2009 13:09:16 01/07/2009 15:43:09 02:33:53

 

SUB-TOTAL: 05:76:76

Problemas enfrentados:

 

a) Preciso somar o tempo de permanencia por dia que é obtido através de consulta SQL retirado do banco de dados da DIMEP. Para tal inseri o seguinte codigo no evento After Open de uma Stored Procedure, conforme a seguir:

 

procedure TfrmRelVisitaPeriodo.sspAfterOpen(DataSet: TDataSet);
var
  x: TTime;
begin
  x:=strtotime('00:00:00');
  while not ssp.Eof do begin
        x:=x+strtotime(ssp.FieldValues['Tempo_Permanencia']);
        ssp.Next;
        end;
  lbteste.caption:=timetostr(x);
end;

>> O tempo aparentemente é calculado sem problemas, o que ocorre é que quando passa de 24 horas de permanência, não consigo exibir em dias + horas + minutos + segundos, o resultado exibido é apenas no formato 00:00:00 (hh:mm:ss). Alguém sabe como posso corrigir isso, existe algum componente?

 

2) Esse grid gera um relatorio no RAVE, agrupado por dia, conforme podemos ver acima. O problema é que inseri um campo CALCTEXT com a propriedade Field: STRTOTIME(TEMPO_PERMANENCIA). O problema é que a coluna está em formado string e a soma não está sendo feita em formato de horas.

 

Tentei varias soluções e venho solicitar a ajuda e compaixão de vocês. rs.

 

Eternamente grato,

 

 

Mauro Sérgio

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte:

 

procedure EntreDatas(DataFinal, DataInicial: TDate; var Anos, Meses, Dias: Integer);
  function Calcula(Periodo: Integer): Integer ;
  var
    intCont: Integer ;
  begin
    intCont := 0 ;
    repeat
      Inc(intCont) ;
      DataFinal := IncMonth(DataFinal,Periodo * -1) ;
    until DataFinal < DataInicial ;
    DataFinal := IncMonth(DataFinal,Periodo) ;
    Inc(intCont,-1) ;
    Result := intCont ;
  end;
begin
  if DataFinal <= DataInicial then
  begin
    Anos := 0 ;
    Meses := 0 ;
    Dias := 0 ;
    exit ;
  end;
  Anos := Calcula(12) ;
  Meses := Calcula(1) ;
  Dias := Round(DataFinal - DataInicial);
end;

para Usar

 


Var 
    n1,n2, calculo :real;
    aAnos, aMeses, aDias: integer;
begin
                  n1:= StrToDateTime( Edit1.Text + ' ' + Edit2.Text );
                  n2:= StrToDateTime( Edit3.Text + ' ' + Edit4.Text );
                  calculo:=n2-n1;
                  EntreDatas(dtfim.datetime, dtini.datetime, aAnos, aMeses, aDias);
                  Edit6.Text := TimeToStr(calculo) + ' horas e ' + IntToStr(aDias) + ' dias';
end;

T++++

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.