MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]consulta retorna erro

    Compartilhe

    matutano
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 355
    Registrado : 16/05/2011

    consulta retorna erro

    Mensagem  matutano em 9/2/2013, 11:50

    bom dia amigos tenho uma questão que necessito da vossa ajuda se possível:
    1-estou a utiliza um exemplo do J. Paulo para retornar dias uteis entre duas datas. O que está acontecer quando digito data de inicio no campo diastrab aparece erroentendo que falta a data final.
    Pergunto e peço ajuda á forma de no campo diasTrab não aparecer ERRO? aparecer por exemplo zero
    em anexo uma foto para melhor entendimento.

    Obrigado
    Anexos
    consulta.docx
    Você não tem permissão para fazer download dos arquivos anexados.
    (118 Kb) Baixado 13 vez(es)
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1276
    Registrado : 21/01/2012

    Re: [Resolvido]consulta retorna erro

    Mensagem  Cláudio Más em 9/2/2013, 17:01

    "DiasTrabalhados" deve ser um campo calculado.
    Nesse caso, qual é a expressão desse campo, no design da consulta?

    matutano
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 355
    Registrado : 16/05/2011

    Re: [Resolvido]consulta retorna erro

    Mensagem  matutano em 9/2/2013, 21:25

    bom a expressão no campo é DiasTrabalhados:DST([DataInicio];[DataFim]) mas tem um modulo fdUteis
    Anexos
    consulta1.docx
    Você não tem permissão para fazer download dos arquivos anexados.
    (120 Kb) Baixado 7 vez(es)
    avatar
    Cláudio Más
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1276
    Registrado : 21/01/2012

    Re: [Resolvido]consulta retorna erro

    Mensagem  Cláudio Más em 10/2/2013, 12:49

    A solução é adaptar a função DST(), que provavelmente está no módulo "fdUteis".
    Tem como postar o código?

    matutano
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 355
    Registrado : 16/05/2011

    Re: [Resolvido]consulta retorna erro

    Mensagem  matutano em 10/2/2013, 13:43


    Junto envio o código do modulo, agradecia ajuda, pois tenho muito pouco conhecimento em códigos.
    Muito Obrigado.

    Public Function DTS(dtInicio As Date, dtFim As Date, Optional HojeTb As Boolean = False, Optional UltTb As Boolean = False) As Integer
    '....................................................................
    ' Nome: DTS
    ' Entradas: dtInicio As Date
    ' dtFim As Date
    ' HojeTb As Boolean
    ' UltTb As Boolean
    ' Saída: Integer
    ' Autor: Arvin Meyer
    ' Data: Maio 5,2002
    ' Comentário: Aceita duas datas e devolve o número de dias úteis
    ' entre elas. Note-se que esta função considera os feriados
    ' do período. Ela exige a existência de uma tabela chamada
    ' tblFeriados com um campo, no formato data, chamado FerData.
    ' Se HojeTb = True, a data inicial também será considerada.
    ' Se UltTb = true, a data final também será considerada.
    '....................................................................
    On Error GoTo Err_DTS

    Dim intCount As Integer
    Dim rst As DAO.Recordset
    Dim db As DAO.Database

    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT [FerData] FROM tblFeriados", dbOpenSnapshot)

    If HojeTb Then
    dtInicio = dtInicio + 1
    End If
    ' Se desejar contar a data de início, passe True em HojeTb

    intCount = 0

    If UltTb Then
    Do While dtInicio <= dtFim
    rst.FindFirst "[FerData] = #" & Format(dtInicio, "mm/dd/yyyy") & "#"
    If Weekday(dtInicio) <> vbSunday And Weekday(dtInicio) <> vbSaturday Then
    If rst.NoMatch Then intCount = intCount + 1
    End If
    dtInicio = dtInicio + 1
    Loop
    Else
    Do While dtInicio < dtFim
    rst.FindFirst "[FerData] = #" & Format(dtInicio, "mm/dd/yyyy") & "#"
    If Weekday(dtInicio) <> vbSunday And Weekday(dtInicio) <> vbSaturday Then
    If rst.NoMatch Then intCount = intCount + 1
    End If
    dtInicio = dtInicio + 1
    Loop
    End If
    DTS = intCount

    Exit_DTS:
    Exit Function

    Err_DTS:
    Select Case err

    Case Else
    MsgBox err.Description
    Resume Exit_DTS
    End Select

    End Function

    '*********** Code End **************
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido]consulta retorna erro

    Mensagem  Alexandre Neves em 10/2/2013, 14:04

    Boa tarde,
    Tente assim
    Public Function DTS(Optional dtInicio As Date = 0, Optional dtFim As Date = 0, Optional HojeTb As Boolean = False, Optional UltTb As Boolean = False) As Integer
    '....................................................................
    ' Nome: DTS
    ' Entradas: dtInicio As Date
    ' dtFim As Date
    ' HojeTb As Boolean
    ' UltTb As Boolean
    ' Saída: Integer
    ' Autor: Arvin Meyer
    ' Data: Maio 5,2002
    ' Comentário: Aceita duas datas e devolve o número de dias úteis
    ' entre elas. Note-se que esta função considera os feriados
    ' do período. Ela exige a existência de uma tabela chamada
    ' tblFeriados com um campo, no formato data, chamado FerData.
    ' Se HojeTb = True, a data inicial também será considerada.
    ' Se UltTb = true, a data final também será considerada.
    '....................................................................
    On Error GoTo Err_DTS

    Dim intCount As Integer
    Dim rst As DAO.Recordset
    Dim db As DAO.Database

    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT [FerData] FROM tblFeriados", dbOpenSnapshot)

    If HojeTb Then
    dtInicio = dtInicio + 1
    End If
    ' Se desejar contar a data de início, passe True em HojeTb

    intCount = 0

    If UltTb Then
    Do While dtInicio <= dtFim
    rst.FindFirst "[FerData] = #" & Format(dtInicio, "mm/dd/yyyy") & "#"
    If Weekday(dtInicio) <> vbSunday And Weekday(dtInicio) <> vbSaturday Then
    If rst.NoMatch Then intCount = intCount + 1
    End If
    dtInicio = dtInicio + 1
    Loop
    Else
    Do While dtInicio < dtFim
    rst.FindFirst "[FerData] = #" & Format(dtInicio, "mm/dd/yyyy") & "#"
    If Weekday(dtInicio) <> vbSunday And Weekday(dtInicio) <> vbSaturday Then
    If rst.NoMatch Then intCount = intCount + 1
    End If
    dtInicio = dtInicio + 1
    Loop
    End If
    DTS = intCount

    Exit_DTS:
    Exit Function

    Err_DTS:
    Select Case err

    Case Else
    MsgBox err.Description
    Resume Exit_DTS
    End Select

    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    matutano
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 355
    Registrado : 16/05/2011

    Re: [Resolvido]consulta retorna erro

    Mensagem  matutano em 10/2/2013, 17:13

    não funcionou continua aparecer o erro
    envio o exemplo.
    Obrigado
    Anexos
    DiasUteisTrabalhados - Cópia.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (19 Kb) Baixado 8 vez(es)
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido]consulta retorna erro

    Mensagem  Alexandre Neves em 10/2/2013, 18:26

    Public Function DTS(Optional dtInicio = 0, Optional dtFim = 0, Optional HojeTb As Boolean = False, Optional UltTb As Boolean = False) As Integer
    '....................................................................
    ' Nome: DTS
    ' Entradas: dtInicio As Date
    ' dtFim As Date
    ' HojeTb As Boolean
    ' UltTb As Boolean
    ' Saída: Integer
    ' Autor: Arvin Meyer
    ' Data: Maio 5,2002
    ' Comentário: Aceita duas datas e devolve o número de dias úteis
    ' entre elas. Note-se que esta função considera os feriados
    ' do período. Ela exige a existência de uma tabela chamada
    ' tblFeriados com um campo, no formato data, chamado FerData.
    ' Se HojeTb = True, a data inicial também será considerada.
    ' Se UltTb = true, a data final também será considerada.
    '....................................................................
    'adaptdo por Alexandre Neves para aceitar datas nulas
    On Error GoTo Err_DTS

    Dim intCount As Integer
    Dim rst As DAO.Recordset
    Dim db As DAO.Database

    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT [FerData] FROM tblFeriados", dbOpenSnapshot)

    If HojeTb Then
    dtInicio = dtInicio + 1
    End If
    ' Se desejar contar a data de início, passe True em HojeTb

    intCount = 0

    If UltTb Then
    Do While dtInicio <= dtFim
    rst.FindFirst "[FerData] = #" & Format(dtInicio, "mm/dd/yyyy") & "#"
    If Weekday(dtInicio) <> vbSunday And Weekday(dtInicio) <> vbSaturday Then
    If rst.NoMatch Then intCount = intCount + 1
    End If
    dtInicio = dtInicio + 1
    Loop
    Else
    Do While dtInicio < dtFim
    rst.FindFirst "[FerData] = #" & Format(dtInicio, "mm/dd/yyyy") & "#"
    If Weekday(dtInicio) <> vbSunday And Weekday(dtInicio) <> vbSaturday Then
    If rst.NoMatch Then intCount = intCount + 1
    End If
    dtInicio = dtInicio + 1
    Loop
    End If
    DTS = intCount

    Exit_DTS:
    Exit Function

    Err_DTS:
    Select Case Err
    Case Else
    MsgBox Err.Description
    Resume Exit_DTS
    End Select

    End Function


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    matutano
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 355
    Registrado : 16/05/2011

    Re: [Resolvido]consulta retorna erro

    Mensagem  matutano em 10/2/2013, 19:14

    ao Alexandre Neves e ao site o meu muito obrigado.
    funcionou na perfeição
    Obrigado


    Rgomes71
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1
    Registrado : 11/07/2017

    Me ajudem

    Mensagem  Rgomes71 em 19/7/2017, 14:59

    Estou usando esta função VB no access, mas continuo com um problema para calcular os dias uteis entre 02 datas, desconsiderando os feriados e finais de semana.

    Da função original abaixo, só alterei a opção UltTb para True para contar o dia da entrega.

    Public Function DTS(Optional dtInicio = 0, Optional dtFim = 0, Optional HojeTb As Boolean = False, Optional UltTb As Boolean = True As Integer

    Meu problema é que quando a data de inicio (HojeTb) cai num final de semana (ex. sábado) não traz a informação que preciso.

    Exemplo:
    PEDIDO ENTROU (HojeTb): 24/06/2017 (sábado) e  PEDIDO FOI ENTREGUE (UltTb): 27/06/2017 (terça-feira) => resultado atual 02 dias uteis.

    Eu quero que quando o pedido entre num sábado ou domingo, ele vá para o próximo dia útil (neste caso segunda-feira). Então deveria ficar:
    PEDIDO ENTRARIA (HojeTb): 26/06/2017 (sábado) e  PEDIDO FOI ENTREGUE (UltTb): 27/06/2017 (terça-feira) => resultado atual 01 dia útil.

    ALGUÉM PODE ME AJUDAR?
    avatar
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Re: [Resolvido]consulta retorna erro

    Mensagem  Alexandre Neves em 19/7/2017, 21:08

    Boa noite, e bem-vindo ao fórum
    Leia e respeite as regras
    - não altere o título, o título serve para resumir a dúvida e não para mensagem
    - escrever em maiúsculas significa gritar
    Edite a sua mensagem e adeqúe de acordo com as regras

    Sobre a sua dúvida, disponibilize dados significativos


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: 14/11/2018, 11:50