Создание нового вычисляемого набора записей для таблицы из подчиненной VBA Access 2016

Две формы: Основная форма: "Grantor" (добавить форму на основе "Grantor" tbl) и Subform: "GrantorInvoices_subform" (Добавить форму на основе "GrantorInvoices" tbl). Основная форма и Subform объединяются тремя ключевыми полями: [EntityID], [ContractID] и [ContractStartDate].
Пользователь запускает форму Grantor с фильтром и выбирает [EntityName]; Код AfterUpdate заполняет [EntityID] в форме Grantor и в GrantorInvoices_subform.
Пользователь заполняет данные основной формы Grantor для [ContractID], [ContractStartDate], [ContractEndDate] и других полей.

Пользователь переходит к GrantorInvoices_subform (представление таблицы данных).[EntityID] уже автоматически заполняется фильтром, запускаемым после обновления кода в основной форме Grantor. Пользовательские вкладки рядом с [ContractID]. Для свойства [ContractID] "Other, Enter Key Behavior" установлено значение "Новая строка в поле". [ContractID], [ContractStartDate] автозаполнение из формы Grantor.

Пользователь заполняет дополнительные поля подчиненной формы GrantorInvoices: [InvoiceFreqtxt] (строка формата) пользователь выбирает из списка выбора
[InvoiceFreqnum] (формат Integer) пользователь выбирает из списка выбора
[TotInvoices] (формат Integer] устанавливается на уровне таблицы для расчета: ([ContractEndDate] - [ContractStartDate]) / [InvoiceFreqNum]
[InvoiceThruDate] (формат короткой даты) устанавливается на уровне таблицы для вычисления: [ContractStartDate] + [InvoiceFreqNum]
[InvoiceDueSched] (формат Integer) пользователь выбирает из списка выбора
[InvoiceDueDate] (формат короткой даты) устанавливается на уровне таблицы для расчета: [InvoiceThruDate] + [InvoiceDueSched]
[InvoiceSubmissDate] (формат короткой даты) пользователь завершает редактирование данных позднее.

Пользователь продолжает, добавляя другой новый тип счета, если это требуется для того же контракта. Кнопка GoBack сохраняет и возвращает пользователя на соответствующий уровень коммутатора. Все работает отлично.

ВЫЗОВ: Теперь пользователь хотел бы, чтобы GrantorInvoices_subform (или GrantorInvoices tbl) создавал полный набор записей для расписания записей [InvoiceThruDate] и [InvoiceDueDate] для каждого грантодателя (каждая запись будет повторять данные, введенные пользователем для GrantorInvoices, за исключением того, что [InvoiceThruDate] будет меняться в каждой последующей записи на основе введенного пользователем один раз [InvoiceFreqNum] интервал, [InvoiceDueDate] будет меняться в каждой записи на основе введенного пользователем один раз [InvoiceDueSchedule] интервал, а [InvoicesRemaining] уменьшается на единицу Кнопка запускает набор записей добавления и сохраняет его в таблице GrantorInvoices, очищает форму для ввода пользователем второго возможного типа счета-фактуры для того же Grantor (поэтому основная форма Grantor остается открытой с уже заполненными данными, а подформа GrantorInvoices очищается и остается открытым.) Когда пользователь заканчивает работу со счетами, кнопка "GoBack" сохраняет данные в основной форме Grantor в таблицу Grantor и возвращает пользователя на утверждение. Приате уровень коммутатора.
Снять ли вычисленные поля на уровне таблицы и выполнить ли вычисления в цикле VBA, как показано ниже, перед сохранением нового набора множественных записей?
Или я использую переменные Temp (добавляя событие After Update к каждому полю в форме, устанавливающей TempVars на основе введенного значения) с AddNew и циклом Do Before? Или оставить вычисляемое поле на уровне таблицы и изменить цикл?
Ищете лучшее решение. Заранее спасибо за вашу помощь!

Private Sub cmdSubmitGrantorInvoices_Click()
Do Cmd.Run Cmd acCmdSave
Dim EntityID As Integer
Dim ContractID As Integer
Dim ContractStartDate As Date
Dim ContractEndDate As Date
Dim TotInvoices As Integer
Dim InvoiceFreqtxt As String
Dim InvoiceFreqNum As Integer
Dim InvoicesThruDate As Date
Dim InvoiceDueSched As Integer 
Dim InvoiceDueDate As Date
Dim TotInvoices As Integer
Dim InvoicesRemaining As Integer
Dim InvoiceSubmissDate As Date

Do Until Me.InvoicesRemaining=0
DoCmd.GoToRecord  ,  , acNewRec
    Me.InvoiceThruDate = Me.ContractStartDate.Value + 
    Me.InvoiceFreqNum.Value
    Me.InvoiceDueDate = Me.InvoiceThruDate.Value + Me.InvoiceDueSched.Value
    Me.TotInvoices = (Me.ContractEndDate.Value -  
    Me.ContractStartDate.Value)/Me.InvoiceFreqNum.Value
    Me.InvoicesRemaining = Me.TotInvoices.Value - 1
    Do Cmd.Run Cmd acCmdSave
Loop
End Sub

0 ответов

Другие вопросы по тегам