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

5 participantes

    Time In e Time Out na mesma linha

    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

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

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

    Mensagem  Fernando Lucas 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 7 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8019
    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 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    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 17/10/2020, 19:32

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

    crysostomo
    crysostomo
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 50%

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

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

    Mensagem  crysostomo 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    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 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3740
    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 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


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.

    Fernando Lucas gosta desta mensagem

    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    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 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
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 50%

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

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

    Mensagem  crysostomo 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    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 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
    Maximo VIP
    Maximo VIP

    Respeito às regras : Respeito às Regras 50%

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

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

    Mensagem  crysostomo 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3740
    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 18/10/2020, 16:48

    Fernando,

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

    Aguardamos




    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 8019
    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 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    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 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3740
    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 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


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    avatar
    Fernando Lucas
    Novato
    Novato

    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 13
    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 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 : Respeito às Regras 100%

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

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

    Mensagem  DamascenoJr. 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 : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3740
    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 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!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso irrestrito ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.

      Data/hora atual: 22/9/2021, 07:06