| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Out 01, 2018 4:50 pm Assunto: Feriados |
|
|
Amigos, estou com a seguinte situação.
Uso uma função que achei aqui no forum para impedir que sejam feitos cadastros nos feriados e finais de semana.
Nesta função já estão definidos todos os feriados fixos e moveis.
Funciona super bem, porém o cliente gostaria de abrir a agenda em alguns feriados
Ex: No dia 15/11 gostaria de trabalhar para folgar no dia 16/11. Isso foge da função e não gostaria de fazer via banco, pois seriam muitas consultas diarias.
Alguma sugestão? |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Ter Out 02, 2018 8:20 pm Assunto: |
|
|
Boa noite,
Não sei se vou conseguir ajudar mas onde são armazenados os feriados utilizados nessa função que você citou?
Editado pela última vez por imex em Sáb Set 30, 2023 5:43 pm, num total de 1 vez |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Qua Out 03, 2018 10:11 am Assunto: |
|
|
bom dia imex.
Os feriados (fixos, móveis e finais de semana), estão todos dentro da function. |
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Out 03, 2018 11:24 am Assunto: |
|
|
Bom dia,
Os feriados estão fixos dentro do código da função? O usuário não tem consegue preencher os feriados? |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Qui Out 04, 2018 7:50 am Assunto: |
|
|
Isso, tudo está fixo.
Fiz assim para não ter que fazer uma consulta no banco a cada vez que um agendamento for realizado, pois isso implicaria em centenas de consultas diarias.
Tem alguma sugestão de personalização? |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Out 04, 2018 5:22 pm Assunto: |
|
|
Se puder, poste como está sua função para analisarmos. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Out 05, 2018 9:00 am Assunto: |
|
|
Bom dia natanbh1.
Segue função
| Código: | function Feriado(Data: TDate): String;
var
dia, mes, ano: Word;
begin
Result := EmptyStr;
dia := DayOf(Data);
mes := MonthOf(Data);
// Feriados Fixos
if ((dia = 1) and (mes = 1)) then
Result := 'Ano Novo'
else if ((dia = 21) and (mes = 4)) then
Result := 'Tiradentes'
else if ((dia = 1) and (mes = 5)) then
Result := 'Dia do Trabalho'
else if ((dia = 7) and (mes = 9)) then
Result := 'Independência do Brasil'
else if ((dia = 12) and (mes = 10)) then
Result := 'Nossa Sra. Aparecida'
else if ((dia = 2) and (mes = 11)) then
Result := 'Finados'
else if ((dia = 15) and (mes = 11)) then
Result := 'Proclamação da República'
else if ((dia = 25) and (mes = 12)) then
Result := 'Natal';
ano := YearOf(Data);
if Result = EmptyStr then
if DayOfWeek(Data) = 1 then
Result := 'Domingo'
else if DayOfWeek(Data) = 7 then
Result := 'Sábado';
end;
|
|
|
| Voltar ao Topo |
|
 |
imex Moderador

Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Sex Out 05, 2018 9:50 am Assunto: |
|
|
Bom dia,
Essa função não tinha os feriados móveis? |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Sex Out 05, 2018 10:30 am Assunto: Re: Feriados |
|
|
| renanbg escreveu: | Ex: No dia 15/11 gostaria de trabalhar para folgar no dia 16/11. Isso foge da função e não gostaria de fazer via banco, pois seriam muitas consultas diarias.
Alguma sugestão? |
Não sei se é a melhor maneira, mas imaginei alterar a função para adicionar mais 2 parâmetros:
- Array de Datas para incluir exceções de "Feriados".
- Array de Datas para remover exceções de "Feriados".
Adaptando sua função:
1º parâmetro: Continua sendo a data a ser testada.
2º parâmetro: Array de Datas que serão incluídas na lista de "Feriados"
3º parâmetro: Array de Datas que serão removidas da lista de "Feriados"
| Código: | function Feriado(Data: TDate; IncluiExcecoes, RemoveExcecoes: array of TDate): String;
var
dia, mes: Word;
i: Integer;
begin
Result := EmptyStr;
dia := DayOf(Data);
mes := MonthOf(Data);
// Feriados Fixos
if ((dia = 1) and (mes = 1)) then
Result := 'Ano Novo'
else if ((dia = 21) and (mes = 4)) then
Result := 'Tiradentes'
else if ((dia = 1) and (mes = 5)) then
Result := 'Dia do Trabalho'
else if ((dia = 7) and (mes = 9)) then
Result := 'Independência do Brasil'
else if ((dia = 12) and (mes = 10)) then
Result := 'Nossa Sra. Aparecida'
else if ((dia = 2) and (mes = 11)) then
Result := 'Finados'
else if ((dia = 15) and (mes = 11)) then
Result := 'Proclamação da República'
else if ((dia = 25) and (mes = 12)) then
Result := 'Natal';
if Result = EmptyStr then
if DayOfWeek(Data) = 1 then
Result := 'Domingo'
else if DayOfWeek(Data) = 7 then
Result := 'Sábado';
for i := Low(IncluiExcecoes) to High(IncluiExcecoes) do
if (dia = DayOf(IncluiExcecoes[i])) and (mes = MonthOf(IncluiExcecoes[i])) then
Result := 'Feriado';
for i := Low(RemoveExcecoes) to High(RemoveExcecoes) do
if (dia = DayOf(RemoveExcecoes[i])) and (mes = MonthOf(RemoveExcecoes[i])) then
Result := EmptyStr;
end; |
Exemplo de uso:
| Código: | // Removendo feriado do dia "15/11" e ao mesmo tempo testando se é feriado (logicamente, não será)
ShowMessage(Feriado(StrToDate('15/11/18'), [], [StrToDate('15/11/18')]));
// Incluindo feriado do dia "16/11" e ao mesmo tempo testando se é feriado (logicamente, será)
ShowMessage(Feriado(StrToDate('16/11/18'), [StrToDate('16/11/18')], [])); |
Creio que pode ser melhorada a função, mas segue sugestão. _________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Out 05, 2018 11:33 am Assunto: |
|
|
| NO caso eu teria que compilar uma nova versão do sistema cada vez que o usuario quiser fazer alguma modificação? |
|
| Voltar ao Topo |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Sex Out 05, 2018 11:48 am Assunto: |
|
|
Não. Neste caso, antes de testar a data o usuário informaria quais são as datas que serão consideradas como feriado ou não fora estas datas fixas.
Neste exemplo que postei, o usuário estaria considerando/informando o dia 15/11 como "Não Feriado" e 16/11 como "Feriado".
| renanbg escreveu: | | Ex: No dia 15/11 gostaria de trabalhar para folgar no dia 16/11. |
| Código: | // Removendo feriado do dia "15/11" e ao mesmo tempo testando se é feriado (logicamente, não será)
ShowMessage(Feriado(StrToDate('15/11/18'), [], [StrToDate('15/11/18')]));
// Incluindo feriado do dia "16/11" e ao mesmo tempo testando se é feriado (logicamente, será)
ShowMessage(Feriado(StrToDate('16/11/18'), [StrToDate('16/11/18')], []));
// Aqui estamos fazendo os 2 procedimentos acima, em uma única linha
ShowMessage(Feriado(StrToDate('16/11/18'), [StrToDate('16/11/18')], [StrToDate('15/11/18')]));
|
_________________ ''A persistência é o caminho para o êxito.''
Charlie Chaplin |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Sex Out 05, 2018 1:05 pm Assunto: |
|
|
| Tá, então eu devo criar uma tabela para inserir essas datas? |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sáb Out 06, 2018 1:27 pm Assunto: |
|
|
Amigo, uma tabela é o mais correto, visto que deve ter sim, uma forma de o usuário cadastrar, pois são muitos feriados e eles variam de município para município, então não dá para colocar no código, pois isto engessa sua aplicação, pois terá de recompilar para um cliente específico.
Além do mais, o custo da busca é pequeno, pois a tabela em si não tem nada mais do que alguns bytes e isto não pesará de forma alguma a aplicação, mesmo que esta esteja em rede.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
| Voltar ao Topo |
|
 |
renanbg Colaborador


Registrado: Quinta-Feira, 12 de Abril de 2012 Mensagens: 1158
|
Enviada: Seg Out 08, 2018 4:46 pm Assunto: |
|
|
Certo, irei avaliar isso.
Uma pergunta: Como fazer no caso dos feriados móveis? |
|
| Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
|
| Voltar ao Topo |
|
 |
|