Как сделать макрос для генерации номера записи на основе финансового года? (Access 2013)

750
anmarse

Я хотел бы создать номер записи, который основан на финансовом году и автоматически продвигается ... Что-то вроде: 2015001, 2015002, 2015003, 2015004; 2016001, 2016002 и др.

У меня уже есть поле [FiscalYr] (вычисляемый тип данных) в моей таблице [Projects] на основе следующего выражения:

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

Поле [EntryDate] является полем даты / времени со значением по умолчанию Date (). Это работает, как я хотел бы.

Есть ли способ, которым я могу взять это число [FiscalYr] и поместить его на передней части трехзначного числа, которое начинается с 001 и увеличивается на 1 на основе предыдущей записи, с номером, сбрасываемым в 001 в начале каждый новый финансовый год? Наш финансовый год начинается 1 октября и заканчивается 30 сентября.

Я хочу, чтобы число генерировалось независимо от того, введена ли информация в таблицу [Projects] или в форму [Projects Form]. Я не хочу, чтобы он генерировался, только если информация введена в форму. Я видел некоторые посты онлайн, предлагающие лучший способ сделать что-то подобное, это использовать макрос Before Change, но большинство примеров, которые я могу найти, основывают значительную часть их макрокодов на дате, и я уже получил Дата выпуска разобрана (я думаю).

Мне было бы хорошо с макросом, который одновременно создал финансовый год из [EntryDate] и создал число одновременно, если это проще, чем работать с моим существующим полем [FiscalYr]. Я всего лишь случайный пользователь Access, поэтому, если я говорю бессмысленно, мне очень жаль - я думаю, что знаю достаточно, чтобы быть опасным.

Большое спасибо, Андреа


Обновление 9/9/2015:

Я отказался от идеи макроса.

Используя советы в блоге Скотгема ( https://scottgem.wordpress.com/2009/11/25/sequential-numbering/ ), я смог запустить и запустить систему последовательной нумерации, но я все еще борюсь с получение номера для сброса в 1 в начале нового финансового года. Я не уверен, что проблема в том, как я генерирую стоимость своего финансового года, или что-то еще полностью.

Вот что у меня есть:

Название таблицы: Проекты

В проектах у меня есть следующие поля, связанные с этой проблемой:

  • ProjectNo: число - длинное целое
  • Последовательность: число - длинное целое
  • 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 
  • ProjectNo: текстовое поле, источник данных управления:

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

Это отображается так, как мне хотелось бы: 2016001, 2016002 и т. Д.

Я пробовал разные итерации кодов в блоге Скоттгема, чтобы перенести поле EntryFiscalYr в оператор DMax, чтобы посмотреть и посмотреть, следует ли продолжать увеличивать порядковый номер для текущего финансового года или начинать заново для нового финансового года, но ни одна из моих попыток работают.

Я пытался:

 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, и она отлично справляется с календарным годом, но важно получить его на основе финансового года и переустановить его в начале каждого нового финансового года.

Кроме того, ProjectNo, сгенерированный в форме Projects, не обновляется до поля ProjectNo в таблице Projects, но, насколько я понимаю, в этом суть. Это правильно?

Любая помощь в корректной работе с финансовым годом будет принята с благодарностью.

Спасибо!

1
Добро пожаловать в Superuser. что ты уже испробовал? Andi Mohr 8 лет назад 0
Привет, Энди, я обновил свой вопрос, чтобы отразить то, что я пробовал до сих пор. Спасибо! Andrea anmarse 8 лет назад 0
Боюсь, у меня недостаточно знаний о Access, чтобы ответить на ваш вопрос, но я применил некоторое форматирование, чтобы сделать ваш код более читабельным для других. Andi Mohr 8 лет назад 0

1 ответ на вопрос

0
anmarse

Это код, на котором я наконец остановился. Он использует кнопку в моей форме. Надеюсь, что это помогает другим людям, которые могут бороться с теми же проблемами.

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- генерирования-а-номер-записи / 22fa42e1-dd89-4683-b1d0-72b112281c1c

Похожие вопросы