Como faço uma macro para gerar um número de registro baseado no ano fiscal? (Acesso 2013)

Como faço uma macro para gerar um número de registro baseado no ano fiscal? (Acesso 2013)

Gostaria de criar um número recorde que se baseie no ano fiscal e avance automaticamente... Algo como: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002, etc.

Já tenho um campo [FiscalYr] (tipo de dados calculado) na minha tabela [Projects] baseado na seguinte expressão:

IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate])).  

O campo [EntryDate] é um campo de data/hora com um valor padrão de Date(). Isso está funcionando como eu gostaria.

Existe uma maneira de pegar esse número [FiscalYr] e colocá-lo na frente de um número de 3 dígitos que começa com 001 e aumenta em 1 com base no registro anterior, com o número sendo redefinido para 001 no início de cada novo ano fiscal? Nosso ano fiscal começa em 1º de outubro e termina em 30 de setembro.

Quero que o número seja gerado independentemente de as informações serem inseridas na tabela [Projetos] ou no formulário [Formulário de Projetos]. Não quero que seja gerado apenas se as informações forem inseridas no formulário. Vi alguns posts on-line sugerindo que a melhor maneira de fazer algo assim seria usar uma macro Antes da Mudança, mas a maioria dos exemplos que posso encontrar baseiam uma parte significativa do código da macro em uma data, e já obtive o questão de data resolvida (eu acho).

Eu ficaria bem com uma macro que criasse o ano fiscal a partir de [EntryDate] e criasse o número ao mesmo tempo, se isso for mais fácil do que trabalhar com meu campo [FiscalYr] existente. Sou apenas um usuário casual do Access, então, se estou falando algo sem sentido, sinto muito – acho que sei apenas o suficiente para ser perigoso.

Muito obrigado, Andréa


Atualização 09/12/2015:

Desisti da ideia macro.

Usando as dicas do blog da Scottgem (https://scottgem.wordpress.com/2009/11/25/numeração sequencial/), consegui colocar um sistema de numeração sequencial em funcionamento, mas ainda estou lutando muito para redefinir o número para 1 no início de um novo ano fiscal. Não tenho certeza se o problema é como estou gerando o valor do meu ano fiscal ou algo totalmente diferente.

Aqui está o que eu tenho:

Nome da Tabela: Projetos

Dentro de Projetos, tenho os seguintes campos relacionados a esse assunto:

  • ProjectNo: número - inteiro longo
  • Sequência: número - inteiro longo
  • EntryFiscalYr: calculado - inteiro longo; expressão é a seguinte:IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • DataEntrada: data/hora; valor padrão: Data()

Nome do formulário: Formulário de Projetos

Dentro do meu Formulário de Projetos, tenho os seguintes controles:

  • Sequência: caixa de texto, a origem do controle é o campo Sequência na tabela Projetos, definido como não visível
  • CreateProjNo: botão, evento ao clicar:

     Private Sub CreateProjNo_Click()
        Me.Sequence = Nz(DMax("[Sequence]", "Projects"), 0) + 1
        DoCmd.RunCommand acCmdSaveRecord
     End Sub
    
  • ProjectNo: caixa de texto, fonte de controle de dados:

     =[EntryFiscalYr] & Format([Sequence],"000")
    

Isso está sendo exibido como eu gostaria: 2016001, 2016002, etc.

Eu tentei várias iterações dos códigos no blog de Scottgem para trazer o campo EntryFiscalYr para a instrução DMax para verificar se o número de sequência deve continuar aumentando para o ano fiscal atual ou recomeçar para o novo ano fiscal, mas nenhuma das minhas tentativas estão funcionando.

Eu tentei:

 Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”,”[EntryFiscalYr]) = “ &(Me.[EntryFiscalYr])),0)+1

 Me.Sequence = Nz(DMax(“[Sequence]”, ”Projects”, ” [EntryFiscalYr] = ‘“ & Me.[EntryFiscalYr] & “’”),0)+1

Eu também tentei com Me.[txtEntryFiscalYr]em vez de Me.[EntryFiscalYr]. Nenhuma dessas tentativas funcionou.

Suponho que meus problemas possam ser devido à forma como o EntryFiscalYr está sendo gerado para cada registro, mas não tenho ideia de como resolver isso. Eu tentei com a data gerada por EntryDate e isso faz um ótimo trabalho com o ano civil, mas é importante basear isso no ano fiscal e redefini-lo no início de cada novo ano fiscal.

Além disso, o ProjectNo gerado no Formulário de Projetos não está sendo atualizado para o campo ProjectNo na tabela Projetos, mas entendo que esse é o ponto. Isso está correto?

Qualquer assistência para que isso funcione corretamente no ano fiscal seria muito apreciada.

Obrigado!

Responder1

Este é o código que finalmente decidi. Ele usa um botão dentro do meu formulário. Espero que isso ajude outras pessoas que possam estar enfrentando os mesmos problemas.

Private Sub CreateProjNo_Click()
Me.EntryFiscalYr = IIf(Month([EntryDate]) >= 10, Year([EntryDate]) + 1, Year([EntryDate]))
Me.Dirty = False

If IsNull(Me.Sequence) Then
Me.Sequence = Nz(DMax("[Sequence]", "Projects", "[EntryFiscalYr] = " & Me.[EntryFiscalYr]), 0) + 1
Me.Dirty = False
End If

End Sub

Para obter mais informações sobre como cheguei a essa solução, sugiro visitar este link: http://answers.microsoft.com/en-us/office/forum/office_2013_release-access/access-2013-how-do-i-generate-a-record-number/22fa42e1-dd89-4683-b1d0-72b112281c1c

informação relacionada