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]Numeração automática de um campo com base em um campo data

    Compartilhe

    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 21/2/2018, 14:04

    Bom dia.
    Tentando resolver velhos problemas

    No meu formulário tenho um campo data no formato 21/02/2018 e outro campo de texto onde insiro números no formato 0001, 0002, 0100, etc
    Gostaria que esse campo tivesse um preenchimento automático com base na data, ou seja  0001....,0100 e assim sucessivamente para o ano 2018.

    Nesse contexto o mestre Fabio Paes já me auxiliou com o seguinte comando:

    Me.meu_campo = Format(Nz(DMax("meu_campo", "Minha_Tabela"), 0) + 1, "0000")

    No entanto, gostaria que a partir do momento que a data mudasse para 01/01/2019 a contagem reiniciasse em 0001 para o campo de texto.

    Já tentei adaptar um modulo do fórum, mas não deu certo porque não considera um campo data digitado pelo usuário.

    Obrigado

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3632
    Registrado : 29/06/2012

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  Noobezinho em 21/2/2018, 14:12

    Rodrigues

    Não acha que está faltando algo nesses números?

    Digamos que já tenha os números do ano passado (2017) do 0001 até 0100.

    Quando adicionar o primeiro número do ano 2018 (0001) terá dois números com esse valor.

    O que irá diferenciar eles?

    Aguardo...

    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 21/2/2018, 14:20

    Realmente você tem razão existirão números iguais para anos diferentes. Isso não atrapalha o meu trabalho, no entanto não sei se atrapalha para a resolução do que quero fazer.
    O problema que eu vejo em mudar ou inserir algum campo no BD é que ele já tem mais de mil registros.
    Neste caso qual seria a sugestão.
    obrigado

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3632
    Registrado : 29/06/2012

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  Noobezinho em 21/2/2018, 17:06

    Aqui está um exemplo de autonumeração com o ano:

    0001/2018

    Ele reinicia a numeração ao começar novo ano.


    [ ]'s

    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 21/2/2018, 19:33

    Olá.
    Infelizmente esse exemplo é semelhante a um que já vi no fórum. Queria algo mais específico com base no campo data, uma vez que tenho consultas no BD que utilizam o campo data para concatenar um número que junte o "numerosequencial"+"outro campo"+ "o ano do campo data".

    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  CassioFabre em 21/2/2018, 20:23

    Boa tarde,

    Já tive um problema semelhante e resolvi da seguinte maneira num sistema que tenho funcionando:

    - Eu tenho um campo na tabela que armazena apenas o ano (anopackinglist) de cada registro.
    - Eu tenho outro campo que armazena apenas o número (numeropackinglist) de cada registro.
    -Tenho também uma função que pega a data de hoje de um site da internet (getDataHoje), isso evita que usuários maliciosos alterem a data do computador afim de fazer registros em datas irreais. No seu caso, vai usar o seu campo de data do formulário.
    - tblPackingList é a tabela em si.

    Código:
    If DCount("packinglist", "tblPackingList") = 0 Then
                txtPackingList = "001/" & Year(getDataHoje)
            Else
                If DMax("anopackinglist", "tblPackingList") <> Year(getDataHoje) Then
                    txtPackingList = "001/" & Year(getDataHoje)
                Else
                    If DMax("numeropackinglist", "tblPackingList", "anopackinglist = " & Year(getDataHoje) & "") < 10 Then
                        txtPackingList = "00" & DMax("numeropackinglist", "tblPackingList", "anopackinglist = " & Year(getDataHoje) & "") + 1 & "/" & Year(getDataHoje)
                    ElseIf DMax("numeropackinglist", "tblPackingList", "anopackinglist = " & Year(getDataHoje) & "") < 100 Then
                        txtPackingList = "0" & DMax("numeropackinglist", "tblPackingList", "anopackinglist = " & Year(getDataHoje) & "") + 1 & "/" & Year(getDataHoje)
                    Else
                        txtPackingList = DMax("numeropackinglist", "tblPackingList", "anopackinglist = " & Year(getDataHoje) & "") + 1 & "/" & Year(getDataHoje)
                    End If
                End If
            End If

    Por fim, basta preencher o campo que vai receber o seu código (no meu caso é o campo txtPackingList) com o resultado da operação. Eu fiz esse código há muito tempo, quando ainda estava iniciando meus estudos em VBA. Então, provavelmente há maneiras melhores de fazer do ponto de vista do desempenho. Mas ao menos para se ter uma ideia, vai funcionar.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3632
    Registrado : 29/06/2012

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  Noobezinho em 21/2/2018, 22:56

    Eu apenas deu um norte, ou seja,

    baseado no exemplo, poderia fazer o teu código.

    O mesmo está fazendo o Cassio.

    Dificilmente conseguirá um código pronto.


    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 22/2/2018, 16:44

    Boa tarde Cassio.

    Vou tentar adaptar o código porque não entendo de VBA, mas tenho algumas dúvidas

    No código o campo "packinglist" armazena o que?

    No meu formulário o campo que irá armazenar o número se Chama "Nr_Credencial" que vem de uma tabela Tbl_Credencial que possui um campo Nr_Credencial.

    Tentei adptar o código assim:

    If DCount("packinglist", "Tbl_Credencial") = 0 Then
               txtPackingList = "001/" & Year(Dt_Exp)
           Else
               If DMax("ano", "Tbl_Credencial") <> Year(Dt_Exp) Then
                   txtPackingList = "001/" & Year(Dt_Exp)
               Else
                   If DMax("Nr_Credencial", "Tbl_Credencial", "ano = " & Year(Dt_Exp) & "") < 10 Then
                       txtPackingList = "00" & DMax("Nr_Credencial", "Tbl_Credencial", "ano = " & Year(Dt_Exp) & "") + 1 & "/" & Year(Dt_Exp)
                   ElseIf DMax("Nr_Credencial", "Tbl_Credencial", "ano = " & Year(Dt_Exp) & "") < 100 Then
                       txtPackingList = "0" & DMax("Nr_Credencial", "Tbl_Credencial", "ano = " & Year(Dt_Exp) & "") + 1 & "/" & Year(Dt_Exp)
                   Else
                       txtPackingList = DMax("Nr_Credencial", "Tbl_Credencial", "ano = " & Year(Dt_Exp) & "") + 1 & "/" & Year(Dt_Exp)
                   End If
               End If
           End If

    Outra dúvida é em qual evento coloco o código no campo Nr_Credencial

    Agradeço a atenção.
    avatar
    CassioFabre
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 728
    Registrado : 18/01/2013

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  CassioFabre em 22/2/2018, 17:02

    Boa tarde,

    O campo "packinglist" no meu caso é o número de um documento chamado Packing List. Mas eu usei aqui apenas para contar os registros da tabela, voce pode usar qualquer campo que voce tenha na sua tabela. O seu campo do formulário que armazenará o número do código, voce vai usar o no lugar do campo "txtPackingList", pois no meu caso é esse que armazena o código que eu crio aqui.

    Abraço.


    .................................................................................
    Só não tem código pra morte!

    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 22/2/2018, 19:07

    Boa tarde Cassio.

    Tentei adaptar o código para o meu BD e funcionou parcialmente, conforme exemplo anexo

    Campo que vai armazenar o número "Nr_Credencial"

    O código está inserindo o número 0001/2018 no Campo Nr_Credencial ao receber foco, no entanto quando cadastro um novo registro o Nr_Credencial deveria somar +1 ou seja 0002/2018. Não sei onde estou errando porque o campo é atualizado com o mesmo valor, ou seja 0001/2018.

    Obrigado pela atenção

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3632
    Registrado : 29/06/2012

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  Noobezinho em 22/2/2018, 22:02

    Rodrigues

    Substitua o código por esse:
    Código:

    If DCount("Nr_Credencial ", "Tbl_Credencial") = 0 Then
       Nr_Credencial = Format("1", "0000") & "/" & Year(Date)
    Else
       If Right(DMax("[Nr_Credencial]", "Tbl_Credencial", "Right([Nr_Credencial],4)= " & Year(Date)), 4) <> Year(Date) Then
          'aqui é a virada de ano, volta para 0001/novo ano.
          Nr_Credencial = Format("1", "0000") & "/" & Year(Date)
       Else
         Nr_Credencial = Format(Left(DMax("[Nr_Credencial]", "Tbl_Credencial", "Right([Nr_Credencial],4)= " & Year(Date)), 4) + 1, "0000") & "/" & Year(Date)
       End If
    End If
    End Sub

    [ ]'s

    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 23/2/2018, 00:09

    Boa noite Noobezinho, desde já agradeço a disponibilidade

    Substitui o código, mas não funcionou como desejado.

    Inseri um primeiro registro no formulário Frm_Credencial com data no campo Dt_Exp_Credencial 22/02/2018 e o campo Nr_Credencial foi atualizado para 0001/2018, tudo beleza

    Inseri um segundo registro no formulário Frm_Credencial com data no campo Dt_Exp_Credencial 22/02/2018 e o campo Nr_Credencial continuou 0001/2018, deveria ter sido atualizado para 0002/2018

    Inseri um terceiro registro no formulário Frm_Credencial com data no campo Dt_Exp_Credencial 22/02/2019 e o campo Nr_Credencial continuou 0001/2018, deveria ter sido atualizado para 0001/2019.

    Não consegui inserir as imagens porque não aparece a ferramenta para hospedar imagem para mim, mas estou encaminhado novamente o BD.

    Na verdade o campo deve ser numerado e atualizado com base na data cadastrada pelo usuário no campo Dt_Exp

    Como disse, agradeço a disponibilidade em ajudar o leigo.
    obrigado

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3632
    Registrado : 29/06/2012

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  Noobezinho em 23/2/2018, 00:47

    Substitua essa linha ou adicione a parte em vermelho

    If Eval(Right(DMax("[Nr_Credencial]", "Tbl_Credencial", "Right([Nr_Credencial],4)= " & Year(Date)), 4)) <> Year(Date) Then

    Não esqueça o parenteses em vermelho entre o 4 e o sinal de =

    RodriguesChqao
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Anónimo
    Mensagens : 104
    Registrado : 31/05/2016

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  RodriguesChqao em 23/2/2018, 12:19

    Valeu Noobezinho funcionou perfeitamente.

    Muito obrigado!

    Noobezinho
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3632
    Registrado : 29/06/2012

    Re: [Resolvido]Numeração automática de um campo com base em um campo data

    Mensagem  Noobezinho em 23/2/2018, 12:26

    Ótimo!

    Valeu pelo retorno!

    Boa sorte!

      Data/hora atual: 22/10/2018, 01:15