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

    [Resolvido]Código para campo de auto numeração

    OLDRIVG
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 20/07/2010

    [Resolvido]Código para campo de auto numeração Empty [Resolvido]Código para campo de auto numeração

    Mensagem  OLDRIVG em 28/9/2018, 14:31

    Prezados do forum, bom dia. Estou tentando adaptar o código abaixo, criado pelo Membro deste Forum AhTeixeira, para um BD que estou a construir e fiquei agarrado.
    O código é o seguinte:

    Private Sub Form_Current()
    'ahteixeira 2016 para MaximoAccess v1.1
       If CStr(Me.NewRecord) = -1 Then
           
           If DCount("*", "CI", "Right([NrCI],4) = " & Year(Date)) <> 0 Then
               Me.txtNrCI = Format(Left(DMax("[NrCI]", "CI", "Right([NrCI],4)= " & Year(Date)), 4) + 1, "0000") & "/" & Year(Date)
           Else
           MsgBox "Reiniciando contagem dos registros para o novo ano." _
           & vbCrLf & "No aplicativo, retire essa msgbox.", vbInformation, "Aviso"
           
           Me.txtNrCI = Format("1", "0000") & "/" & Year(Date)
           End If
       End If


    Estou tentando incrementá-lo em um BD que possui uma tabela "TBL_GERAL" e um formulário "FRM_PROTOCOLO", e o código será usdo no campo "Sequencial".
    Fiz as substituições dos nomes que estão no código pelos que consta no BD. Entretanto, ao abrir o formulário, retorna erro com a msg. "If DCount("*", "frm_protocolo", "Right([NrCI],4) = " & Year(Date)) <> 0 Then

    Com as adaptações, o código que inseri ficou da forma abaixo:

    Private Sub Form_Current()
    If CStr(Me.NewRecord) = -1 Then
           
           If DCount("*", "frm_protocolo", "Right([NrCI],4) = " & Year(Date)) <> 0 Then
               Me.Sequencial = Format(Left(DMax("[NrCI]", "frm_protocolo", "Right([NrCI],4)= " & Year(Date)), 4) + 1, "0000") & "/" & Year(Date)
           Else
           MsgBox "Reiniciando contagem dos registros para o novo ano." _
           & vbCrLf & "No aplicativo, retire essa msgbox.", vbInformation, "Aviso"
           
           Me.Sequencial = Format("1", "0000") & "/" & Year(Date)
       End If
       End If
       End Sub


    Caso alguém tenha alguma informação que possa me ajudar, desde já agradeço.
    ahteixeira
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 6762
    Registrado : 15/03/2013

    [Resolvido]Código para campo de auto numeração Empty Re: [Resolvido]Código para campo de auto numeração

    Mensagem  ahteixeira em 28/9/2018, 15:08

    Olá Oldri,

    Estive a ver o código está a fazer o DCount a um formulario e não à tabela.
    Depois também está a ir buscar o DMax a um formulario e não tabela.

    Agora pelo codigo, não compreendi se pretende fazer a numeração ao NrCI (cliente) ou como descreveu ao campo Sequencial da tabela TBL_GERAL.

    Pode postar a base de dados com os objectos envolvidos (Tabela e form) para se testar e mais detalhes.

    Abraço
    OLDRIVG
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 20/07/2010

    [Resolvido]Código para campo de auto numeração Empty Re: [Resolvido]Código para campo de auto numeração

    Mensagem  OLDRIVG em 28/9/2018, 18:33

    Olá, Ahteixeira, agradeço a atenção.
    Estou a enviar-lhe o anexo do BD com o código implementado e erro.

    A minha intenção é utilizar o seu código para que seja criados uma numeração sequencial no campo "Sequencial", com o reinicio a cada ano e que permita cancelar o numero que for gerado se não concluir o registro. (Me desculpe se não me fiz entender)
    Desde já agradeço.

    Prezado, alterei o código, tirando a referencia de formulário por tabela, ficando o código como abaixo:

    If CStr(Me.NewRecord) = -1 Then
           
           If DCount("*", "tbl_geral", "Right([NrCI],4) = " & Year(Date)) <> 0 Then
               Me.Sequencial = Format(Left(DMax("[NrCI]", "tbl_geral", "Right([NrCI],4)= " & Year(Date)), 4) + 1, "0000") & "/" & Year(Date)
           Else
           MsgBox "Reiniciando contagem dos registros para o novo ano." _
           & vbCrLf & "No aplicativo, retire essa msgbox.", vbInformation, "Aviso"
           
           Me.Sequencial = Format("1", "0000") & "/" & Year(Date)
       End If
       End If
    End Sub


    Ao abrir o formulário, retorna o erro em tempo de execução "2471".

    Há alguma forma de resolver? Desde já agradeço.
    Anexos
    [Resolvido]Código para campo de auto numeração AttachmentPROTOCOLO - para testes 27-09.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (257 Kb) Baixado 7 vez(es)
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10591
    Registrado : 04/11/2009

    [Resolvido]Código para campo de auto numeração Empty Re: [Resolvido]Código para campo de auto numeração

    Mensagem  JPaulo em 1/10/2018, 16:11

    Falta-lhe validar se a tabela está vazia, para poder gerar o numero e não pode usar funções destinadas a tabelas e consultas, referenciando direto o nome do form.

    Logo a seguir ao If CStr(Me.NewRecord) = -1 Then

    Código:
           
       If DCount("*", "TBL_ GERAL") = 0 Then
            Me.Sequencial = Format("1", "0000") & "/" & Year(Date)
            Exit Sub
        End If

    Trecho todo corrigido;

    Código:
    Private Sub Form_Current()
     If CStr(Me.NewRecord) = -1 Then
            
       If DCount("*", "TBL_ GERAL") = 0 Then
            Me.Sequencial = Format("1", "0000") & "/" & Year(Date)
            Exit Sub
        End If
        
            If DCount("*", "TBL_ GERAL", "Right([Sequencial],4) = " & Year(Date)) <> 0 Then
                Me.Sequencial = Format(Left(DMax("[Sequencial]", "TBL_ GERAL", "Right([Sequencial],4)= " & Year(Date)), 4) + 1, "0000") & "/" & Year(Date)
            Else
            MsgBox "Reiniciando contagem dos registros para o novo ano." _
            & vbCrLf & "No aplicativo, retire essa msgbox.", vbInformation, "Aviso"
            
            Me.Sequencial = Format("1", "0000") & "/" & Year(Date)
        End If
        End If
    End Sub


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Código para campo de auto numeração Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Código para campo de auto numeração Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Código para campo de auto numeração Folder_announce_new Instruções SQL como utilizar...
    OLDRIVG
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 373
    Registrado : 20/07/2010

    [Resolvido]Código para campo de auto numeração Empty Re: [Resolvido]Código para campo de auto numeração

    Mensagem  OLDRIVG em 1/10/2018, 17:57

    Prezado JPaulo, boa tarde.
    Agradeço a atenção. Funcionou "redondinho" e não vou retirar a msgbox. Aproveitarei para o aviso quando do inicio de um novo ano, com o fito de evitar confusões com o usuário final.
    Muito agradecido.
    Boa sorte


    Prezado JPaulo, bom dia.

    Desculpe-me pelo incomodo.
    Precisei refazer a sequencia da autonumeração "0000" para "00000", ou seja, acrescentei mais um dígito. Porém a numeração não saí do "00001", mesmo salvando vários registros.

    Qual alteração deverá ser feita nos código criado por você para funcione com a mudança? Ou não há como?

    Fiz as alterações em destacadas em vermelho.
    Public Function NumeracaoAno() As String
    'By JPaulo@2009
    Dim fazcodigo(1) As Integer, temporario As Integer

    fazcodigo(1) = Nz(DMax("Left(idsequencial,5)", "tbl_Cadastro", "Right(idsequencial,5)=Year(Date())"), 0)

       For I = 1 To UBound(fazcodigo)
           If temporario < fazcodigo(I) Then temporario = fazcodigo(I)
       Next

    NumeracaoAno = Format(temporario + 1, "00000-GAB") & "/" & Year(Date)

    End Function


    Obrigado


    Última edição por OLDRIVG em 4/10/2018, 12:46, editado 1 vez(es)
    JPaulo
    JPaulo
    Moderador
    Moderador

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 10591
    Registrado : 04/11/2009

    [Resolvido]Código para campo de auto numeração Empty Re: [Resolvido]Código para campo de auto numeração

    Mensagem  JPaulo em 2/10/2018, 11:23

    Fico feliz.

    Obrigado pelo retorno o forum agradece.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    [Resolvido]Código para campo de auto numeração Folder_announce_new Utilize o Sistema de Busca do Fórum...
    [Resolvido]Código para campo de auto numeração Folder_announce_new 102 Códigos VBA Gratuitos...
    [Resolvido]Código para campo de auto numeração Folder_announce_new Instruções SQL como utilizar...
    avatar
    ManuelQuim
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Angola
    Mensagens : 42
    Registrado : 29/10/2015

    [Resolvido]Código para campo de auto numeração Empty Duvida!

    Mensagem  ManuelQuim em 2/10/2018, 14:54

    Boa tarde Mestre JPaulo

    Por gentileza poderia comentar o código para poder compreende-lo Melhor...

      Data/hora atual: 8/7/2020, 04:24