회계 연도를 기준으로 레코드 번호를 생성하는 매크로를 어떻게 만드나요? (액세스 2013)

회계 연도를 기준으로 레코드 번호를 생성하는 매크로를 어떻게 만드나요? (액세스 2013)

회계연도를 기준으로 자동으로 증가하는 레코드 번호를 만들고 싶습니다. 예: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002 등

다음 식을 기반으로 내 테이블 [프로젝트]에 [FiscalYr] 필드(계산된 데이터 유형)가 이미 있습니다.

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

[EntryDate] 필드는 기본값이 Date()인 날짜/시간 필드입니다. 이것은 내가 원하는 대로 작동하고 있습니다.

[FiscalYr] 번호를 001로 시작하고 이전 레코드에 따라 1씩 증가하는 3자리 숫자 앞에 배치할 수 있습니까? 이 숫자는 시작 시 001로 재설정됩니다. 새로운 회계연도마다? 우리의 회계연도는 10월 1일에 시작하여 9월 30일에 끝납니다.

[프로젝트] 테이블에 정보를 입력하든, [프로젝트 양식] 폼에 정보를 입력하든 번호가 생성되기를 원합니다. 양식에 정보를 입력한 경우에만 생성되는 것을 원하지 않습니다. 이와 같은 작업을 수행하는 가장 좋은 방법은 변경 전 매크로를 사용하는 것이라고 제안하는 일부 게시물을 온라인에서 보았습니다. 그러나 제가 찾을 수 있는 대부분의 예제는 날짜에 대한 매크로 코드의 상당 부분을 기반으로 하며 이미 날짜 문제가 해결되었습니다(제 생각에는).

[EntryDate]에서 회계 연도를 생성하고 동시에 숫자를 생성하는 매크로를 사용하면 기존 [FiscalYr] 필드로 작업하는 것보다 쉽습니다. 저는 평범한 Access 사용자이기 때문에 횡설수설하게 말하면 정말 죄송합니다. 저는 위험할 만큼만 알고 있다고 생각합니다.

정말 고마워요, 안드레아


2015년 12월 9일 업데이트:

나는 매크로 아이디어를 포기했습니다.

Scottgem의 블로그(https://scottgem.wordpress.com/2009/11/25/serial-numbering/), 일련 번호 지정 시스템을 구축하고 실행할 수 있었지만 새 회계 연도가 시작될 때 번호를 1로 재설정하는 데 여전히 어려움을 겪고 있습니다. 문제가 회계연도 가치를 생성하는 방식에 있는지 아니면 완전히 다른 것인지 잘 모르겠습니다.

내가 얻은 것은 다음과 같습니다.

테이블 이름: 프로젝트

프로젝트 내에는 이 문제와 관련된 다음 필드가 있습니다.

  • 프로젝트 번호: 숫자 - 긴 정수
  • 순서: 숫자 - 긴 정수
  • EntryFiscalYr: 계산됨 - 긴 정수; 표현식은 다음과 같습니다:IIf(Month([EntryDate])>=10,Year([EntryDate])+1,Year([EntryDate]))
  • EntryDate: 날짜/시간; 기본값: 날짜()

양식 이름: 프로젝트 양식

내 프로젝트 양식에는 다음과 같은 컨트롤이 있습니다.

  • 시퀀스: 텍스트 상자, 제어 소스는 프로젝트 테이블의 시퀀스 필드이며 표시되지 않도록 설정됨
  • CreateProjNo: 버튼, 클릭 시 이벤트:

     Private Sub CreateProjNo_Click()
        Me.Sequence = Nz(DMax("[Sequence]", "Projects"), 0) + 1
        DoCmd.RunCommand acCmdSaveRecord
     End Sub
    
  • 프로젝트 번호: 텍스트 상자, 데이터 제어 소스:

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

2016001, 2016002 등 내가 원하는 대로 표시됩니다.

나는 EntryFiscalYr 필드를 DMax 문으로 가져오기 위해 Scottgem의 블로그에서 다양한 코드 반복을 시도하여 시퀀스 번호가 현재 회계 연도에 계속 증가해야 하는지 아니면 새 회계 연도에 다시 시작해야 하는지 확인했지만 내 시도는 전혀 없었습니다. 일하고 있습니다.

나는 시도했다:

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

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

나는 Me.[txtEntryFiscalYr]또한 Me.[EntryFiscalYr]. 이러한 시도 중 어느 것도 효과가 없었습니다.

내 문제는 EntryFiscalYr이 각 레코드에 대해 생성되는 방식 때문일 수 있다고 추측하지만 이 문제를 해결하는 방법에 대해서는 전혀 모릅니다. 저는 EntryDate에서 생성된 날짜를 사용해 보았으며 달력 연도에 매우 적합했지만 회계 연도를 기준으로 이를 가져오고 새 회계 연도가 시작될 때마다 다시 설정하는 것이 중요합니다.

또한 Projects Form에서 생성된 ProjectNo는 Projects 테이블의 ProjectNo 필드로 업데이트되지 않지만 이것이 요점이라는 것을 이해합니다. 이 올바른지?

회계연도에 이것이 올바르게 작동하도록 도움을 주시면 대단히 감사하겠습니다.

감사해요!

답변1

이것이 제가 최종적으로 결정한 코드입니다. 내 양식 내의 버튼을 사용합니다. 이것이 동일한 문제로 어려움을 겪고 있는 다른 사람들에게 도움이 되기를 바랍니다.

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

이 솔루션을 얻은 방법에 대한 자세한 내용을 보려면 다음 링크를 방문하는 것이 좋습니다. 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

관련 정보