
Eder
Membros-
Total de itens
1.002 -
Registro em
-
Última visita
Tudo que Eder postou
-
Ola...Micheus...Obrigado pela explanação...vou dar uma estudada sim no que parece ser um banco de ótima performace (firebird) já tinha ouvido falar sobre ele muito bem. Só algumas dúvidas, você que há muito tempo lida com eles: Qual a diferença por exemplo entre o Paradox e o Firebird?? Parece que o Paradox é ponto de brincadeira quando fala-se em banco de dados. Eu uso ele a algum tempo e posso dizer que nunca tive problemas com ele...exceto quando a tabela fica grande então ele fica um pouco lento, mas no demais pra mim é bom, talvez porque eu tenho programas que no máximo são usados por 3 usuários..sei lá. Uma outra dúvida...no firebird tenho que criar as tabelas tudo no braço, atraves de comandos SQL??não existe um Database Desktop da vida?? tipo existe no paradox... Pelo que andei lendo ontem e hoje...parece que pra lidar com bancos tipo o firebird tenho que entender muito bem de instruções SQL. Mais uma.....hehehe...as dúvidas são mtas. No Paradox tenho o tal do bde e no firebird, parece que tenho que instalar ele na maquina do cliente..é isto? Bom é isto...muito grato pelas dicas t+ ;)
-
Ola..pessoal Eu só trabalhei com Paradox até hoje...e gostaria de aprender a mexer com outro Banco de Dados. já ouvi falar no PostGre, Firebird e MySql, dizem que são bons e são Free. Pergunte a vocês que entendem. Qual destes bancdos de dados é mais fácil de mexer e que se aproxima ao paradox(na maneira de trabalhar)...pois como vou tentar aprender sozinho não queria ter algo muito diferente a maneira de trabalhar como é no paradox(que é facil). Tipo no paradox eu crio minhas tabelas no Database DeskTop, em outro banco tem alguma ferramenta pra criar as tabelas....?? Bom é isto ai..se alguém puder dar uma explanada sobre este assunto...agradeço muito Grato t+
-
Ok...Carinha..deu certo. Valeu...muito Grato. t+ :D
-
Ola..pessoal...tenho que fazer uma rotina envolvendo contagem de horas....eu até fiz um if...mas é muito trabalhoso.....acho que teria uma maneira de fazer com codigo mais enxuto e simples..mas não to conseguindo montar o codigo. fiz assim atraves de if...funcionar perfeito: procedure TForm1.Button1Click(Sender: TObject); var HrTotal : TdateTime; begin HrTotal:=STRTOTIME(Maskedit1.Text); // If Hrtotal <= StrToTime('12:00:00') then Begin Maskedit2.Text:=('09:00:00'); Exit; end; {se for hora superior a 12:00:00 ele paga 09:00:00 e assim por diante como esta abaixo até zerar a hora do maskedit2 } If Hrtotal = strtotime('12:01:00') then Begin Maskedit2.Text:=('08:59:00'); end; If Hrtotal = strtotime('12:02:00') then Begin Maskedit2.Text:=('08:58:00'); end; If Hrtotal = strtotime('12:03:00') then Begin Maskedit2.Text:=('08:57:00'); end; If Hrtotal = strtotime('12:04:00') then Begin Maskedit2.Text:=('08:58:00'); end; end; é como esta no codigo acima o raciocinio...mas note que fiz um if pra verificar as horas minutos e dizer o que vai receber no maskedit2 mas é muito codigo...acho que um contador resolveria... O racioncinio é a cada minuto que o camarada chega atrazado ele é penalizado(descontado) O Problema é como fazer...alguma dica?? muito Grato
-
valeu....carinha muito grato :D
-
if table1.field[0] = '' then messagedlg(Placa não encontrada!! Tente novamente!', mtInformation, [mbOk], 0); else begin table1.IndexFieldNames := ''; DbEdit2.SetFocus; end; R.:Felipe não deu certo!! R.: Este Post ta com problemas...não consigo acessar :(
-
Ola.. eu tenho esta pequena consulta em cima da tabke(paradox) Porem quando ela acha algo me mostra o proprio registro na tela....mas quando não acha não me retorna nada... Eu gostaria que me retornasse pelo menos uma mensagem dizendo que nada foi encontrado. o codigo que estou usando é este abaixo: se tiver alguma outra forma também agradeço.....mas teria que ser com Table. muito Grato
-
Valeu..Pessoal..muito Grato t+ :D
-
Ola..pessoal eu gostaria de saber como faço um if tipo este abaixo... Mas este abaixo não funciona ta errado.. IF FORM5.USUARIO.CAPTION = 'CARLOS' THEN BEGIN DBNavigator1.VisibleButtons.nbdelete:=True else DBNavigator1.VisibleButtons.nbdelete:=false end; O que eu queria é só deixar o visible=true do botão NbDeleti pro Carlos o restante FALSE mas eu queria no codigo.... ta pra fazer?? muito grato
-
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
Carinha...deu certo.....alias eu tinha respondido no anterior...quanto ao modelo antigo até disponibilizei a unit pra caso alguém viesse a pricisar....só faltava esta parte do seu modelo(query sql)mas também deu certo.......parece que eu e você estavamos editando junto e você largou primeiro a resposta...pois isto....e eu tava editando a resposta de manhã pois achei o totalizador da Banda sumary agora a tarde. O Importante é que deu certo.....nos dois exemplos valeu...mais uma vez... Grato Fechamos o tópico...t+ :D -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
R. Sim...olhei, estudei e tentei fazer o seu exemplo ontem a noite e hoje de manhã....no seu exemplo encalhei no codigo da query, deu erro: SELECT MOTORIS.NOME, MOTORIS.CODMOT, VIAGEM.HE_DIURNA, VIAGEM.DATA_SAIDA, VIAGEM.CODLAN, AJUSTE.CODIGO, AJUSTE.CODMOT, sum(extract(hour from HE_DIURNA)+(extract(minute from HE_DIURNA)/60)+(extract(second from HE_DIURNA)/3600)) as Total_Horas FROM MOTORIS, VIAGEM, AJUSTE where (ajuste.codigo = viagem.codlan) and (ajuste.codmot = motoris.codmot) group by motoris.nome, viagem.data_saida order by motoris.nome da erro: whem gruup by exists, every simple field in projetour must be un Group by **Agora no Modelo Antigo que eu já estava usando eu consegui totalizar as horas na BandSumary....estudei o seu exemplo e ai deu certo Segue abaixo a minha unit do relatorio para caso alguém necessite de um modelo:Sendo assim este tópico vai ficar completo, vai ter dois modelos pra calcular horas. ;) vai ajudar bastante usuários do forum. Segue abaixo Unit: unit UnitRelHE2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Qrctrls, QuickRpt, ExtCtrls, Db, DBTables, StdCtrls, ComCtrls; type TFormRel_HE2 = class(TForm) Query1: TQuery; QuickRep1: TQuickRep; QRGroup1: TQRGroup; QRDBText8: TQRDBText; QRLabel28: TQRLabel; QRBand7: TQRBand; QRLabel58: TQRLabel; QRExpr3: TQRExpr; QRBand9: TQRBand; QRImage1: TQRImage; QRLabel15: TQRLabel; QRSysData4: TQRSysData; QRSysData5: TQRSysData; QRLabel1: TQRLabel; QRLabel26: TQRLabel; QRBand5: TQRBand; QRDBText10: TQRDBText; QRDBText27: TQRDBText; QRDBText29: TQRDBText; QRDBText32: TQRDBText; QrLDiurna: TQRLabel; QRBand1: TQRBand; QRLabel2: TQRLabel; QRLabel3: TQRLabel; QRLabel20: TQRLabel; QRLabel6: TQRLabel; QRLabel22: TQRLabel; QRLabel5: TQRLabel; QRLabel7: TQRLabel; QRLabel8: TQRLabel; QRLabel9: TQRLabel; QrLNoturna: TQRLabel; QrLPagadora: TQRLabel; QRDBText1: TQRDBText; QRLabel4: TQRLabel; QRBand2: TQRBand; Button1: TButton; QRLabel10: TQRLabel; QRLabel11: TQRLabel; QRLabel12: TQRLabel; Query1Codigo: TIntegerField; Query1Codlan: TIntegerField; Query1CodMot: TIntegerField; Query1CodMot_1: TIntegerField; Query1Nome: TStringField; Query1He_Diurna: TTimeField; Query1He_Noturna: TTimeField; Query1He_Pagadora: TTimeField; procedure QRBand5BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); procedure QRBand7BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); procedure QRBand2BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); procedure Button1Click(Sender: TObject); procedure QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); procedure QRGroup1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); private {VARIAVEIS QUE ARMAZENA AS HORAS horas diurnas, noturnas e pagadora que seria a soma da diruna + noturna} DIURNA, NOTURNA, PAGADORA : Integer; {abaixo as totalizadoras da bandaSumary} DIURNA_SUMARY, NOTURNA_SUMARY, PAGADORA_SUMARY : Integer; { Private declarations } public { Public declarations } end; var FormRel_HE2: TFormRel_HE2; implementation uses UnitRelMedia; {$R *.DFM} //Função converter Hora para Segundos function 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; {Banda Detail} procedure TFormRel_HE2.QRBand5BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin {Abaixo recebe os valores da tabela} DIURNA := DIURNA + Hora_Seg( TimeToStr( Query1.FieldByName('HE_DIURNA').AsDateTime ) ); NOTURNA := NOTURNA + Hora_Seg( TimeToStr( Query1.FieldByName('HE_NOTURNA').AsDateTime ) ); PAGADORA := PAGADORA + Hora_Seg( TimeToStr( Query1.FieldByName('HE_PAGADORA').AsDateTime ) ); end; {Abaixo é a RbGroupFooter} procedure TFormRel_HE2.QRBand7BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin {abaixo totaliza a bandSumary} Diurna_Sumary := Diurna_Sumary + DIURNA; Noturna_Sumary := Noturna_Sumary + Noturna; Pagadora_Sumary := Pagadora_Sumary + Pagadora; {Abaixo Totaliza a Banda GRoupFooter de Cada Funcionario.} QRLDiurna.CAPTION:=(seg_hora(DIURNA)); QRLNoturna.CAPTION:=(seg_hora(NOTURNA)); QRLPagadora.CAPTION:=(seg_hora(PAGADORA)); end; {banda Sumary} procedure TFormRel_HE2.QRBand2BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin {Abaixo os totalizadores da BandSumary} QRLABEL10.CAPTION:=(SEG_HORA(DIURNA_SUMARY)); QRLABEL11.CAPTION:=(SEG_HORA(NOTURNA_SUMARY)); QRLABEL12.CAPTION:=(SEG_HORA(PAGADORA_SUMARY)); end; procedure TFormRel_HE2.Button1Click(Sender: TObject); begin {codigo sql da Query: SELECT Ajuste.Codigo, Viagem.Codlan, Ajuste.CodMot, Motoris.CodMot, Motoris.Nome, Viagem.He_Diurna, Viagem.He_Noturna, Viagem.He_Pagadora FROM AJUSTE, VIAGEM, MOTORIS where (ajuste.codigo = viagem.codlan) and (ajuste.codmot = Motoris.codmot) order by motoris.nome } {ativa aquery e manda o Preview} QUERY1.Active:=TRUE; QUICKREP1.PREVIEW; end; procedure TFormRel_HE2.QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); begin //Limpa as Variaveis totalizadoras da BandSumary DIURNA_SUMARY := 0; NOTURNA_SUMARY := 0; PAGADORA_SUMARY := 0; end; {Abaixo é a QRGroup1} procedure TFormRel_HE2.QRGroup1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin //Limpa as Variaveis totalizadoras da GroupFooter DIURNA := 0; NOTURNA := 0; PAGADORA := 0; end; end. Valeu....Abraço. ;) -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
Carinha...consegui abrir sim o zip.....tentei montar um exemplo conforme os meus dados..e me perdi......hehehe...achei um pouquinho dificil....hehehe.....mas prometo que vou dar uma olhada mais com tempo na semana que vem....mas quanto ao modelo de relatório que você montou..é isto mesmo....ficou show...basta agora eu pegar e tentar entender...com tempo vou pegando o esquema..pois você colocou em cada linha de codigo o que estava fazendo. valeu ..Carinha...muito grato pelo esforço. Com certeza a sua dica vai ser muito útil, pois o tipo de relatorio é muito usado. Abraço :D CARINHA.....tava também vendo este seu comentário sobre a ideia que a gente tava discutindo antiga. De eu totalizar a banda sumary....com todas as horas do relatorio...você diz que: Então resolvi tentar também fazer...só que o resultado na bandaSumary da o valor total do ultimo funcionario...e NÃO DA O VALOR TOTAL DE HORAS DO RELATORIO. fiz como você mencionou coloquei uma outra variavel......e fiz igualzinho ao Total de cada funcionario..só que ao invés de colocar este codigo abaixo na GroupFooter coloquei na QRBand1BeforePrint da SUMARY... QRLABEL2.CAPTION:=(seg_hora(HESUMARY)); se não der......vou ter que abandonar este modelo e caminhar para o seu.......só que eu queria terminar este pra não ficar no meio do caminho entende....?? ai na semana quem vem vou entrar de cara no seu modelo..achei também interessante pois ele é dois em um. t+..Abraço..agora vou ver um Dvd..da uma relaxada.....hehehe.. -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
Carinha...desculpe a demora em responder...meu delphi na empresa deu pau......e agora tenho que reinstalar tudo de novo..componentes..etc....echiiiii... Mas tentei baixar e ver o seu exemplo aqui em casa..porem ao baixar...tinha dentro do zip um arquivo desconhecido..e não consegui ver.. Poderias dar uma olhadinha neste seu zip? Fico no aguardo...abraço e muito grato :D -
Ola..pessoal meu Database Desktop esta dando erro ao abrir. por favor vejam a imagem: Do Nada apareceu este erro ao iniciar o programa Database desktop. muito Grato
-
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
carinha.....não deu certo não... defina a propriedade Enabled=False da banda detail; se você desabilitar esta band ele...não mostra as horas..fica zerado. Outra coisinha...a questão de colocar o QrDbtext na GroupFooter também não deu certo. Mas beleza...eu fiz com aquele jeitinho que te falei e funcionou... FormRel_HE2.QRBand5.Height:=0;//bandDetail isto faz com que a bandDetail seja reduzida a zero e funcionando, apenas não aparece. ;) Eu só queria ver com você...é um totalizador na BandSumary..que não to conseguindo fazer. Lembra que fomos até a rbGroupFooter?? muito Grato... :D -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
R.: Sim. R.: Sim.....também funciona...beleza. Carinha...tentei inserir Na bandSumary...UM TOTALIZADOR FINAL no relatório, mas não to conseguindo fazer com que pegue o valor total de HORAS EXTRAS num QrLabel. Qual o segredo?? muito Grato -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
Amigão...Bingo Ótima explicação, nunca ninguém havia me explicado este processo sobre o quick muito Agradecido. Funcionou direitinho... Carinha...só pra fechar....este relatorio devido ao layout eu costuma chama-lo de analitico, acredito que você também..pois ele abre o nome do funcionario, logo apos lista na banda detail as horas e na Groufooter ele totaliza..beleza..show. Mas pra fazer ele ficar Sintetico, ou seja uma lista exemplo: funcionario------hora extra ================= jose......................10:00:00 maria....................20:30:00 carla.....................10:15:00 --------------------------------- total......................40:45:00 bem simples....ele abre o relatorio com o nome do funcionario e ao lado lista as horas...bem simples no formato..pra economizar papel, senão vai sair analitico e vai um monte de folhas...e o cara do RH vai enxer o saco....rs......só precisaria mesmo do total de horas extras. Tentei adaptar aqui...até achei uma solução pra quebrar um galho, nem precisa mexer muito no form do quick..apenas peguei a bandDetail e coloquei a propriedade Height=0 e deletei todos os qrdbtext dela....ficou legalzinho.....mais ainda não seria o ideal como mostrei o layout acima. ficou assim: -------------------------------------- FUNCIONARIO: JOSE QT DE HE.....................10:00:00 FUNCIONARIO: MARIA QT DE HE.....................20:30:00 FUNCIONARIO: CARLA: QT DE HE.....................10:15:00 -------------------------------------- total............................40:45:00 Mas ...beleza....já ta de bom tamanho a força que você me deu.. muito Grato..... Abraço ;) :D -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
Amigão..fiz o que me indicou...mas não deu certo NÃO..Acho que esta variavel HEPAG não ta zerando ....favor dar uma reparadinha abaixo e ver se fiz algo de errado: Haaa...depois destas mudanças o relatorio ficou faltando funcionario...agora só aparece o primeiro ...mas como o total de horas de todos juntos. R. OK. private HEPAG: Integer; //variavel que armazena a hora { Private declarations } de modo que você possa utilizá-lo nos seguintes pontos: - no GroupHeade, você inicializa (zera) ela; public { Public declarations } end; Resposta: procedure TForm2.QRGroup1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin HEPAG := 0; end; procedure TForm2.QRBand5BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin Query1.Open; while ( not Query1.EOF ) do begin HEPAG := HEPAG + Hora_Seg( TimeToStr( Query1.FieldByName('HE_DIURNA').AsDateTime ) ); Query1.Next; end; end; procedure TForm2.QRBand7BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin QRLABEL4.CAPTION:=(seg_hora(HEPAG)); end; R. Ok. foi erro meu mesmo. R. Achei este mais facil o entendimento. A unit completa segue abaixo: unit Unit2; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Qrctrls, QuickRpt, ExtCtrls, Db, DBTables, StdCtrls; type TForm2 = class(TForm) Query1: TQuery; Query1CODIGO: TIntegerField; Query1DATA: TDateField; Query1CODVEI: TIntegerField; Query1CODMOT: TIntegerField; Query1DTSAIDA: TDateField; Query1DTCHEGADA: TDateField; Query1KMINICIAL: TFloatField; Query1KMFINAL: TFloatField; Query1KMPER: TFloatField; Query1OBSERVACAO: TStringField; Query1LUSUARIO: TStringField; Query1ADIANTAMENTO: TFloatField; Query1LDATA: TStringField; Query1LHORA: TStringField; Query1CODIGO_1: TIntegerField; Query1DATA_SAIDA: TDateField; Query1HR_SAIDA: TTimeField; Query1DATA_CHEGADA: TDateField; Query1HR_CHEGADA: TTimeField; Query1PESO: TFloatField; Query1HE_PAGADORA: TTimeField; Query1HE_NOTURNA: TTimeField; Query1HE_DIURNA: TTimeField; Query1CODLAN: TIntegerField; Query1CODROT: TIntegerField; Query1TIPO_HORA: TStringField; Query1CONTADOR: TIntegerField; Query1TOTAL_HORAS: TTimeField; Query1CODMOT_1: TIntegerField; Query1NOME: TStringField; Query1CARGO: TStringField; Query1SALARIO: TFloatField; QuickRep1: TQuickRep; QRGroup1: TQRGroup; QRDBText8: TQRDBText; QRLabel28: TQRLabel; QRBand7: TQRBand; QRLabel58: TQRLabel; QRExpr3: TQRExpr; QRExpr6: TQRExpr; QRExpr7: TQRExpr; QRExpr8: TQRExpr; QRExpr9: TQRExpr; QRBand9: TQRBand; QRImage1: TQRImage; QRLabel15: TQRLabel; QRSysData4: TQRSysData; QRSysData5: TQRSysData; QRLabel16: TQRLabel; QRLabel65: TQRLabel; QRLabel20: TQRLabel; QRLabel67: TQRLabel; QRLabel22: TQRLabel; QRLabel1: TQRLabel; QRLabel26: TQRLabel; QRBand5: TQRBand; QRDBText10: TQRDBText; QRDBText27: TQRDBText; QRDBText29: TQRDBText; QRDBText32: TQRDBText; QRDBText33: TQRDBText; QRDBText34: TQRDBText; QRDBText35: TQRDBText; QRDBText36: TQRDBText; QRDBText37: TQRDBText; QRDBText38: TQRDBText; QRDBText39: TQRDBText; Button1: TButton; QRLabel4: TQRLabel; procedure Button1Click(Sender: TObject); procedure QRGroup1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); procedure QRBand5BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); procedure QRBand7BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); private HEPAG: Integer; //variavel que armazena a hora { Private declarations } public { Public declarations } end; var Form2: TForm2; implementation {$R *.DFM} //Função converter Hora para Segundos function 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; procedure TForm2.Button1Click(Sender: TObject); begin QUERY1.ACTIVE:=TRUE; QuickRep1.Preview; end; procedure TForm2.QRGroup1BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin HEPAG := 0; end; procedure TForm2.QRBand5BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin Query1.Open; while ( not Query1.EOF ) do begin HEPAG := HEPAG + Hora_Seg( TimeToStr( Query1.FieldByName('HE_DIURNA').AsDateTime ) ); Query1.Next; end; end; procedure TForm2.QRBand7BeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin QRLABEL4.CAPTION:=(seg_hora(HEPAG)); end; end. muito Grato :) -
[resolvido] Somar Campo Timer (horas Extras) Paradox
pergunta respondeu ao Eder de Eder em Delphi, Kylix
R.:Carinha eu já to gravando hh:mm:ss Eu Não consigue montar o relatorio...conforme sua dica. Ai Pesquisando na Net e em foruns...achei uma função que seria ideal: //Função converter Hora para Segundos function 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; Codigo Usado no belorePrint do Quickrep1: procedure TForm2.QuickRep1BeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean); var HEPAG: Integer; begin HEPAG := 0; Query1.Open; while ( not Query1.EOF ) do begin HEPAG := HEPAG + Hora_Seg( TimeToStr( Query1.FieldByName('HE_DIURNA').AsDateTime ) ); Query1.Next; QRLABEL4.CAPTION:=(seg_hora(HEPAG)); end; end; O codigo acima funciona legal no caso se eu mandar listar as horas de um periodo.. Mas no meu caso eu preciso mostra por funcionario acumulado tipo assim: e ai não to conseguindo mostrar os totais de cada hum. tentei fazer assim o relatorio: mario he 02:00:00 08:00:00 total.....10:00:00 Jose he 10:30:00 05:30:00 total......15:30:00 mas o resultado sai assim: mario he 02:00:00 08:00:00 total......25:30:00 Jose he 10:30:00 05:30:00 total......25:30:00 note que o resultado(total) é igual, pois o codigo me mostra o total de horas de todos...não de cada um. Algo devo estar fazendo incorredo. estou usando assim as Bandas: 1-banda QRGroup Expression=QUERY1.funcionario Footerband=a bandaGroupFooter 1-Detail=com o campo de funcionario e o campo de Horas 1-RbGroupFooter Nela o QrLabel4 mostrando os totais de horas de cada funcionario Um relatorio muito simples...mas como é com horas...to me quebrando...e não to conseguindo resolver. Amigão...se puder me dar uma forcinha te agradeço. Grato :( -
Ola...pessoal Eu preciso montar um relatorio de horas extras.....sintetico, ou seja, totalizar quantos horas extras o camarada fez num periodo. Eu sei fazer o layout pra este tipo de relatorio, só não to conseguindo somar estas horas. Se eu fosse somar digamos ou campo numerico eu apenas utilizaria assim: SUM(query1.SALARIO) e pronto....já me traria o SALARIO acumulado por funcionario(COMO exemplo). Mas como na tabela eu to trabalhando com campo Timer(HORAS EXTRAS)...ai ele não me traz nada coloquei assim: SUM(query1.hora_extra) alguém poderia me dizer como é que eu mostraria a soma das horas no quick?? Grato
-
Carinha....finalmente...deu certo...não exatamente como você me instruiu....mas acabei mexendo no componente Qrexp, que fazia a totalização da banda QrSubDetail1, e mudando apenas a propriedade deste componente chamada Master=QRSubDetail1 e também mudei o outro qrexp que totalizava a banda QrSubDetail2 ...coloquei Master=QRSubDetail2....ambas estavão apontadas pra quickrep1, por isto que sempre o total era 1..porque realmente se estava pra o quickrep1 teria que dar 1 mesmo...pois o filtro era 1 veiculo. Mas Beleza..muito Grato pela ajuda....mais uma vez...valeu. :D
-
amigão..me enrrolei...rs. algumas perguntinhas pra entender: 1-quando você se refere a uma group....é a bandtype=RBGroupHeader das QrBand( ou é a QRGROUP? da paleta quickreport) 2-você diz que:Esta seria a sua banda SubDetail ligada ao dataset Abastecimentos e com a propriedade GroupHeader apontando para o groupband anterior e FooterBand apontando para a banda footer mais abaixo. R. Mas esta SubDetail é a da bandtype=rbsubdetail ou ( ou é a QRSUBDETAIL? Da peleta quickreport) valeu.....muito Grato
-
R.: Sim já respondi lá. R.: Ok... valeu...até no outro tópico...Grato :D
-
Desculpe a demora em responder...tava muito ocupado estes dias atraz.. :) R.: Não...eu só tenho uma Banda Group e 2 QRSubDetail SubDetail e não adicionei... Amigão..afinal na sua opinião...quais as bandas e quais as ligações devo usar pra montar este relatorio? Eu estou usando como menciono lá em cima deste tópico....Parece que é diferente do seu raciocionio Grato :(
-
Ola..pessoal tou com uma dúvida pois nunca fiz um relatorio assim: tenho um relatorio onde mostra a PLACA do veiculo e abaixo todos os seus ABASTECIMENTOS. o relatorio funciona legal assim: coloquei nele pra funcionar: tudo certinho...o relatorio..... mas agora alem de listar os ABASTECIMENTOS eu preciso lançar no mesmo relatorio as DESPESAS Da placa...logo abaixo dos abastecimentos....Mas ai eu não sei quais bandas incluir.....neste caso é uma outra tabela...que traz estas despesas. alguém poderia me dar uma dica? muito Grato