2015-06-08 3 views
0

Часть моего приложения доступа делает выставление счетов. У меня есть таблица номеров счетов, которая представляет одно поле «InvoiceNum». В моем докладе фактурного У меня есть следующий код:Инкрементный номер счета-фактуры с использованием VBA - Доступ

Private Sub Report_Open(Cancel As Integer) 
    'lookup invoice number when invoice opens 
    intInvoiceNum = Nz(DLookup("InvoiceNum", "tblInvoiceNum"), 0) 
End Sub` 

Private Sub PageHeaderSection_Format(Cancel As Integer, FormatCount As Integer) 
    'Incrementally add one (1) to the invoice number for every page of in the report 
    Me.txtInvoiceNum = intInvoiceNum 
    intInvoiceNum = intInvoiceNum + 1 
End Sub` 

Private Sub Report_Close() 
    'Update tblInvoiceNum with the last invoice number in the report 
    db.Execute ("UPDATE InvoiceNum SET InvoiceNum = " & intInvoiceNum) 
End_Sub` 

Проблема: Мой отчет открытого с GroupBy ClientID и ProjectNum. Несколько фактур печатаются в одном отчете. Если какой-либо счет выливается на вторую страницу, код форматирования снова запускается, добавив инкрементный номер счета на вторую страницу. Как я могу предотвратить это?

+0

Это одна из несчастные реалии делать вещи по прихоти. Есть ли лучший подход, который вы можете предпринять, чтобы получить «1», добавленный к номеру счета-фактуры? Возможно, в запросе добавьте поле, которое сделает что-то вроде того, что вам нужно (я не уверен, как сгруппировать их). Есть также свойства, где вы можете выбрать «Keep on one page», но я не уверен, это сработает. –

+0

Применять номера счетов в свои счета-фактуры перед печатью. – Gustav

+0

Ваш прирост находится в заголовке страницы. Попробуйте добавить его в заголовок отчета или событие onload. – Gene

ответ

0

Рассмотрите возможность использования элемента Running Sum с InvoiceNum в разделе заголовка отчета. Нет необходимости в VBA.

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

Control Source: =1 
Running Sum: Over All 
Name: RunningCount 
Visible: No 

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

Control Source: =DLookup("InvoiceNum", "tblInvoiceNum") 
Running Sum: No 
Name: intInvoiceNum 
Visible: No 

Наконец, добавьте видимый текстовое поле для сумм предыдущих двух элементов управления, служащих в качестве инкрементного номера счета-фактуры:

Control Source: =[intInvoiceNum] + [RunningCount] 
Running Sum: No 
Name: IncrementalInvoiceNum 
Visible: Yes 

Возможно, вам интересно, почему первые два невидимых элемента управления? Причина заключается в использовании Running Sum: Over All будет включать в себя как счетчики, так и номер счета для каждой записи отчета (например, 1 + InvoiceNum - 1-я запись, 1 + 1 + InvoiceNum + InvoiceNum - 2-я запись ...)

+0

Parfait ты полубог. Оно работает!!! Просто идет показать vba не всегда лучшее решение. Спасибо!!! – Jdba