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

    Somar Horas na Consulta

    Compartilhe
    avatar
    rlauro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 27/06/2014

    Somar Horas na Consulta

    Mensagem  rlauro em 3/10/2016, 13:19

    Prezados Professores, mais uma vez eu aqui, estou aprendendo access sozinho, pela internet e não é facil sem uma orientação, por isso venho aqui colocar minha duvida e ver se consigo ajuda.
    Tenho uma consulta onde quero somar o total de horas de uma subtração de horas. Por Exemplo Eu tenho o campo HoraInicial e HoraFinal
    Na consulta fiz assim: Exp1:format([HoraFinal]+1-[HoraInicial])  Agrupar por: Soma
    Só que esta dando errado pelo lançamentos  que tenho na tabela, visualizei todos por ex. ref. ao mês de agosto deveria da + de 74 horas
    Esta Consulta eu filtro pelo Nome do Motorista, pelo Mês, e pelo ano ai a consulta mostra só uma linha, chega a somar mas esta somando o resultado da subtração de horas errado. ele esta mostrando na Exp1 da consulta como resultado 12,7125 um numero estranho pois deveria mostrar soma de horas
    avatar
    Jair Martins
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 78
    Registrado : 23/03/2016

    Re: Somar Horas na Consulta

    Mensagem  Jair Martins em 14/10/2016, 21:13

    Olá, rlauro.

    Me diga, você está querendo fazer cálculos com horas cheias ou inclui também os minutos?
    Por exemplo:
    HoraFinal: 18:15
    HoraInicial: 14:28

    Se for este o caso, é preciso levar em conta que, tanto a quantidade de horas por motorista, quanto a soma de horas tem que levar em consideração que os valores de hora tem base 60, ou seja, cada hora tem 60 minutos e não 100 ou dez.
    Veja que a diferença, se for hora cheia e não levar em consideração os minutos, dá 4 horas.  Mas se levar em conta os minutos, o resultado é 3:47 h
    Assim sendo, é necessário criar uma função que faça o cálculo das horas diárias e outra que faça o cálculo da soma, sempre levando em consideração a base 60.

    Confirme isso, por favor. A partir dessa informação, vou poder ajudar mais concretamente.

    Abs.
    avatar
    Jair Martins
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 78
    Registrado : 23/03/2016

    Re: Somar Horas na Consulta

    Mensagem  Jair Martins em 14/10/2016, 21:15

    É importante também saber se as horas são do mesmo dia ou de dias diferentes, onde, por exemplo, a hora final é 10:45 e a hora inicial 20:42 do dia anterior.
    avatar
    rlauro
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 27
    Registrado : 27/06/2014

    Re: Somar Horas na Consulta

    Mensagem  rlauro em 14/10/2016, 23:24

    Professor e o seguinte: Uso o Access 2013 no tipo de dados Na tabela lançamento tem os campos HoraInicial e HoraFinal, formatados como hora abreviada ex.: 18:15
    Na tabela tenho os campos HoraInicial e HoraFinal e  Thoras  para este campo criei o campo calculado na tabela  [HoraFinal]+1-[HoraInicial] até ai tudo bem, uso estes campos também no formulário de Lançamentos de férias digito as hora inicial e final e ele subtrai certo.
    O motorista do dia por exemplo HoraInicial = 08:15    HoraFinal = 17:55
    O motorista da noite por exemplo HoraInicial = 18:55  Hora Final = 01:28   aqui acho que tem problema pois passa de 24 hs, e a horainical  e maior que hora final.
    Criei um relatório onde na linha coloca as horas trabalhadas exemplo, filtro os dados na consulta pelo prefixo, mês e ano
    no filtro prefixo 2010  mes Agosto ano 2016  apareces os registros com os horarios abaixo
    4:30
    10:52
    10:44                  Estes registros foram gerados pelo campo [Thoras]
    9:15                    Só que na soma =Soma([Thoras]) soma errado
    10:00
    10:55
    9:55
    9:05
    13:50
    Fiz esta soma manualmente da 89:06 Hs     so que no access ta somando errado, ja tente varios comandos Cdate(), e por ai vai
    Acho que é isso professor, aguardo orientação
    avatar
    Jair Martins
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 78
    Registrado : 23/03/2016

    Re: Somar Horas na Consulta

    Mensagem  Jair Martins em 15/10/2016, 17:01

    Olá, rlauro.

    Diante do que você informou, vamos precisar usar a seguinte estratégia:
    1- Criar na tabela uma campo DataInicial e outro DataFinal, já que a jornada pode se iniciar em um dia e terminar no outro.
    2- Como cada hora tem apenas 60 minutos, vamos criar uma função para calcular a quantidade de minutos entre HoraInicial e HoraFinal, levando em consideração a possibilidade de dias diferentes.
    3- Criar uma segunda função para reverter o resultado em minutos para o formato horas/minutos novamente. Isso apenas para exibir no form ou no relatório.
    4- Aplicar essas funções em momentos diferentes nos objetos, conforme a necessidade.

    Então, vamos lá:
    Vá na seção Módulos do seu aplicativo e crie um novo módulo. Copie as funções abaixo, cole dentro deste módulo e salve-o.

    Public Function CalcMinutos(DataEntrada As Variant, HoraEntrada As Variant, DataSaida As Variant, HoraSaida As Variant) As Integer

    Dim varInicial As Variant
    Dim varFinal As Variant
    Dim totalMinutos As Long
    Dim lngInterv As Variant

    If IsNull(HoraEntrada) Or IsNull(DataEntrada) Or IsNull(DataSaida) Or IsNull(HoraSaida) Then
    CalcMinutos = ""
    Exit Function
    End If

    varInicial = DataEntrada + HoraEntrada
    varFinal = DataSaida + HoraSaida
    lngInterv = varFinal - varInicial
    totalMinutos = Int(CSng(lngInterv * 1440))

    CalcMinutos = totalMinutos

    End Function

    Public Function ConverteHoras(QuantMinutos As Variant) As String

    Dim horas As Long
    Dim minutos As Long

    If IsNull(QuantMinutos) Then
    ConverteHoras = ""
    Exit Function
    End If

    horas = Int(CSng(QuantMinutos / 60))
    minutos = QuantMinutos Mod 60

    ConverteHoras = horas & ":" & minutos

    End Function


    O próximo passo é criar ou alterar a consulta de origem dos objetos (forms e relatórios). Nessa consulta você vai utilizar a função que calcula os minutos, em um novo campo, com a sintaxe:
    Exp1: CalcMinutos (DataInicial, HoraInicial, DataFinal, HoraFinal)

    Crie ainda um novo campo, se quiser exibir no formato hora:minutos, com a seguinte sintaxe:
    Exp2: ConverteHoras (Exp1)

    Nos objetos, você vai criar um campo para somar todos os minutos, deixá-lo oculto e criar um novo campo para exibir a conversão do total de minutos no formato correto.
    No evento Fonte do Controle desse campo, você coloca a expressão:
    = ConverteHoras(NomeDoCampoSoma)

    Tenha em mente que eu estas funções eu testei aqui num form de testes, mas não testei em consultas, ok?
    Mas deve dar certo.

    Qualquer problema, me avise.

    Abs.

      Data/hora atual: 17/8/2018, 14:48