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


2 participantes

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    leoni_dias
    leoni_dias
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 14/08/2011

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  leoni_dias 21/8/2019, 18:49

    Boa tarde a todos do fórum.

    Fazendo questão de mostrar aqui a melhor função para cálculo de datas que usei (sempre nas outras aconteciam erros) do mestre Avelino (com modificação simples para uso de duas datas), aproveito para pedir uma ajuda...
    Teria como realizar uma subtração de tempo entre datas usando essa função?

    Exemplo: Vamos dizer que algo deveria ser feito entre 01/01/2019 e 01/08/2019, porém, teve um período entre essas datas, entre 05/03/2019 e 25/05/2019 em que o trabalho não foi realizado.

    Teria como usando essa função realizar esse cálculo de 23/08/2019 - 01/01/2018 que dá pela função 1 ano 7 meses e 22 dias e ainda diminuir desse resultado o cálculo 25/05/2019 - 05/03/2019 que dá 2 meses e 20 dias?

    Esse é só um exemplo.

    Código:
    Private Function fncIdadeCompleta(DataEnt As Date, DataSai As Date) As String
    Dim ANOS As Byte, Meses, dias As Byte, DataRef As Date
    Dim Resultado As Boolean

    If IsNull(DataSai) = True Then
      DataSai = Date
    End If

    If DataEnt > DataSai Or DataEnt = 0 Then
       fncIdadeCompleta = ""
       Exit Function
    End If

    If DataEnt = DataSai Then
       fncIdadeCompleta = "Menos de 24 horas"
       Exit Function
    End If

    'Ajusta ano bissexto
    DataEnt = IIf(Format(DataEnt, "mm/dd") = "02/29", DataEnt - 1, DataEnt)

    ANOS = Int((Format(DataSai, "yyyymmdd") - Format(DataEnt, "yyyymmdd")) / 10000)

    Resultado = (Format(DataEnt, "mmdd") > Format(DataSai, "mmdd"))

    DataRef = DateSerial(Year(DataSai) + Resultado, Format(DataEnt, "mm"), Format(DataEnt, "dd"))

    Meses = DateDiff("m", DataRef, DataSai) + (Format(DataEnt, "dd") > Format(DataSai, "dd"))

    Resultado = (Format(DataEnt, "dd") > Format(DataSai, "dd"))

    DataRef = DateSerial(Year(DataSai), Format(DataSai, "mm") + Resultado, Format(DataEnt, "dd"))
    DataRef = IIf(Format(DataEnt, "dd") <> Format(DataRef, "dd"), DataRef - Format(DataRef, "dd"), DataRef)

    dias = CDbl(DataSai) - CDbl(DataRef)

    fncIdadeCompleta = IIf(ANOS <= 1, IIf(ANOS = 0, "", ANOS & " ano "), ANOS & " anos ") & _
                                 IIf(Meses <= 1, IIf(Meses = 0, "", Meses & " mes "), Meses & " meses ") & _
                                 IIf(dias <= 1, IIf(dias = 0, "", dias & " dia "), dias & " dias ")
    End Function
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty Re: [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  DamascenoJr. 23/8/2019, 01:57

    Para isso suspenda o cálculo da idade completa e use apenas dias para informar o tempo. Se há um período que o trabalho não foi realizado, certamente pode haver dois. Isso aumenta a complexidade do código e dificulta sua manutenção. Sem falar que deixará de ficar preciso pois nas pausas perde-se a referência dos cálculos de meses.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    leoni_dias
    leoni_dias
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 14/08/2011

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty Re: [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  leoni_dias 23/8/2019, 02:33

    Boa noite, Ivan.

    O meu problema realmente é esse.

    Fiz uma função usando o cálculo de dias entre as datas principais, entre as datas internas e subtraindo esse tempo em dias das internas do cálculo entre as principais... beleza.

    O problema é a imprecisão que sempre causa quando tenho que usar o mês com média de 30 dias. O fato do ano bissexto não é problema, o cálculo é realizado a contento, mas, por causa das diferenças entre os meses, usar esse cálculo de dias não funciona com perfeição.

    Tinha esperança que o mestre Avelino através da construção dessa função altamente precisa pudesse me ajudar.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty Re: [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  DamascenoJr. 24/8/2019, 05:57

    O que quero dizer é que deixe apenas em dias. Não tentar dividir por 30 para montar meses ou por 365 para montar ano. Use apenas dias tanto para cálculos quanto para resultados.

    As pausas durante os períodos deixam qualquer cálculo impreciso sobre quando considerar mês. Tanto os seus, quanto os do Avelino.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    leoni_dias
    leoni_dias
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 179
    Registrado : 14/08/2011

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty Re: [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  leoni_dias 24/8/2019, 16:04

    Bom dia.

    Como se diz... "dos males, o menor".

    Parcialmente resolvi de uma forma a dar menos erros possíveis.

    Antes de entrar nos cálculos coloquei...


    diasdatasintermediarias = dataSai2 - dataent2 '-------obtive a quantidade em dias da diferença entra as duas datas internas
    DataSai = DataSai - diasdatasintermediarias '---------diminui da data final os dias corridos entre as datas internas e obtive a nova data final

    Com isso a falta de precisão se resumiu a 1 ou 2 dias... dos males, o menor.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty Re: [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  DamascenoJr. 24/8/2019, 16:08

    O fórum agradece o retorno. Sucesso.


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    Conteúdo patrocinado


    [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino) Empty Re: [Resolvido]Cálculo de Datas (Dúvida ao mestre Avelino)

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 28/4/2024, 05:42