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]Código para campo de auto numeração

    OLDRIVG
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 372
    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 : 6389
    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 : 372
    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 : 372
    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 : 38
    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...

    Conteúdo patrocinado

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

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 5/12/2019, 19:19