Fórum Somar Horas com FireBird ou Com Delphi #492895
20/09/2014
0
Eu tenho uma coluna do tipo TIME, e nela eu recebo o tempo trabalhado de cada funcionário, assim: 00:15:35 ou 01:59:01 e assim por adiante, sendo HH:MM:SS.
Eu quero fazer um select que some estes valores me informando o total de horas que eu trabalhei visando que ao atingir 23:59:59 ele continue para 24:00:00 e não para 00:00:00.
Outra opção seria fazer essa soma pelo Delphi, fazer um select na coluna com as horas e utilizar alguma função nativa do Delphi para somar as horas com a mesma regra acima.
O importante é: Eu preciso fazer essa soma para mostrar em meu relatório.
Utilizo Delphi XE, Firebird 2.5 e Report Builder 14. Quem puder me ajudar ficarei muito agradecido.
OBS: Isto é urgente :D
Marlon Minotti
Curtir tópico
+ 0Post mais votado
20/09/2014
[url]
https://www.devmedia.com.br/data-e-hora-no-firebird/15161
[/url]
[url]
http://firebase.com.br/pipermail/lista_firebase.com.br/2004-October/001149.html
[/url]
[url]
http://www.activedelphi.com.br/forum/viewtopic.php?t=29166&sid=07395e0951b593b90085dd42bd98ab28
[/url]
[url]
http://comments.gmane.org/gmane.comp.db.firebase.portuguese/96022
[/url]
[url]
http://www.arquivodecodigos.net/dicas/firebird-aprenda-a-usar-os-tipos-de-dados-date-time-e-timestamp-do-firebird-3252.html
[/url]
Caso não te ajudar, por favor, sinalizar para que possa ajudá-lo!
Abração e bons códigos!
Emanoel Deivison
Recife - PE
Deivison Melo
Gostei + 1
Mais Posts
22/09/2014
Marlon Minotti
Se você puder me ajudar de forma que atenda o que estou precisando eu ficaria muito agradecido.
Contudo, obrigado pela ajuda até o momento..
Aguardo
Gostei + 0
23/09/2014
Deivison Melo
Gostei + 0
24/09/2014
Tone Costa.
encodeDateTime(data,ano,mes,dia,hora,minuto,segundo);
hora := (hora * 60 * 60) + (minuto * 60) + segundo;
e depois trabalho com esses valores.
Uma Funcao para Transformar Horas em Integer e depois um integer para horas
Gostei + 0
24/09/2014
Marlon Minotti
Temos um sistema de atendimentos.
Ao realizar um atendimento é gravado no banco de dados (Firebird) a data e hora de abertura.
Ao Fechar esse atendimento é gravado a data e hora de fechamento e já calculado o tempo gasto no atendimento. EXEMPLO:
Abri um atendimento às 08:10:15 e fechei às 08:20:30. O tempo gasto em meu atendimento é de 00:10:15.
Mediante este cenário eu preciso fazer um relatório dentro do sistema. Neste relatório eu preciso mostrar informações completas de todos os meus Atendentes. Quantos atendimentos abertos, quantos atendimentos fechados, suspensos, eeeeeeeeeee o Total de Horas Trabalhadas em Atendimentos, ou seja, a soma do TEMPO GASTO EM CADA ATENDIMENTO.
Entendeu? No meu relatório eu preciso somar todos o tempo gasto em cada atendimento. EXEMPLO:
Realizei 5 atendimentos no dia. 1º - 00:15:20, 2º - 00:05:00, 3º - 05:35:50, 4º - 01:01:10, 5º 00:02:00.
A soma de todos esses tempo gasto é: 06:59:20 em Horas/Minutos/Segundos.
Entendeu o meu problema?
Gostei + 0
24/09/2014
Tone Costa.
unit uteste;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function converterDataEmSegundos(Data : TDateTime) : Integer;
function obterTempoUtilizado (value : Integer) : String;
end;
var
Form1: TForm1;
implementation
uses DateUtils;
{$R *.dfm}
{ TForm1 }
function TForm1.converterDataEmSegundos(Data: TDateTime): Integer;
var
ano,mes,dia,hora,minuto,segundo,milisegundo : word;
begin
decodeDatetime(data,ano,mes,dia,hora,minuto,segundo,milisegundo);
// Tempo em Segundos
result := segundo + (minuto * 60) + (hora * 60 * 60) + (ano * DayOfTheYear(data) * 24 * 60 * 60);
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
tempoGasto, ini001, fin001, ini002, fin002, ini003, fin003 : Integer;
begin
// Primeiro atendimento
ini001:= converterDataEmSegundos(StrToDateTime('24/09/2014 08:00:00'));
fin001:= converterDataEmSegundos(StrToDateTime('24/09/2014 09:10:00'));
tempogasto := fin001 - ini001;
ShowMessage(obterTempoUtilizado(tempoGasto));
end;
function TForm1.obterTempoUtilizado(value: Integer): String;
Var
horas, minutos,segundos : Integer;
begin
horas := value div 3600;
value := value - (horas * 3600);
minutos := value div 60;
segundos := value - (minutos * 60);
result := TimeToStr(EncodeTime(horas,minutos,segundos, 0));
end;
end.
Gostei + 0
24/09/2014
Marlon Minotti
Eu não sei.
Gostei + 0
24/09/2014
Marlon Minotti
Deivison, utilizei aquele post do ActiveDelphi.
Se liga no select que resolveu minha vida:
select
atendentee as Atendente,
total as "Total Atendimentos",
Fechados,
Pendentes,
Suspensos,
case when (HORA/3600) < 10 then '0'||(HORA/3600) else (HORA/3600) end ||':'||
case when ((HORA-((HORA)/3600)*3600)/60) < 10 then '0'||((HORA-((HORA)/3600)*3600)/60) else ((HORA-((HORA)/3600)*3600)/60) end ||':'||
case when (HORA - (HORA/3600)*3600 - ((HORA-((HORA)/3600)*3600)/60)*60 ) < 10
then '0'||(HORA - (HORA/3600)*3600 - ((HORA-((HORA)/3600)*3600)/60)*60 ) else
(HORA - (HORA/3600)*3600 - ((HORA-((HORA)/3600)*3600)/60)*60 ) end
from(SELECT s.atendente as atendentee,
count(*) as total,
count(case when s.status = 1 then 1 end) as Fechados,
count(case when s.status = 0 then 1 end) as Pendentes,
count(case when s.status = 2 then 1 end) as Suspensos,
CAST(SUM(
EXTRACT( HOUR FROM s.hora_total ) * 3600 +
EXTRACT( MINUTE FROM s.hora_total ) * 60 +
EXTRACT( SECOND FROM s.hora_total )) AS integer) AS HORA
FROM servicos s where 1=1 group by s.atendente)
Demorei muito pra entender como funcionava essa parada de select dentro de outro, mas entendi. Pode ser que sirva pra alguém.
Abraço pessoal.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)