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

1

Eu gostaria de criar um número recorde baseado no ano fiscal e avança automaticamente ... Algo como: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002, etc.

Já tenho um campo [FiscalYr] (tipo de dados calculado) na minha tabela [Projects] com base 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 eu pegar o número [FiscalYr] e colocá-lo na frente de um número de 3 dígitos que começa com 001 e incrementa em 1 com base no registro anterior, com o número sendo redefinido como 001 em o início de cada novo ano fiscal? Nosso ano fiscal começa em 1º de outubro e termina em 30 de setembro.

Eu quero que o número seja gerado se as informações forem inseridas na tabela [Projects] ou no formulário [Projects Projects]. Não quero que seja gerado apenas se as informações forem inseridas no formulário. Eu vi alguns posts online sugerindo que a melhor maneira de fazer algo assim seria usar uma macro Before Change, mas a maioria dos exemplos que eu posso encontrar baseiam uma parte significativa de seu código de macro em uma data, e eu já consegui o data problema resolvido (eu acho).

Eu estaria bem com uma macro que criou o ano fiscal a partir de [EntryDate] e criou 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, por isso, se estou falando bobagens, sinto muito - acho que sei o suficiente para ser perigoso.

Muito obrigado, Andrea

Atualização 09/12/2015:

Eu desisti da ideia macro.

Usando as dicas do blog da Scottgem ( link ), consegui um sistema de numeração sequencial instalado e funcionando, mas ainda estou lutando muito para que o número seja redefinido para 1 no início de um novo ano fiscal. Não tenho certeza se o problema é como estou gerando meu valor de ano fiscal ou algo totalmente diferente.

Veja o que eu tenho:

Nome da tabela: projetos

Dentro de projetos, tenho os seguintes campos relacionados a esse problema:

  • ProjectNo: number - long integer
  • Sequência: número - inteiro longo
  • EntryFiscalYr: calculado - inteiro longo; expressão lê da seguinte forma: IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • EntryDate: data / hora; valor padrão: Date ()

Nome do formulário: formulário de projetos

No 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, definida como não visível
  • Botão CreateProjNo:, 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 que: 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 ver se o número da sequência deve continuar incrementando para o ano fiscal atual ou começar de novo para o novo ano fiscal, mas nenhum 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.

Acredito que meus problemas possam estar relacionados a como o EntryFiscalYr está gerando para cada registro, mas não tenho a menor idéia de como lidar com isso. Eu tentei com a data gerada pelo EntryDate e que faz um ótimo trabalho com o ano civil, mas é importante obter isso com base no ano fiscal e tê-lo re-definir 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, no meu entender, esse é o ponto. Está correto?

Qualquer ajuda para fazer isso funcionar corretamente com o ano fiscal seria muito apreciada.

Obrigado!

    
por anmarse 08.12.2015 / 01:02

1 resposta

0

Este é o código que eu finalmente decidi. Ele usa um botão dentro do meu formulário. Espero que isso ajude os outros que estão lutando com 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: link

    
por 10.12.2015 / 21:17