Ir para conteúdo

POWERED BY:

Arquivado

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

Rachid

Agrupar Informações Tempo de Execução

Recommended Posts

Estou com um problema na hora de gerar informações agrupadas no Delphi, tenho três tabelas TAB_HORAS, TAB_FUNC, TAB_OPERACAO. Gostaria de agrupar as informações da TAB_HORAS, de acordo com o campo nome da Tabela TAB_FUNC, sendo que tenho a IBQuery1 = TAB_HORAS, IBQuery2 = TAB_OPER e a IBQuery3 = TAB_FUNC.

 

Quero que o sistema gere o relatório no word da seguinte forma:

 

Almir ------------------- 52:00:00

Vicente ----------------- 47:00:00

Diego ------------------ 59:00:00

 

-----------------------------------------

 

Total ------------------- 158:00:00

 

Segue abaixo o fonte do meu sistema .:

 

unit UTeste;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, IBDatabase, DB, IBCustomDataSet, IBUpdateSQL, IBQuery, Buttons,  StdCtrls, Mask, Grids, DBGrids, FileCtrl, SHELLAPI, DBCtrls;type  TForm1 = class(TForm)    SpeedButton1: TSpeedButton;    IBDatabase1: TIBDatabase;    IBTransaction1: TIBTransaction;    IBQuery2: TIBQuery;    IBUpdateSQL2: TIBUpdateSQL;    DataSource2: TDataSource;    IBQuery3: TIBQuery;    IBUpdateSQL3: TIBUpdateSQL;    DataSource3: TDataSource;    IBQuery2COD_OP: TIntegerField;    IBQuery2DESCRICAO: TIBStringField;    IBQuery3COD: TIntegerField;    IBQuery3NOME: TIBStringField;    IBQuery3DEPTO: TIBStringField;    IBQuery3TURNO: TIntegerField;    IBQuery1: TIBQuery;    IBUpdateSQL1: TIBUpdateSQL;    DataSource1: TDataSource;    IBQuery1COD: TIntegerField;    IBQuery1DATA_LANC: TDateField;    IBQuery1COD_FUNC: TIntegerField;    IBQuery1COD_TURNO: TIntegerField;    IBQuery1COD_OP: TIntegerField;    IBQuery1DATA_SERV: TDateField;    IBQuery1COD_MAQ: TIntegerField;    IBQuery1INICIO: TTimeField;    IBQuery1FIM: TTimeField;    IBQuery1TOTAL: TTimeField;    IBQuery1NOME: TStringField;    IBQuery1OPERACAO: TStringField;    MaskEdit2: TMaskEdit;    MaskEdit3: TMaskEdit;    ComboBox1: TComboBox;    BitBtn1: TBitBtn;    procedure SpeedButton1Click(Sender: TObject);    procedure BitBtn1Click(Sender: TObject);  private    { Private declarations }  public    procedure ExecFile( F: String);    { Public declarations }  end;var  Form1: TForm1;implementation//Função converter Hora para Segundosfunction Hora_Seg( Horas:string ):LongInt;Var Hor,Min,Seg:LongInt;beginHoras[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 Horasfunction Seg_Hora( Seg:LongInt ):string;Var Hora,Min:LongInt;  Tmp : Double;beginTmp := 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;{$R *.dfm}procedure TForm1.SpeedButton1Click(Sender: TObject); varHEPAG: Integer;TOTALG : String;Arq: Textfile; Beginwith IBQuery1 do  begin    close;    sql.clear;    sql.Add('SELECT *');    //agora  vamos criar parâmetro para query que será    //(DI=data inicial e DF=data final)    sql.Add('FROM TAB_FUNC, TAB_HORAS where');    sql.Add('DATA_SERV>=:DI and DATA_SERV<=:DF');    //sql.Add('TAB_HORAS.COD_FUNC = TAB_FUNC.COD');    sql.Add('ORDER BY TAB_FUNC.NOME');    params[0].Value:=strtodate(maskedit2.Text);    params[1].Value:=strtodate(maskedit3.Text);    open;  end;  //se a query estiver vazia, avisa o usuário  if IBQuery1.IsEmpty then  begin    showmessage('Nenhum informação encontrada!'); exit;  end;  //associa um dispositivo de saída para a variável  if combobox1.Text='WORD' then    assignfile(arq,'c:\MANUTENCAO.doc')  //else if ComboBox1.Text='TXT' then  //  assignfile(arq,'c:\MANUTENCAO.txt')  else    assignfile(arq,'\\christian\EPSONSty');   HEPAG := 0;   IBQuery1.Open;   while ( not IBQuery1.EOF ) do    begin   HEPAG := HEPAG + Hora_Seg( TimeToStr( IBQuery1.FieldByName('TOTAL').Value ) );   IBQuery1.Next;   TOTALG :=(seg_hora(HEPAG));   end;//abrir o dispositivo associado para a escrita  rewrite(arq);  //escreve o título no dispositivo de Saída  writeln(arq,'                                                                                ');  writeln(arq,'                                                                                ');  writeln(arq,'                                                                                ');  writeln(arq,'Emissao .: '+DateToStr(Date)+' - '+TimeToStr(Time));  writeln(arq,'                                                                                ');  writeln(arq,'                                                                                ');  writeln(arq,'                         RELATORIO DE HORAS MANUTENCAO');  writeln(arq,'--------------------------------------------------------------------------------');  writeln(arq,'                                                                                ');  //coloca o cursor no primeiro registro  IBQuery1.First;  //imprime o cabeçalho, ou seja coloca-se os campos a serem impressos.  //colocarei apenas três campos como exemplo, onde  //Campo1, Campo2 e Campo3 poderia ser Codigo, Data_Nacimento e Nome.  writeln(arq,'OPERACAO               HORAS_TOTAL');  //Enquanto não chegar o fim dos dados da query, não para de escrever  while not IBQuery1.Eof do    begin    //imprime o registro atual    Writeln(arq,IBQuery3NOME.Value+'               '+TOTALG);    //vai ao próximo registro    IBQuery1.Next;    end;  //fecha o acesso ao dispositivo de saída  closefile(arq);end;{procedure TForm1.SpeedButton5Click(Sender: TObject);beginMaskEdit1.Text:='';MaskEdit2.Text:='';ComboBox1.Text:='';close;end;}procedure TForm1.ExecFile(F: String);varr: String; begin case ShellExecute(Handle, nil, PChar(F), nil, nil, SW_SHOWNORMAL) ofERROR_FILE_NOT_FOUND: r := 'The specified file was not found.'; ERROR_PATH_NOT_FOUND: r := 'The specified path was not found.'; ERROR_BAD_FORMAT: r := 'The .EXE file is invalid (non-Win32 .EXE or error in .EXE image).'; SE_ERR_ACCESSDENIED: r := 'Windows 95 only: The operating system denied access to the specified file.'; SE_ERR_ASSOCINCOMPLETE: r := 'The filename association is incomplete or invalid.'; SE_ERR_DDEBUSY: r := 'The DDE transaction could not be completed because other DDE transactions were being processed.'; SE_ERR_DDEFAIL: r := 'The DDE transaction failed.';SE_ERR_DDETIMEOUT: r := 'The DDE transaction could not be completed because the request timed out.'; SE_ERR_DLLNOTFOUND: r := 'Windows 95 only: The specified dynamic-link library was not found.'; SE_ERR_NOASSOC: r := 'There is no application associated with the given filename extension.';SE_ERR_OOM: r := 'Windows 95 only: There was not enough memory to complete the operation.'; SE_ERR_SHARE: r := 'A sharing violation occurred.'; else Exit; end; ShowMessage®;end;procedure TForm1.BitBtn1Click(Sender: TObject);beginExecFile('c:\MANUTENCAO.doc');end;end.

Preciso resolver isso o mais rápido possível, alguém se habilita ???

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rachid, seja muito bem vindo ao fórum iMasters! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Antes de tudo é importante que leia as Regras do Fórum iMasters

 

Aguarde até que alguém ajude você, não precisa criar outro tópico.

O seu outro tópico, idêntico a esse aqui foi excluído.

 

Qualquer dúvida, por favor, entre em contato.

 

[]´s http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.