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