MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


3 participantes

    Consulta - Dias úteis com feriado

    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 17/4/2012, 16:05

    Oi Galera, estou tendo problema para evoluir no meu projeto.
    Tenho um BD com entregas de mercadorias e suas etapas (Ex. DtPedido, DtNF e DtEntrega) consegui calcular os dias úteis entre as etapas na consulta, mas não sei como incluir os feriados (nacionais e estaduais).
    Pesquisei e achei alguns códigos, mas quero incluir em uma consulta, pois não conheço muito módulos e Vb.
    Usei a seguinte expressão em um campo da consulta para calcular o tempo entre pedido e emissão da NF: SeImed([dtNF]>1/1/2000;((DifData("d";[dtPedido];[dtNF])-(DifData("ww";[dtpedido];[dtNF])*2)+1)+(DiaSem([dtPedido])="domingo")+(DiaSem([dtNF])="sabado")-1);"Não Faturado").

    Amigos peço a ajuda de vcs para incluir uma expressão na consulta.
    Abç e obrigado.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 17/4/2012, 21:08

    Boa noite, andre lindolfo, e bem-vindo ao fórum
    Não entendi bem o significado da expressão que indicou.
    No entanto, com a ajuda deste fórum (tem um botão próprio no formulário) veja:
    http://maximoaccess.forumeiros.com/search?search_keywords=dias+%C3%BAteis&sid=&q=&domains=maximoaccess.forumeiros.com&sitesearch=maximoaccess.forumeiros.com&client=&forid=1&channel=3119321536&ie=utf-8&oe=utf-8&hl=pt&cof=GALT%3A%23166187%3BGL%3A1%3BDIV%3A%23ffffff%3BVLC%3A%23344455%3BAH%3Acenter%3BBGC%3A%23f7f7f7%3BLBGC%3A%23ffffff%3BALC%3A%23166187%3BLC%3A%23166187%3BT%3A%23222222%3BGFNT%3A%23166187%3BGIMP%3A%23166187%3BFORID%3A11&search_terms=any&search_author=&search_where=-1&search_time=0&show_results=topics&sort_by=0&sort_dir=DESC&google=
    Alguns dos resultados:
    http://maximoaccess.forumeiros.com/t1051-resolvidoscalcular-dias-uteis-entre-datas?highlight=dias+uteis
    http://maximoaccess.forumeiros.com/t4388-resolvidodias-uteis?highlight=dias+%C3%BAteis

    Tente adaptar. Se não der certo, explique a expressão acima e o que pretende obter
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 18/4/2012, 03:01

    Caro Alexandre, boa noite.
    Antes de postar a minha dúvida pesquisei aqui e em outros locais, infelizmente as respostas explicam como calcular isso em formulário, módulo ou usando o Vb. A minha necessidade é que este cálculo seja feito em uma consulta. Se possível, até mesmo através do modo design de consultas. Consegui achar um único caso que foi aquela expressão que postei. Porém, a expressão não leva em cosideração no cálculo dos dias úteis os feriados (nacionais ou estaduais).
    Meu caso é o seguinte, trata-se de um caso de compra de material com entrega na residência do cliente:
    Tenho um Bd e nele tenho duas informações [dtNF] (data da emissão da NF) e [DtEntrega] (data que a entrega foi realizada), eles estão na mesma tabela.
    Quantos dias úteis contem entre a data de emissão da NF e a data de entrega da mercadoria, subtraindo os sábados, domingos e feriados?
    Alexandre, não entendo muito de módulos ou códigos, mas quero colocar este cálculo numa consulta que depois virará um relatório.

    Abrç
    André Lindolfo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 18/4/2012, 11:31

    Bom dia, André

    Bom, terá de se socorrer do VBA
    Crie um módulo novo e cole a função
    Public Function DiasUteis(DataInicio As Date, DATAFIM As Date) As Long
    'By JPaulo Ž Maximo Access
    'Total de Dias entre duas datas sem fins de semana
    Dim TotalDiasActuais As Long, TotalDiasTrab As Long
    Dim strIniciaContagem As Long


    DoCmd.Hourglass (-1)
    strIniciaContagem = -2
    TotalDiasActuais = (DATAFIM - DataInicio) + 1

    Do
    If Weekday(DataInicio) = 7 Or Weekday(DataInicio) = 1 Then
    strIniciaContagem = strIniciaContagem + 1
    End If

    DataInicio = DataInicio + 1

    Loop Until DataInicio = DATAFIM + 1

    TotalDiasTrab = TotalDiasActuais - strIniciaContagem
    DoCmd.Hourglass (0)
    DiasUteis = TotalDiasTrab
    Exit Function
    End Function

    Na consulta, coloque =DiasUteis(dtNF;DtEntrega)
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 18/4/2012, 21:05

    Oi Alexandre,
    Irei testar a sua solução.
    Porém, pelo que puder perceber nela não há indicação de feriados. Criei uma tabela com o nome Feriados e o campo data é o dia do feriados. Tem como você me ajudar a incluir os feriados na sua solução.

    Obriagado pelo esclarecimento com relação a criação do módulo e como faço a consulta usa-lo, não conheço muito e isso já me ajudou bastante. Muito obrigado.
    Abç
    André Lindolfo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 18/4/2012, 21:32

    Boa noite, André

    De facto, esqueci-me dos feriados
    1 - Cole num módulo

    Option Compare Database
    Option Explicit

    ' 'criada por Alexandre Neves
    ' 'www.esnips.com\web\AlexandreNeves

    Enum NomeEstado
    Acre = 1
    Alagoas = 2
    Amapá = 3
    Amazonas = 4
    Bahía = 5
    Ceará = 6
    DistritoFederal = 7
    EspíritoSanto = 8
    Goiás = 9
    Maranhão = 10
    MatoGrosso = 11
    MatoGrossoDoSul = 12
    MinasGerais = 13
    Pará = 14
    Paraíba = 15
    Paraná = 16
    Pernambuco = 17
    Piauí = 18
    RioDeJaneiro = 19
    RioGrandeDoNorte = 20
    RioGrandeDoSul = 21
    Rondônia = 22
    Roraima = 23
    SantaCatarina = 24
    SãoPaulo = 25
    Sergipe = 26
    Tocantins = 27
    End Enum

    Function DiasUteisBrasileiros(DataInicial As Date, DataFinal As Date, Optional Estado As NomeEstado) As Integer
    Dim DataActual As Date
    DiasUteisBrasileiros = 0
    For DataActual = DataInicial To DataFinal
    If Not FeriadoBrasileiro(DataActual, Estado) And Weekday(DataActual) <> 1 And Weekday(DataActual) <> 7 Then DiasUteisBrasileiros = DiasUteisBrasileiros + 1
    Next
    End Function

    Function PascoaB(intAno As Integer) As Date
    ' 'criada por Alexandre Neves
    ' 'www.esnips.com\web\AlexandreNeves
    Dim X As Byte, y As Byte
    Dim a As Byte, b As Byte, c As Byte, d As Byte, e As Byte

    If intAno > 1581 And intAno < 1600 Then X = 22: y = 2
    If intAno > 1599 And intAno < 1700 Then X = 22: y = 2
    If intAno > 1699 And intAno < 1800 Then X = 23: y = 3
    If intAno > 1799 And intAno < 1900 Then X = 23: y = 4
    If intAno > 1899 And intAno < 2000 Then X = 24: y = 5
    If intAno > 1999 And intAno < 2100 Then X = 24: y = 5
    If intAno > 2099 And intAno < 2200 Then X = 24: y = 6
    If intAno > 2199 And intAno < 2300 Then X = 25: y = 7

    a = intAno Mod 19
    b = intAno Mod 4
    c = intAno Mod 7
    d = ((19 * a) + X) Mod 30
    e = ((2 * b) + (4 * c) + (6 * d) + y) Mod 7
    If (d + e) < 10 Then
    PascoaB = DateSerial(intAno, 3, d + e + 22)
    Else
    PascoaB = DateSerial(intAno, 4, d + e - 9)
    End If
    If PascoaB = DateSerial(intAno, 4, 26) Then PascoaB = DateAdd("d", -7, PascoaB)
    If PascoaB = DateSerial(intAno, 4, 25) And d = 28 And a > 10 Then PascoaB = DateAdd("d", -7, PascoaB)
    End Function

    Function FeriadoBrasileiro(dtData As Date, Optional strNomeEstado As NomeEstado) As Boolean
    ' 'criada por Alexandre Neves
    ' 'www.esnips.com\web\AlexandreNeves
    FeriadoBrasileiro = False
    Select Case Format(dtData, "dd-mm")
    Case "01=01"
    FeriadoBrasileiro = True
    Case "21-04"
    FeriadoBrasileiro = True
    Case "01-05"
    FeriadoBrasileiro = True
    Case "07-09"
    FeriadoBrasileiro = True
    Case "12-10"
    FeriadoBrasileiro = True
    Case "02-11"
    FeriadoBrasileiro = True
    Case "15-11"
    FeriadoBrasileiro = True
    Case "25-12"
    FeriadoBrasileiro = True
    End Select

    If dtData = DateAdd("d", -47, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", -2, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = PascoaB(Year(dtData)) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", 49, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", 56, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True
    If dtData = DateAdd("d", 60, PascoaB(Year(dtData))) Then FeriadoBrasileiro = True

    If Not IsMissing(strNomeEstado) Then
    Select Case strNomeEstado
    Case Acre
    If Format(dtData, "dd-mm") = "15-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "06-08" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "05-09" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "17-11" Then FeriadoBrasileiro = True
    Case Alagoas
    If Format(dtData, "dd-mm") = "24-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "29-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "16-09" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case Amapá
    If Format(dtData, "dd-mm") = "19-03" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "05-10" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case Amazonas
    If Format(dtData, "dd-mm") = "05-09" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "08-12" Then FeriadoBrasileiro = True
    Case Bahía
    If Format(dtData, "dd-mm") = "28-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "02-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case DistritoFederal
    If Format(dtData, "dd-mm") = "21-04" Then FeriadoBrasileiro = True
    Case EspíritoSanto
    If Format(dtData, "dd-mm") = "23-05" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-10" Then FeriadoBrasileiro = True
    Case Goiás
    If Format(dtData, "dd-mm") = "26-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-10" Then FeriadoBrasileiro = True
    Case Maranhão
    If Format(dtData, "dd-mm") = "28-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-12" Then FeriadoBrasileiro = True
    Case MatoGrosso
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case MatoGrossoDoSul
    If Format(dtData, "dd-mm") = "11-10" Then FeriadoBrasileiro = True
    Case Pará
    If Format(dtData, "dd-mm") = "15-08" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "08-12" Then FeriadoBrasileiro = True
    Case Paraíba
    If Format(dtData, "dd-mm") = "05-08" Then FeriadoBrasileiro = True
    Case Paraná
    If Format(dtData, "dd-mm") = "08-09" Then FeriadoBrasileiro = True
    Case Pernambuco
    If Format(dtData, "dd-mm") = "06-03" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "24-06" Then FeriadoBrasileiro = True
    Case Piauí
    If Format(dtData, "dd-mm") = "13-03" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "19-10" Then FeriadoBrasileiro = True
    Case RioDeJaneiro
    If Format(dtData, "dd-mm") = "21-01" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "23-04" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "18-10" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "28-10" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case RioGrandeDoNorte
    If Format(dtData, "dd-mm") = "29-06" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "03-10" Then FeriadoBrasileiro = True
    Case RioGrandeDoSul
    If Format(dtData, "dd-mm") = "20-09" Then FeriadoBrasileiro = True
    Case Rondônia
    If Format(dtData, "dd-mm") = "04-01" Then FeriadoBrasileiro = True
    Case Roraima
    If Format(dtData, "dd-mm") = "05-10" Then FeriadoBrasileiro = True
    Case SantaCatarina
    If Format(dtData, "dd-mm") = "11-08" Then FeriadoBrasileiro = True
    Case SãoPaulo
    If Format(dtData, "dd-mm") = "09-07" Then FeriadoBrasileiro = True
    If Format(dtData, "dd-mm") = "20-11" Then FeriadoBrasileiro = True
    Case Sergipe
    If Format(dtData, "dd-mm") = "08-07" Then FeriadoBrasileiro = True
    Case Tocantins
    If Format(dtData, "dd-mm") = "05-10" Then FeriadoBrasileiro = True
    End Select
    End If
    End Function

    2 - Na consulta, coloque =DiasUteisBrasileiros(dtNF;DtEntrega)
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 19/4/2012, 02:54

    Alexandre, fiz o que vc me orientou....
    abri um módulo
    copiei e colei o seu script salvei-o como DiasUteisBrasileiros.
    Abri uma consulta de teste e coloquei o campo tempo:DiasUteisBrasileiros(DtNF;DtStatus) - o campo que eu tenho a data de entrega se chama DtStatus. Mas quando executo a consulta da erro "Função 'DiasUteisBrasileiros' indefinida na expressão".
    Além disso tenho algumas dúvidas e aí aproveito o seu conhecimento quero aprender um pouco...
    Não vi a ligação entre a minha dtNF e DtStatus no seu script. Quando coloco na consulta DiasUteisBrasileiros(DtNF;DtStatus), o sistema já entende que a DtNF é a DataInicial e a outra é a DataFinal que você menciona no script?
    Outro item que o meu campo que define o Estado se chama "OrgVenda".
    1.Preciso fazer alguma adaptação no seu script?
    2.Outro item é que vc coloca DataActual, aqui no Brasil o meu access entende como data atual a função "agora()", preciso substituir também?

    Além deste problema de execução peça a sua ajuda nos outros itens que levantei.

    Agradeço a sua ajuda
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Ajuda com cálculo de dias uteis com feriados nacionais e estaduais

    Mensagem  andre lindolfo 4/5/2012, 03:39

    Oi Galera,
    O nosso amigo Alexandre me enviou um código(mensagem acima) e fiz como ele pediu .... copiei e colei em um módulo.
    Porém quando eu executo a consulta vem a resposta "função 'diasuteisbrasileiros' indefinida na expressão.
    Alguém pode me ajudar???
    Não entendo muito, pesquisei e não consigo resolver.

    []s
    André Lindolfo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 4/5/2012, 18:08

    Boa tarde, andre

    Sobre a chamada da função, reparei que utilizou o ponto e vírgula como separador dos argumentos. Utilize a vírgula como separador dos argumentos: DiasUteisBrasileiros(DtNF,DtStatus)
    Sobre o argumento Estado, não dá para verificar se o campo orgVenda respeita o argumento.
    Relativamente à utilização de Date, julgo ser indiferente que a função seja executada no Brasil.
    Haverá alguma situação que ultrapassa a utilização normal da função. Disponibilize a parte da bd que importa analisar.
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 4/5/2012, 18:58

    Oi Alexandre,

    Tentei colocar só vírgula, mas dá erro.

    Segue parte do meu BD.
    Se der tem como vc me ajudar a calcular dias úteis, mas ele projetando uma data futura.
    Ex.: dtfornec = 03/Abr + 4dias úteis é dia 10/Abr (06/Abr foi feriado e 7 e 8/Abr foi sábado e domingo)
    Este caso de cálculo futuro é um algo a mais, minha preocupação maior agora é calcular os dias úteis entre duas datas (descontando finais de semana e feriados nacionais e estaduais).

    Agradeço a sua atenção.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 4/5/2012, 19:12

    Tem de colocar em formato 2003, aliás, é o formato aconselhado porque a maioria o utiliza.
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 4/5/2012, 19:23

    Alexandre, desculpe a minha ignorância...
    É para colocar no formato 2003 aqui no site ou o formato 2003 já resolve o meu problema?

    De qualquer forma segue o novo arquivo...
    Uso o access 2010, peço que a sua solução sirva para esta versão.

    []s
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 4/5/2012, 20:38

    Mude o nome do módulo
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 4/5/2012, 20:56

    Alexandre,

    Testei no banco que te enviei, cliquei no mome do módulo e renomiei para DiasUteisBr, fui na consulta e mudei para a função DiasUteisBr, mas o access apresentou o mesmo problema.
    Para vc funcionou?
    Tem alguma coisa com relação ao formato de data, aqui no Brasil usamos o separador "/" como padrão, isso implica em algo?
    Segue o banco mudado....
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 4/5/2012, 21:20

    Quem disse para mudar na consulta?
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 4/5/2012, 21:24

    Alexandre, mudei o nome do módulo, não teria que mudar (ajustar) isso também na consulta?
    Mudei somente o nome do módulo e a consulta retorna com #ERRO.
    Segue o banco
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 4/5/2012, 21:40

    A consulta devolve com erro? veja se as datas inicial e final existem
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 4/5/2012, 22:13

    Oi Alexandre,
    Verifiquei e as datas existem.
    Verifiquei também que nos feriados do estado de Mato Grosso do Sul (PMS) tinha um erro, o nome do estado estava por extenso, não estava a sigla PMS.

    Percebi que vc colocou o estado como opcional, na consulta não informei o nome do estado e a consulta retornou com os dias. Tem algum erro quando o estado entra no cálculo.

    Porém, ele esta contando o próprio dia. Ex.: Estado PAC começa em 11 e termina em 16 o resultado da consulta é 4, para atender a minha necessidade deveria ser 3.

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 4/5/2012, 22:20

    Quando o Estado entra no cálculo, apenas interfere quando o feriado do Estado indicado está dentro desse período
    Para obter a diferença pretendida, utilize DiasUteisBrasileiros-1
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 4/5/2012, 22:32

    Alexandre,
    Acho que não me expressei bem... quando coloco na função ([dtfornec];[dtStatus];[OrgVen]) dá #ERRO, mas quando tiro o [OrgVen] a função calcula.
    Acho que deve ter algo incorreto no código da função com relação ao estado.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 5/5/2012, 12:13

    Bom dia, lindolfo

    Alterou a função e, agora, MatoGrossoDoSul não está definido
    avatar
    João Martins
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 03/01/2011

    Consulta - Dias úteis com feriado Empty Contribuindo

    Mensagem  João Martins 5/5/2012, 13:57

    André,
    Testei a função, gostei muito.
    Quanto ao Erro que está te retornando é exatamente o que o Alexandre postou, ou seja,está com falta de data no campo Data e isto poderá ocorrer em ambas as tabelas,ou seja, faltou uma data para fazer o comparativo dará este erro.
    Fiz um teste aqui e consegui eliminar esta mensagem de Erro usando a função nz,Cole na sua consulta e veja se resolve.

    DiasUteis: DiasUteisBrasileiros([DtFornec];nz([dtstatus];0);nz([DtStatus];0))

    Quanto ao Estado que está dando Erro no módulo, basta trocar Mato Grosso do Sul por PMS.
    Alexandre, parabéns pela sua ajuda e disposição.
    João Alves.
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 5/5/2012, 18:38

    olá amigos,

    Esta acontecendo algo muito estranho, vou tentar ser mais claro.
    Alexandre e João, testei novamente o último BD que postei aqui e quando coloco na consulta ([dtfornec];nz([dtNF];0);[orgVen]) ela retorna com #erro para tudo. Vcs testaram e funcionou?! Quando excluo o dados [orgVen], ou seja, coloco ([dtfornec];nz([dtNF];0)) ela funciona!
    Alexandre, corrigi o caso do estado e está PMS, mas como disse acima, não funciona.
    João, o seu exemplo DiasUteis: DiasUteisBrasileiros([DtFornec];nz([dtstatus];0);nz([DtStatus];0)) está correto? Vc não colocou o [OrgVen] e repetiu o [DtStatus] duas vezes, é isso mesmo? Vc tentou colocar o [OrgVen]? Funcionou?
    Peço a ajuda de vcs para testarem no último BD que postei no forum, para mim não está funcionando e para vcs está, acho isso estranho.
    Envio agora o BD, com a consulta com o [OrgVen] e se colocarem para executar dará erro em todos os registros.

    Agradeço a ajuda de vocês.
    Abraços.


    avatar
    João Martins
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 03/01/2011

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  João Martins 5/5/2012, 19:27

    André,
    abri o seu banco de dados aqui e funcionou normal agora, incluise com os que não tem data,ele está em branco agurdando posicionamento.
    Deve ser algum problema aí. Tenta testar em algum outro PC para ver se o problema continua.
    João Alves.
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 5/5/2012, 22:30

    Joao,
    abri em outro pc e tbm está dando #erro, tem alguma ideia do que pode ser?
    Vc viu a pergunta que te fiz anteriormene? Vc colocou duas vezes o item [dtStatus] na sua modificação, isso está correto?

    Alexandre, pode me salvar???
    avatar
    João Martins
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 03/01/2011

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  João Martins 6/5/2012, 03:20

    André,
    baixei aqui de casa e com mais calma vi que vc. não colocou nada no critério da consulta na última postagem, por isto abriu normal e sem erros.
    Realmente, eu me equivoquei, pois o propósito da função é checar pelo módulo os dias úteis e quando fiz a trocar pelo status, ele ignorou esta parte, desculpa!

    Alexandre,
    creio que não poderei ajudar o André, pois o que achei ser, não o é, então, peço por gentileza nos ajudar a desvendar o caso.

    Aproveitei para dar uma olhada no teu link e vi que tu tens ótimos exemplos no Snips, muito bom, parabéns e grato por disponibilizar tantas ferramentas de ajuda.

    André, vamos aguardar o Alexandre, também quero entender o segredo.
    João Alves.
    avatar
    João Martins
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4
    Registrado : 03/01/2011

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  João Martins 6/5/2012, 04:06

    André,
    resolvi reler seu tópico e não sei se estou equivocado, mas no início vc. colocou data da nota e data da entrega, e diante disto, creio que o Alexandre colcoou a função ajustando ao campos propostos como se pode ver no fim do módulo instruindo-o para colocar na sua consulta, veja.
    " =DiasUteis(dtNF;DtEntrega)", então, considerando que vc. trocou o nome do Campo DtEntrega por DataStatus, fiz um novo teste e obtive o resultado esperado, como exemplo, usei dia 11 de janeiro/2012 e me retornou 4 dias úteis, pois em SP dia 15 de janeiro é feriado.
    Alexandre, me corrija por favor se estiver errado em minha análise OK.
    Diante disto, ficou assim:

    Dias Úteis: DiasUteisBrasileiros(nz([dtNF];0);nz([DtStatus];0))

    Usei nz novamente para corrigir no caso de ter campos nulos, retornando 0.
    Espero que seja isto.
    Bons estudos.
    João Alves.

    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 6/5/2012, 05:45

    Oi João,
    O Alexandre poderá nos ajudar, mas acho que a troca do nome não tem impacto, pois a função pede data inicial e data final. É só vc colocar dois campos que contenham datas.
    Essa parte o sistema está calculando certinho, ele me dá o resultado.
    O problema está sendo quando coloco o estado (OrgVen) no cálculo da função. Este campo o Alexandre colocou como opcional, se eu incluir ele no cálculo dá #erro em todos os registros. Ou seja, da forma que está para mim, a função está servindo apenas para os feriados nacionais.
    Quando coloco os estados([dtFornec];[dtStatus];[OrgVen]), ele teria que calcular os feriados estaduais, mas está aparecendo #erro em todas as linhas.
    O pior é que vc está me dizendo que no seu PC está funcionando legal! Já coloquei para rodar em outra máquina e apresenta o mesmo problema.
    Pq a função na sua máquina roda e na minha não? Isso que eu quero descobrir. Tem alguma coisa a ver com a questão dos estados ([OrgVen]), quando este entra no cálculo dá erro.
    Olha a tela de erro.

    Anexos
    Consulta - Dias úteis com feriado Attachmenterro.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (231 Kb) Baixado 97 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 6/5/2012, 14:42

    Boa tarde,

    Na tabela, colocou o NomeEstado pelo nome mas devia colocar pelo número, pois é este argumento que é trabalhado.
    Assim, tem duas soluções:
    1 - Altera o dado na tabela, do nomeestado para o número
    2 - utiliza a função de conversão do nome para o número

    Function Estado(strEstado As String) As NomeEstado
    Select Case strEstado
    Case "PAC"
    Estado = 1
    Case "PAL"
    Estado = 2
    Case "PAP"
    Estado = 3
    Case "PAM"
    Estado = 4
    Case "PBA"
    Estado = 5
    Case "PCE"
    Estado = 6
    Case "PDF"
    Estado = 7
    Case "PES"
    Estado = 8
    Case "PGO"
    Estado = 9
    Case "PMA"
    Estado = 10
    Case "PMT"
    Estado = 11
    Case "PMS"
    Estado = 12
    Case "PMG"
    Estado = 13
    Case "PPA"
    Estado = 14
    Case "PPB"
    Estado = 15
    Case "PPR"
    Estado = 16
    Case "PPE"
    Estado = 17
    Case "PPI"
    Estado = 18
    Case "PRJ"
    Estado = 19
    Case "PRN"
    Estado = 20
    Case "PRS"
    Estado = 21
    Case "PRO"
    Estado = 22
    Case "PRR"
    Estado = 23
    Case "PSC"
    Estado = 24
    Case "PSP"
    Estado = 25
    Case "PSE"
    Estado = 26
    Case "PTO"
    Estado = 27
    End Select
    End Function

    Na consulta, em vez de orgVen coloca Estado(Orgven)
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 6/5/2012, 19:15

    Grande Alexandre,

    Muitoooo obrigado, funcionou!!!!
    Obrigado mesmo!!!!!
    Darei um resolvido no tópico.
    Irei abrir outro, mas agora é para fazer o cálculo de uma data futura, ou seja, tenho a data inicial coloco mais X dias úteis e o access me dá a data futura, mas descontando finais de semana e feriados nacionais e estaduais.
    Se puder me ajudar neste também fico agradecido. Afinal, acredito que, com o já tenho, uma boa parte do caminho foi percorrido.

    []s
    André Lindolfo
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8464
    Registrado : 05/11/2009

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Alexandre Neves 6/5/2012, 19:28

    André,

    Quanto mais trabalho dá, mais felizes ficamos por ter resolvido.
    Sobre a nova função pretendida, adapte a função que criei.
    Não lhe poderei ajudar agora, que estou a acabar alguns trabalhos que os tenho de terminar hoje.
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 14/8/2013, 21:00

    Olá amigos de plantão.
    Bem o Alexandre me ajudou a resolver uma parte deste caso, mas agora me deparei com o seguinte. Este código só faz o calculo qdo a data inicial é menor q a data final, mas eu tenho alguns casos que a data final inicial é maior q a final, ou seja, tinha até o dia 10 para fazer algo, mas fui rápido e fiz no dia 7, fiz em -3 dias úteis, mas o código não faz este cálculo. Como faço para q ele calcule dias úteis positivos e negativos???
    Abç a todos!


    .................................................................................
    Abraço

    André Lindolfo

    ACCESS Professional Plus 2010
    avatar
    andre lindolfo
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 139
    Registrado : 17/04/2012

    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  andre lindolfo 14/8/2013, 21:49

    Acho q consegui expor meu caso


    .................................................................................
    Abraço

    André Lindolfo

    ACCESS Professional Plus 2010

    Conteúdo patrocinado


    Consulta - Dias úteis com feriado Empty Re: Consulta - Dias úteis com feriado

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 8/9/2024, 01:27