Fórum Soma de campo do tipo time no QRExpr #430946
13/12/2012
0
Olá, pessoal!
Estou usando o PostgreSQL e tentando colocar o somatório de horas trabalhadas (no período) no componente citado;
Coloquei na propriedade Expression o seguinte: sum(query_tbpontos.campo_hrtotal,0.0).
Sou novato, devo estar esquecendo algo ou fazendo errado.
Agradeço a ajuda que alguém puder dar.
Estou usando o PostgreSQL e tentando colocar o somatório de horas trabalhadas (no período) no componente citado;
Coloquei na propriedade Expression o seguinte: sum(query_tbpontos.campo_hrtotal,0.0).
Sou novato, devo estar esquecendo algo ou fazendo errado.
Agradeço a ajuda que alguém puder dar.
Open Informática
Curtir tópico
+ 0
Responder
Posts
13/12/2012
Claudia Nogueira
Não é tão simples somar esse tipo de campo, tem que fazer umas gambis.
Vou te passar um exemplo:
Vamos supor que eu tenha um relatório somente com duas band, uma para o detalhe e outra para o rodapé que vou usar pra totalizar as horas.
Vamos supor que eu tenha um campo do tipo Time chamado horas_trabalhadas.
Declara essa variável no Private: HORAS_TRABALHADAS : Integer;
Coloca essas duas funções no seu projeto em algum lugar:
Coloca isso no BeforePrint da banda detalhe:
Isso no BeforePrint da banda Footer:
Na band footer tem que ter uma QRLabel com name = QRLabel4.
Vou te passar um exemplo:
Vamos supor que eu tenha um relatório somente com duas band, uma para o detalhe e outra para o rodapé que vou usar pra totalizar as horas.
Vamos supor que eu tenha um campo do tipo Time chamado horas_trabalhadas.
Declara essa variável no Private: HORAS_TRABALHADAS : Integer;
Coloca essas duas funções no seu projeto em algum lugar:
function TForm2.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;
function TForm2.Seg_Hora(Seg: Integer): 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;
Coloca isso no BeforePrint da banda detalhe:
procedure TForm2.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
HORAS_TRABALHADAS := HORAS_TRABALHADAS + Hora_Seg( TimeToStr( Tabela.FieldByName('HORAS_TRABALHADAS').AsDateTime ) );
end;
Isso no BeforePrint da banda Footer:
procedure TForm2.PageFooterBand1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin QRLabel4.Caption := (seg_hora(HORAS_TRABALHADAS)); HORAS_TRABALHADAS := 0; end;
Na band footer tem que ter uma QRLabel com name = QRLabel4.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)