MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    Time In e Time Out na mesma linha

    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 17/10/2020, 14:14

    Bom dia pessoal,
    No meu sistema cada vez que o Usuário faz LogIn ou LogOut  do Programa é gerado um registro na tabela LogUserInOut, campos: IdUsuario; LogDate; LogTime; LogInOut.
    No campo LogInOut é armazenado “In” quando o usuário Entra e “Out” quando Encerra/Fecha o programa. Até aqui sem problemas.

    Como gero uma consulta ou relatório da tabela juntando na mesma linha/registro o Time In e o Time Out de cada Usuário?

    Exemplo tabela LogUserInOut:
    IdUsuario; LogDate; LogTime;  LogInOut
    Avelino; 01/10/2020; 10:00:00; In
    Avelino; 01/10/2020; 10:15:00; Out
    Avelino ; 01/10/2020; 12:00:00; In
    Avelino; 01/10/2020; 12:10:00; Out
    Fernando; 01/10/2020; 10:05:00; In
    Fernando; 01/10/2020; 10:30:00; Out
    Fernando; 01/10/2020; 14:00:00; In
    Fernando; 01/10/2020; 15:00:00; Out

    Consulta ou Relatório desejado:
    IdUsuario; LogDate; Time In; Time Out
    Avelino; 01/10/2020; 10:00:00; 10:15:00
    Avelino; 01/10/2020; 12:00:00; 12:10:00
    Fernando; 01/10/2020; 10:05:00; 10:30:00
    Fernando; 01/10/2020; 14:00:00; 15:00:00

    Obrigado.
    Anexos
    Time In e Time Out na mesma linha AttachmentLogInOut.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (18 Kb) Baixado 4 vez(es)


    Última edição por feweb em 17/10/2020, 19:28, editado 1 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Alexandre Neves em 17/10/2020, 17:18

    Boa tarde e bem-vindo ao fórum
    Sem dados é mais difícil mas vamos tentar
    Seria melhor se tivesse campo de registo
    SELECT IdUsuario, LogDate, LogTime, (SELECT LogInOut FROM LogUserInOut as T2 WHERE IsNull(LogTime) and T1.IdUsuario=T2.IdUsuario and T1.LogDate=T2.LogDate) FROM LogUserInOut as T1 WHERE IsNull(LogInOut)


    .................................................................................
    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
    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 17/10/2020, 19:32

    Muito obrigado Alexandre, mas não funcionou. Acrescentei o programa adaptado ao questionamento.

    crysostomo
    crysostomo
    VIP
    VIP

    Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1383
    Registrado : 23/01/2018

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  crysostomo em 17/10/2020, 20:23

    Boa tarde . faz pelo recorset
    coloca seu bd aqui


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 17/10/2020, 20:28

    Em anexo, o programa adaptado ao questionamento.
    Anexos
    Time In e Time Out na mesma linha AttachmentLogInOut.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (18 Kb) Baixado 4 vez(es)
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3626
    Registrado : 04/04/2010

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Avelino Sampaio em 17/10/2020, 20:43

    Olá!

    Minha sugestão é que o senhor revise o projeto, para inserir os dados com uma lógica diferente.

    - a tabela deve conter o campo do tipo auto numeração (idlog) - não olhei o seu projeto anexo
    - desmembre o campo logtime em TimeIn e TimeOut
    - não irá precisar do campo LoginOut
    - quando o usuário entrar, o senhor grava a entrada na tabela e numa variável(lngIdLog) global armazena o idLog.  Exemplo:

    12345 |  Avelino  |  17/10/2020  |  10:00:00 |

    - quando o usuário sair, o senhor atualiza o registro já salvo na entrada, bastando utilizar o idLog armazenado na memória.  Neste exemplo o valor da variável lngIdLog sugerida estaria com o valor 12345.  Ficando assim a consulta atualização:

     Currentdb.execute "UPDATE LogUserInOut SET TimeOut = " & time & " WHERE idLog = " & lngIdLog & ";"


    Após atualização o senhor terá a tabela preenchida assim:

    12345 |  Avelino  |  17/10/2020  |  10:00:00 |  11:15:00

    Aguardamos


    .................................................................................
    Quer aprender a montar ribbons ?  
    Clique AQUI e conheça o meu aplicativo.

    Fernando Lucas gosta desta mensagem

    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 17/10/2020, 22:52

    Obrigado Sr. Avelino pela sugestão,

    Já utilizem no programa tabela semelhante ao sugerido com campos TimeIn e TimeOut e  com variável global que gravava IdLog, mas funcionava somente quando estava em ambiente monousuário. Com mais de um usuário acessando o programa a variável global é modificada para a última entra de um usuário, e ao fazer o Update o programa gravava o TimeOut  em outro registro. Pensei em utilizar um array global(IdUsuario) = IdLog.

    Vou continuar um pouco mais com a outra solução. Vou pensar também em voltar para a sua sugestão, mas sem a utilização de variável global.

    Penso num Update com Where IdUsuario, Max(LogDateIn) para achar o último registro do Usuário, então gravar o TimeOut.
    Muito, muito obrigado.
    crysostomo
    crysostomo
    VIP
    VIP

    Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1383
    Registrado : 23/01/2018

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  crysostomo em 18/10/2020, 02:05

    em anexo


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 18/10/2020, 15:59

    Sr. Crysostomo,
    Verifiquei seu arquivo e não consta nenhuma solução ao questionamento inicial.
    O Sr. acrescentou dois Forms de Login tentando registrar a entrada e a saída.
    Obrigado pela sugestão, mas o meu projeto ja faz isso.
    O que estou necessitando agora, é fazer umas consultas/relatórios mais elegantes com os dados do projeto, através, por exemplo de um SQL juntando o TimeIn e TimeOut numa mesma linha.
    Acho que o arquivo pode confundir outros, pois o Sr. modificou consideravelmente os dados sendo impossível gerar consulta/relatorio.
    Grato.


    Última edição por feweb em 18/10/2020, 16:37, editado 1 vez(es)
    crysostomo
    crysostomo
    VIP
    VIP

    Respeito às Regras 50%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1383
    Registrado : 23/01/2018

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  crysostomo em 18/10/2020, 16:31

    Boa tarde, mandei o arquivo errado para fazer teste e deletei todos  após enviar . desculpa, vou dar uma olhada aqui se tenho uma cópia.
    da uma olhada aqui, se for esse o caso modifique algumas coisa
    https://www.maximoaccess.com/t35421p12-resolvidocomo-faco-para-digitar-uma-letra-maiscula-precionando-a-tecla-shift-no-campo-de-pesquisa-do-access#242462

    https://www.maximoaccess.com/t37806p5-resolvidoexibir-o-filtro-na-impressao-de-um-relatorio#258206


    .................................................................................
    Uma mão ajuda a outra.
    Feliz aquele que transfere o que sabe e aprende o que ensina.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3626
    Registrado : 04/04/2010

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Avelino Sampaio em 18/10/2020, 16:48

    Fernando,

    ao realizar o login, de que forma o senhor armazena as informações do usuário logado ?

    Aguardamos




    .................................................................................
    Quer aprender a montar ribbons ?  
    Clique AQUI e conheça o meu aplicativo.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

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

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Alexandre Neves em 18/10/2020, 17:32

    Boa tarde
    Num módulo
    Código:
    Function HoraSaida(IdUsuario As String, LogDate As Date, LogTime As Date) As Date
        '--------------------------------------------------------------'
        '  código criado por Alexandre Neves, do Fórum MaximoAccess  '
        '    utilize o código livremente mas mantenha os créditos    '
        '--------------------------------------------------------------'
        Dim Rst As DAO.Recordset
       
        Set Rst = CurrentDb.OpenRecordset("SELECT * FROM tLogUserInOut LEFT JOIN tUsuarios ON tLogUserInOut.IdUsuario=tUsuarios.IdUsuario ORDER BY tLogUserInOut.IdUsuario, LogDate, LogTime")
        Rst.FindFirst "tUsuarios.IdUsuario=" & IdUsuario & " and LogDate=#" & LogDate & "# and LogTime=#" & LogTime & "#"
        Do
            If Rst("tUsuarios.IdUsuario") = IdUsuario And Rst("LogDate") = LogDate And Rst("LogInOut") = "Out" Then HoraSaida = Rst("LogTime"): Exit Do
            Rst.MoveNext
        Loop
    End Function

    Consulta
    SELECT IdUsuario, LogDate, LogTime, HoraSaida( IdUsuario, LogDate, LogTime) AS HoraSaida FROM tLogUserInOut WHERE LogInOut='In';


    .................................................................................
    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

    Fernando Lucas gosta desta mensagem

    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 18/10/2020, 18:30

    Alexandre Neves,

    Quase resolvido Alexandre,
    Ao revisar a consulta gerada verifiquei que em alguns casos a HoraSaída está errada. Ex (Fernando 14:00:00 10:30:00)
    Mas mesmo assim Top, top...
    Obrigado.

    PS
    Marquei o Tópico/questionamento  erradamente com a Tag  Resolvido, mas não sei como remove-lá.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3626
    Registrado : 04/04/2010

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Avelino Sampaio em 18/10/2020, 19:37

    Fernando,

    ainda acho que o senhor deva mudar a forma de lançamento, conforme minha sugestão. Creio que o senhor consiga solucionar se utilizando da colação TempVars. Por gentileza, responda ao meu ultimo questionamento.

    Aguardamos


    .................................................................................
    Quer aprender a montar ribbons ?  
    Clique AQUI e conheça o meu aplicativo.
    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 12/09/2017

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Fernando Lucas em 18/10/2020, 21:04

    Sim Avelino, vou migrar para a sua sugestão, mas antes de migrar queria melhorar a consulta com o TimeIn e TimeOut na mesma linha.
    São muitos registros de Logs.
    Se não conseguir melhorar a apresentação da consulta com os dados atuais, não tem muito problema não.
    Como os projetos estão em produção tenho que migrar com cautela.

    Vou tentar responder o seu questionamento: (depois devo abrir novo Tópico focado no Log)

    Vou testar a sua solução de TempVars para o IdLog.
    Utilizo TempVars para a maioria dos dados do Usuario, mas armazenava o IdLog em uma variável Public. (isso no antigo projeto)
    TempVars!IdUsuario = Nz(rs!IdUsuario.Value, 0)
    TempVars!Usuario = Nz(rs!UsuarioNomeCurto.Value, "")
    TempVars!IdSetor = Nz(rs!IdSetor.Value, 0)
    TempVars!IdGrupo = Nz(rs!IdGrupo.Value, 0)

    Como ja tenho muitos dados de Logs, conforme mostrado no inicio do Topico, estou focado agora, em apresentar melhor esses dados.
    Obrigado novamente.



    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador

    Respeito às Regras 100%

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

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  DamascenoJr. em 18/10/2020, 21:28



    .................................................................................
    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.

    Fernando Lucas gosta desta mensagem

    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3626
    Registrado : 04/04/2010

    Time In e Time Out na mesma linha Empty Re: Time In e Time Out na mesma linha

    Mensagem  Avelino Sampaio em 18/10/2020, 22:11

    Fernando,

    minha sugestão para futura alteração no projeto é essa:

    1) Entrada ( acrescente na tabela os campos Idlog - Numeração Automática /  TimeIn / TimeOut )

    Dim rs As DAO.Recordset
    If IsNull(TempVars!IdUsuario) Then Exit Sub
    Set rs = CurrentDb.OpenRecordset("tLogUserInOut")
    rs.AddNew
       TempVars.Add "id" & TempVars!idUsuario, rs!idLog.Value
       rs!idUsuario = TempVars!idUsuario
       rs!LogDate = Date
       rs!timein = Time
    rs.Update
    rs.Close
    Set rs = Nothing


    2) Saída

    If IsNull(TempVars("id" & TempVars!idUsuario)) Then Exit Sub
    CurrentDb.Execute "UPDATE tLogUserInOut SET timeout = '" & Time & "' WHERE idlog = " & TempVars("id" & TempVars!idUsuario) & ";"
    TempVars.Remove ("id" & TempVars!idUsuario)


    Sucesso!


    .................................................................................
    Quer aprender a montar ribbons ?  
    Clique AQUI e conheça o meu aplicativo.

      Data/hora atual: 24/10/2020, 10:23