Re: [delphi-br] Re: DIAS ÚTEIS
Fiz Assim, utilizando a Ve_Feriado() enviada anteriormente. Funciona, mas está demorando um pouco ! (Bom já é uma solução) Ela vai somando 1 enquanto não é Finais de Semana e Feriados Alguém tem alguma dica para melhorar isto...? Vejam: Function ACHA_DATA_DU( dDatini: TDateTime ; du : Integer) : TDateTime; var i: Integer; dDatvenc:TDateTime; Year, Month, DayIni, DayFin, DofWe : Word; nDiaCorr, nSinal, nFimSem, wFer : Real; begin wFer := 0; dDatvenc := dDatini; for i := 1 to du do Begin ddatvenc := (ddatvenc+1); //* Verifica se é feriado ** While Ve_Feriado(dDatVenc) Do While EhFeriado(dDatVenc) Do Begin ddatvenc := (ddatvenc+1); End; //* Verifica se é dia da semana (segunda a sexta) * Dofwe := DayOfWeek(dDatvenc); if Dofwe = 07 then// Sábado dDatvenc := dDatvenc+2 else if Dofwe = 01 then// Domingo dDatvenc := dDatvenc+1; //Quando forem feriados consecutivos (Ex: Carnaval) While Ve_Feriado(dDatVenc) Do begin dDatvenc := (dDatvenc+1); end; End; Result := dDatVenc; end; Abraços - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 5:43 PM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Este método, não dará o resultado esperado, pois o resultado de MinhaDataInicial+30 são dias corridos e não dias úteis. Acho que não entendeste... Preciso, somar somente Dias Úteis à uma Data e achar que dia cairá: Ex: Hoje: 02/12/2004 + 30 = 13/01/2005 Tb. acho que não é feriado, nunca tive muita certeza. O que sei é que para os Bancos/Financeiras/Etc... não é um dia útil. Acho que estou chegando a solução de todo o problema. Vou testar, se der certo, aviso. [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 3:19 PM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Rogerio, 1) Quanto a 2a feira de Carnaval - No que me consta não é feriado e sim ponto facultativo (pelo menos é o que sei, caso esteja errado, desculpe-me). Caso seja realmente feriado, basta vc alterar a função e incluir. 2) Chame a função assim: MinhaDataInicial = StrToDate('01/10/2004'); MinhaNovaData:=MinhaDataInicial+QtdDiasUteis(MinhaDataInicial, MinhaDataInicial+30); Não testei, mas acredito que seja isto o que vc esta querendo [ ]´s Moacir - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 11:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Td. Bem mas... O que estamos comentando é : :- dada uma Data e, um Número de Dias Úteis, achar a Data Final. Novamente: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Outro detalhe, acho que tem alguns feriados (dias não úteis) que não estão sendo considerados. Ex.: - Segunda Feira de Carnaval Valeu. [ ]'s -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
voltei para olhar esta dia abaixo e Pelo que pude notar, a dateutil.pas é da RxLib ??? Estou Certo ??? Se for, infelismente não poderei utilizar esta funcionalidade. - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 11:59 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Rogerio/Moita, Exato, a função retorna TRUE se for um feriado. Uso esta outra funçao que deve dar um bom empurrão no que vc´s querem fazer. {Colocar dateutil no USES } Function QtdDiasUteis(nMes : Integer=0; nAno: Integer=0): Integer; Function BoM(dData : TDateTime):TDateTime; begin Result := dData - ExtractDay(dData) + 1; end; Function EoM(dData : TDateTime):TDateTime; begin Result := BoM(IncMonth(dData,1))-1; end; var DataIni, DataFim : TDateTime; Begin Result:=0; Try DataIni:=StrToDateFmt('dd/mm/','01/'+StrZero(nMes,2)+'/'+StrZero(nAno,4) ); except Exit; end; DataFim:=Eom(DataIni); While DataIni=DataFim do Begin If (DayOfWeek(DataIni) in [2,3,4,5,6]) and (Not Ve_Feriado(DataIni)) then Inc(Result); DataIni:=DataIni+1; End; End; [ ]´s Moacir - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 11:32 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Acho que estamos quase chegando lá... Só falta eu conseguir agora, fazer a função: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Se alguém conseguir tb... [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 10:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Paulo, Tenho usado esta função a um bom tempo com resultados satisfatórios: Function Ve_Feriado(dData : TDateTime=0) : Boolean; var nMes : Integer; y,m,d:Word; G,I,J,C,H,L: Integer; E:TDateTime; dSexta : TDateTime; dCarnaval : TDateTime; ano : integer; const FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan '', // Fev '', // Mar '21~', // Abr '01~', // Mai '', // Jun '', // Jul '', // Ago '07~', // Set '12~', // Out '02~15~',// Nov '25~'); // Dez Begin If dData=0 then Result:=False else Begin Try nMes :=StrToInt(FormatDateTime('mm',dData)); except nMes :=0; end; If (nMes1) or (nMes12) then Result:=False else Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )0; end; // Calcula o Feriado de Carnaval e Sexta-Feira Santa DecodeDate(dData, Y, M, D); ano := y; G := ano mod 19; C := ano div 100; H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30; I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11)); J := (ano + ano div 4 +I+2-C+C div 4) mod 7; L := I-J; m := 3+(L+40) div 44; d := L+28-31*(m div 4); //y := ano; E := EncodeDate(y,m,d); While DayOfWeek(E)1 do E := E+1; //--- Sexta-feira Santa dSexta := E - 2; //--- Carnaval dCarnaval := E - 47; If (dData = dSexta) Or (dData = dCarnaval) then Result := True; End; [ ]´s Moacir - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens
Re: [delphi-br] Re: DIAS ÚTEIS
Rogerio, Faça uma mudança simples, veja como: Function QtdDiasUteis(dDataIni: tDateTime; dDataFim: tDateTime): Integer; Begin Result:=0; While dDataIni=dDataFim do Begin If (DayOfWeek(dDataIni) in [2,3,4,5,6]) and (Not Ve_Feriado(dDataIni)) then Inc(Result); dDataIni:=dDataIni+1; End; End; [ ]´s Moacir -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
Td. Bem mas... O que estamos comentando é : :- dada uma Data e, um Número de Dias Úteis, achar a Data Final. Novamente: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Outro detalhe, acho que tem alguns feriados (dias não úteis) que não estão sendo considerados. Ex.: - Segunda Feira de Carnaval Valeu. [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 7:08 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Rogerio, Faça uma mudança simples, veja como: Function QtdDiasUteis(dDataIni: tDateTime; dDataFim: tDateTime): Integer; Begin Result:=0; While dDataIni=dDataFim do Begin If (DayOfWeek(dDataIni) in [2,3,4,5,6]) and (Not Ve_Feriado(dDataIni)) then Inc(Result); dDataIni:=dDataIni+1; End; End; [ ]´s Moacir -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
26/05 Agora, também é um feriado Bancário... (Pelo menos aqui em São Paulo não sei se é nacional) não me lembro ao certo, ref. ao quê... - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 11:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Td. Bem mas... O que estamos comentando é : :- dada uma Data e, um Número de Dias Úteis, achar a Data Final. Novamente: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Outro detalhe, acho que tem alguns feriados (dias não úteis) que não estão sendo considerados. Ex.: - Segunda Feira de Carnaval Valeu. [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 7:08 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Rogerio, Faça uma mudança simples, veja como: Function QtdDiasUteis(dDataIni: tDateTime; dDataFim: tDateTime): Integer; Begin Result:=0; While dDataIni=dDataFim do Begin If (DayOfWeek(dDataIni) in [2,3,4,5,6]) and (Not Ve_Feriado(dDataIni)) then Inc(Result); dDataIni:=dDataIni+1; End; End; [ ]´s Moacir -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
Rogerio, 1) Quanto a 2a feira de Carnaval - No que me consta não é feriado e sim ponto facultativo (pelo menos é o que sei, caso esteja errado, desculpe-me). Caso seja realmente feriado, basta vc alterar a função e incluir. 2) Chame a função assim: MinhaDataInicial = StrToDate('01/10/2004'); MinhaNovaData:=MinhaDataInicial+QtdDiasUteis(MinhaDataInicial, MinhaDataInicial+30); Não testei, mas acredito que seja isto o que vc esta querendo [ ]´s Moacir - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 11:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Td. Bem mas... O que estamos comentando é : :- dada uma Data e, um Número de Dias Úteis, achar a Data Final. Novamente: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Outro detalhe, acho que tem alguns feriados (dias não úteis) que não estão sendo considerados. Ex.: - Segunda Feira de Carnaval Valeu. [ ]'s -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
Este método, não dará o resultado esperado, pois o resultado de MinhaDataInicial+30 são dias corridos e não dias úteis. Acho que não entendeste... Preciso, somar somente Dias Úteis à uma Data e achar que dia cairá: Ex: Hoje: 02/12/2004 + 30 = 13/01/2005 Tb. acho que não é feriado, nunca tive muita certeza. O que sei é que para os Bancos/Financeiras/Etc... não é um dia útil. Acho que estou chegando a solução de todo o problema. Vou testar, se der certo, aviso. [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 3:19 PM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Rogerio, 1) Quanto a 2a feira de Carnaval - No que me consta não é feriado e sim ponto facultativo (pelo menos é o que sei, caso esteja errado, desculpe-me). Caso seja realmente feriado, basta vc alterar a função e incluir. 2) Chame a função assim: MinhaDataInicial = StrToDate('01/10/2004'); MinhaNovaData:=MinhaDataInicial+QtdDiasUteis(MinhaDataInicial, MinhaDataInicial+30); Não testei, mas acredito que seja isto o que vc esta querendo [ ]´s Moacir - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Thursday, December 02, 2004 11:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Td. Bem mas... O que estamos comentando é : :- dada uma Data e, um Número de Dias Úteis, achar a Data Final. Novamente: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Outro detalhe, acho que tem alguns feriados (dias não úteis) que não estão sendo considerados. Ex.: - Segunda Feira de Carnaval Valeu. [ ]'s -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
Estou muito preocupado tb. com a performance da função... Já imaginou... 1.000.000 de registros fazendo uma conta para chegar no resultado da data ??? [ ]'s - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
Paulo, Tenho usado esta função a um bom tempo com resultados satisfatórios: Function Ve_Feriado(dData : TDateTime=0) : Boolean; var nMes : Integer; y,m,d:Word; G,I,J,C,H,L: Integer; E:TDateTime; dSexta : TDateTime; dCarnaval : TDateTime; ano : integer; const FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan '', // Fev '', // Mar '21~', // Abr '01~', // Mai '', // Jun '', // Jul '', // Ago '07~', // Set '12~', // Out '02~15~',// Nov '25~'); // Dez Begin If dData=0 then Result:=False else Begin Try nMes :=StrToInt(FormatDateTime('mm',dData)); except nMes :=0; end; If (nMes1) or (nMes12) then Result:=False else Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )0; end; // Calcula o Feriado de Carnaval e Sexta-Feira Santa DecodeDate(dData, Y, M, D); ano := y; G := ano mod 19; C := ano div 100; H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30; I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11)); J := (ano + ano div 4 +I+2-C+C div 4) mod 7; L := I-J; m := 3+(L+40) div 44; d := L+28-31*(m div 4); //y := ano; E := EncodeDate(y,m,d); While DayOfWeek(E)1 do E := E+1; //--- Sexta-feira Santa dSexta := E - 2; //--- Carnaval dCarnaval := E - 47; If (dData = dSexta) Or (dData = dCarnaval) then Result := True; End; [ ]´s Moacir - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
Re: [delphi-br] Re: DIAS ÚTEIS
Moacir, Pelo que entendi, esta funcao retorna True se a data especificada for um feriado ? Seria isso mesmo ? - Original Message - From: Prisma Sistemas - Moacir To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 9:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Paulo, Tenho usado esta função a um bom tempo com resultados satisfatórios: Function Ve_Feriado(dData : TDateTime=0) : Boolean; var nMes : Integer; y,m,d:Word; G,I,J,C,H,L: Integer; E:TDateTime; dSexta : TDateTime; dCarnaval : TDateTime; ano : integer; const FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan '', // Fev '', // Mar '21~', // Abr '01~', // Mai '', // Jun '', // Jul '', // Ago '07~', // Set '12~', // Out '02~15~',// Nov '25~'); // Dez Begin If dData=0 then Result:=False else Begin Try nMes :=StrToInt(FormatDateTime('mm',dData)); except nMes :=0; end; If (nMes1) or (nMes12) then Result:=False else Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )0; end; // Calcula o Feriado de Carnaval e Sexta-Feira Santa DecodeDate(dData, Y, M, D); ano := y; G := ano mod 19; C := ano div 100; H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30; I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11)); J := (ano + ano div 4 +I+2-C+C div 4) mod 7; L := I-J; m := 3+(L+40) div 44; d := L+28-31*(m div 4); //y := ano; E := EncodeDate(y,m,d); While DayOfWeek(E)1 do E := E+1; //--- Sexta-feira Santa dSexta := E - 2; //--- Carnaval dCarnaval := E - 47; If (dData = dSexta) Or (dData = dCarnaval) then Result := True; End; [ ]´s Moacir - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Yahoo! Grupos, um serviço oferecido por: São Paulo Rio de Janeiro Curitiba Porto Alegre Belo Horizonte Brasília -- Links do Yahoo! Grupos a.. Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ b.. Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] c.. O uso que você faz do Yahoo! Grupos está sujeito aos Termos do Serviço do Yahoo!. [As partes desta mensagem que não continham texto foram removidas] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos * Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ * Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] * O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
RES: [delphi-br] Re: DIAS ÚTEIS
Eu criei esta rotina para mim, vê se vira para vc tb. function DiaUtil(pData : String) : Boolean; var dtCheck : TDate; Feriados: String; Dia,Mes,Ano : Word; DiaMes : String; begin Result := False; //Para alimentar a String com outros feriados, usar formato DD/MM, seguindo o padrão abaixo: Feriados := '01/01 23/02 24/02 09/04 21/04 01/05 10/06 09/07 07/09 12/10 02/11 15/11 25/12'; dtCheck := StrToDate(pData); Result := (dayofweek(dtCheck) in [2..6]); DecodeDate(dtCheck,Ano,Mes,Dia); DiaMes := FormatFloat('00',Dia) + '/' + FormatFloat('00',Mes); if Result then Result := Pos(DiaMes,Feriados) 1; end; Júnior Coelho. Desenvolvimento de Sistemas * (11) 3266 - 1286 * (11) 7175 - 1885 * [EMAIL PROTECTED] -Mensagem original- De: Rogério [mailto:[EMAIL PROTECTED] Enviada em: quarta-feira, 1 de dezembro de 2004 11:28 Para: [EMAIL PROTECTED] Assunto: Re: [delphi-br] Re: DIAS ÚTEIS Já testei, é isto mesmo... só tem um problema... Segunda Feira de carnaval, não acusa como sendo um feriado (Feriado Bancário) ! Na redoma, este dia não é um dia útil. (Acho que existem outros feriados que esta função não considera... vou checar.) Mas ja é uma boa opção para não se utilizar uma tabela com os feriados, ácho que só precisa de uns ajustes. []'s - Original Message - From: MOITA [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 12:20 PM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Moacir, Pelo que entendi, esta funcao retorna True se a data especificada for um feriado ? Seria isso mesmo ? - Original Message - From: Prisma Sistemas - Moacir To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 9:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Paulo, Tenho usado esta função a um bom tempo com resultados satisfatórios: Function Ve_Feriado(dData : TDateTime=0) : Boolean; var nMes : Integer; y,m,d:Word; G,I,J,C,H,L: Integer; E:TDateTime; dSexta : TDateTime; dCarnaval : TDateTime; ano : integer; const FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan '', // Fev '', // Mar '21~', // Abr '01~', // Mai '', // Jun '', // Jul '', // Ago '07~', // Set '12~', // Out '02~15~',// Nov '25~'); // Dez Begin If dData=0 then Result:=False else Begin Try nMes :=StrToInt(FormatDateTime('mm',dData)); except nMes :=0; end; If (nMes1) or (nMes12) then Result:=False else Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )0; end; // Calcula o Feriado de Carnaval e Sexta-Feira Santa DecodeDate(dData, Y, M, D); ano := y; G := ano mod 19; C := ano div 100; H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30; I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11)); J := (ano + ano div 4 +I+2-C+C div 4) mod 7; L := I-J; m := 3+(L+40) div 44; d := L+28-31*(m div 4); //y := ano; E := EncodeDate(y,m,d); While DayOfWeek(E)1 do E := E+1; //--- Sexta-feira Santa dSexta := E - 2; //--- Carnaval dCarnaval := E - 47; If (dData = dSexta) Or (dData = dCarnaval) then Result := True; End; [ ]´s Moacir - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages
Re: [delphi-br] Re: DIAS ÚTEIS
Rogerio/Moita, Exato, a função retorna TRUE se for um feriado. Uso esta outra funçao que deve dar um bom empurrão no que vc´s querem fazer. {Colocar dateutil no USES } Function QtdDiasUteis(nMes : Integer=0; nAno: Integer=0): Integer; Function BoM(dData : TDateTime):TDateTime; begin Result := dData - ExtractDay(dData) + 1; end; Function EoM(dData : TDateTime):TDateTime; begin Result := BoM(IncMonth(dData,1))-1; end; var DataIni, DataFim : TDateTime; Begin Result:=0; Try DataIni:=StrToDateFmt('dd/mm/','01/'+StrZero(nMes,2)+'/'+StrZero(nAno,4)); except Exit; end; DataFim:=Eom(DataIni); While DataIni=DataFim do Begin If (DayOfWeek(DataIni) in [2,3,4,5,6]) and (Not Ve_Feriado(DataIni)) then Inc(Result); DataIni:=DataIni+1; End; End; [ ]´s Moacir - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 11:32 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Acho que estamos quase chegando lá... Só falta eu conseguir agora, fazer a função: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Se alguém conseguir tb... [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 10:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Paulo, Tenho usado esta função a um bom tempo com resultados satisfatórios: Function Ve_Feriado(dData : TDateTime=0) : Boolean; var nMes : Integer; y,m,d:Word; G,I,J,C,H,L: Integer; E:TDateTime; dSexta : TDateTime; dCarnaval : TDateTime; ano : integer; const FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan '', // Fev '', // Mar '21~', // Abr '01~', // Mai '', // Jun '', // Jul '', // Ago '07~', // Set '12~', // Out '02~15~',// Nov '25~'); // Dez Begin If dData=0 then Result:=False else Begin Try nMes :=StrToInt(FormatDateTime('mm',dData)); except nMes :=0; end; If (nMes1) or (nMes12) then Result:=False else Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )0; end; // Calcula o Feriado de Carnaval e Sexta-Feira Santa DecodeDate(dData, Y, M, D); ano := y; G := ano mod 19; C := ano div 100; H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30; I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11)); J := (ano + ano div 4 +I+2-C+C div 4) mod 7; L := I-J; m := 3+(L+40) div 44; d := L+28-31*(m div 4); //y := ano; E := EncodeDate(y,m,d); While DayOfWeek(E)1 do E := E+1; //--- Sexta-feira Santa dSexta := E - 2; //--- Carnaval dCarnaval := E - 47; If (dData = dSexta) Or (dData = dCarnaval) then Result := True; End; [ ]´s Moacir - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG
Re: [delphi-br] Re: DIAS ÚTEIS
Caraca... Não entendí muito bem mas... Acho que se eu utilizar esta... vai complicar... Por exemplo: Se cair no meio do mês... vou ter calcular quantos dias úteis à tirar, para chegar no resultado ! []'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 11:59 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Rogerio/Moita, Exato, a função retorna TRUE se for um feriado. Uso esta outra funçao que deve dar um bom empurrão no que vc´s querem fazer. {Colocar dateutil no USES } Function QtdDiasUteis(nMes : Integer=0; nAno: Integer=0): Integer; Function BoM(dData : TDateTime):TDateTime; begin Result := dData - ExtractDay(dData) + 1; end; Function EoM(dData : TDateTime):TDateTime; begin Result := BoM(IncMonth(dData,1))-1; end; var DataIni, DataFim : TDateTime; Begin Result:=0; Try DataIni:=StrToDateFmt('dd/mm/','01/'+StrZero(nMes,2)+'/'+StrZero(nAno,4) ); except Exit; end; DataFim:=Eom(DataIni); While DataIni=DataFim do Begin If (DayOfWeek(DataIni) in [2,3,4,5,6]) and (Not Ve_Feriado(DataIni)) then Inc(Result); DataIni:=DataIni+1; End; End; [ ]´s Moacir - Original Message - From: Rogério [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 11:32 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Acho que estamos quase chegando lá... Só falta eu conseguir agora, fazer a função: Acha_a_Data_Dia_Util('01/10/2004',30) Que Retornará: 17/11/2004 Se alguém conseguir tb... [ ]'s - Original Message - From: Prisma Sistemas - Moacir [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 10:50 AM Subject: Re: [delphi-br] Re: DIAS ÚTEIS Paulo, Tenho usado esta função a um bom tempo com resultados satisfatórios: Function Ve_Feriado(dData : TDateTime=0) : Boolean; var nMes : Integer; y,m,d:Word; G,I,J,C,H,L: Integer; E:TDateTime; dSexta : TDateTime; dCarnaval : TDateTime; ano : integer; const FERIADOSFIXOS : Array [1..12] of String =('01~', // Jan '', // Fev '', // Mar '21~', // Abr '01~', // Mai '', // Jun '', // Jul '', // Ago '07~', // Set '12~', // Out '02~15~',// Nov '25~'); // Dez Begin If dData=0 then Result:=False else Begin Try nMes :=StrToInt(FormatDateTime('mm',dData)); except nMes :=0; end; If (nMes1) or (nMes12) then Result:=False else Result:=Pos(FormatDateTime('dd',dData),FERIADOSFIXOS[nMes] )0; end; // Calcula o Feriado de Carnaval e Sexta-Feira Santa DecodeDate(dData, Y, M, D); ano := y; G := ano mod 19; C := ano div 100; H := (C-C div 4-(8*C+13) div 25 + 19*G+15)mod 30; I := H-(H div 28)*(1-(H div 28)*(29 div(H+1))*((21-G)div 11)); J := (ano + ano div 4 +I+2-C+C div 4) mod 7; L := I-J; m := 3+(L+40) div 44; d := L+28-31*(m div 4); //y := ano; E := EncodeDate(y,m,d); While DayOfWeek(E)1 do E := E+1; //--- Sexta-feira Santa dSexta := E - 2; //--- Carnaval dCarnaval := E - 47; If (dData = dSexta) Or (dData = dCarnaval) then Result := True; End; [ ]´s Moacir - Original Message - From: drummondfilho [EMAIL PROTECTED] To: [EMAIL PROTECTED] Sent: Wednesday, December 01, 2004 8:59 AM Subject: [delphi-br] Re: DIAS ÚTEIS Gostaria de ajudar a montar o algoritmo se você puder me passar a tabela de feriados ficaria muito feliz em poder ajudar. []'s Paulo Drummond Filho [EMAIL PROTECTED] -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos -- No virus found in this incoming message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- No virus found in this outgoing message. Checked by AVG Anti-Virus. Version: 7.0.289 / Virus Database: 265.4.4 - Release Date: 30/11/2004 -- FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA