bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Contar apenas dias úteis em uma consulta

Contar apenas dias úteis em uma consulta

Adquira a assinatura vitalícia do site e passe a ter acesso aos arquivos exemplos, vídeos, revistas, livros e ao kit de montagem de ribbons. Você terá suporte por e-mail, caso necessite tirar dúvidas pontuais. Clique AQUI e veja como obter um dos nossos planos. Clique AQUI e faça uma visita a seção Downloads do site e verifique as centenas de arquivos que estará à sua disposição. Clique AQUI e faça uma visita a seção Vídeos do site e veja a lista que estará disponível ao se tornar o nosso assinante vitalício. Clique AQUI e saiba mais detalhes sobre o kit de montagem de ribbons (deixe seus aplicativos com aspecto profissional).

Usuário Leandro:

Bom dia,

preciso contar apenas os dias úteis de uma tabela, no campo "DATA R".  Por exemplo, um material com data do dia 01/09/2016, deveria estar com 2 dias.

Utilizei

SeImed([Data R]=Data();0;Data()-[Data R])

Mas esta fórmula calcula todos os dias, retornando 4 dias.

Como posso fazer para contar apenas os dias úteis?

Suporte:

Leandro, copie a função abaixo para um módulo global:

Public Function fncDiasUteis(dataLançamento As Date, DataRef As Date) As Integer
Dim j%, dataAnalisada As Date
dataAnalisada = dataLançamento + 1
Do While Not dataAnalisada > DataRef
    If Eval("weekday(#" & Format(dataAnalisada, "mm/dd/yyyy") & "#) between 2 and 6") Then
            j = j + 1
    End If
    dataAnalisada = dataAnalisada + 1
Loop
fncDiasUteis = j
End Function

Na consulta, crie o campo virtual DiasUteis:

DiasUteis: fncDiasUteis([data R];data())

Caso tenha que levar em consideração os feriados, altere a função para:

Public Function fncDiasUteis(dataLançamento As Date, DataRef As Date) As Integer
Dim j%, dataAnalisada As Date
dataAnalisada = dataLançamento + 1
Do While Not dataAnalisada > DataRef
    If Eval("weekday(#" & Format(dataAnalisada, "mm/dd/yyyy") & "#) between 2 and 6") Then
        If Not fncFeriado(dataAnalisada) Then
            j = j + 1
        End If
    End If
    dataAnalisada = dataAnalisada + 1
Loop
fncDiasUteis = j
End Function

A função fncFeriado(), você monta conforme este meu artigo.

Usuário Leandro:

Avelino,

a consulta de Dias Úteis esta funcionando perfeitamente.

A questão dos feriados é um pouco mais complicada, pois o que preciso considerar, são os dias Não Úteis, que envolvem além dos feriados, dias de greve, por exemplo, e isso é impossível prever.

Por isso, pensei em uma tabela ou formulário, onde eu digitaria manualmente os dias Não Úteis e a consulta de Dias Úteis, excluiria os dias digitados.

Isso é possível ?

Suporte:

Leandro, para consultar a tabela de dias Não Úteis, basta utilizar a função Dcount().  Algo assim:

Public Function fncDiasUteis(dataLançamento As Date, DataRef As Date) As Integer
Dim j%, dataAnalisada As Date
dataAnalisada = dataLançamento + 1
Do While Not dataAnalisada > DataRef
    If Eval("weekday(#" & Format(dataAnalisada, "mm/dd/yyyy") & "#) between 2 and 6") Then
        If Dcount("*","tblDiasNãoUteis","DataNãoUtil = #" & Format(dataAnalisada,"mm/dd/yyyy") & "#") = 0 Then
            j = j + 1
        End If
    End If
    dataAnalisada = dataAnalisada + 1
Loop
fncDiasUteis = j
End Function

Usuário Leandro:

Avelino,

funcionando perfeitamente!


 

 


2 comentário(s)

Rodrigo Gomes   27/04/2020 12:00:40

Olá,
Boa tarde!
A exemplo do que foi explicado na dúvida do Leandro, como eu poderia fazer o inverso?
Por exemplo, se eu tiver em uma tabela um campo contendo a data inicial, em outro campo, o prazo para entrega de uma determinada atividade, em dias, gostaria de me retornasse uma data final já considerando esse prazo, descontado fins de semana e feriado. Como poderia resolver isso?

Gustavo   25/04/2019 06:52:03

Ola, como faço pra utilizar a funcao "Dcontar" para contar registros que seja maior que 0 sem utilizar o VB.


Envie seu comentário: