Как создать файл PDF из отчета о доступе? - PullRequest
0 голосов
/ 02 февраля 2011

У меня проблемы с попыткой экспортировать отчет Access в формат PDF.По сути, я работаю над старой (созданной в 2001 году) базой данных Access, которая использует формы в качестве пользовательского интерфейса.В настоящее время вы можете отправлять задания из формы «Работа» в форму «Счет-фактура».После того, как все задания будут выполнены, вы просто нажимаете «Счета-фактуры все», указываете дату и количество копий, и это печатается с использованием отчета Access в качестве шаблона.

Мне было поручено добавить сохранение в формате PDFЯ работаю веб-дизайнером, но я очень ограничен в знаниях Access и VB, но я знаю ( очень ) небольшое количество ASP.Net и C # (как я получил эту задачу:история в другой раз ...)

По-моему, я подошел к этому, создав новую кнопку PDF в форме доступа, где они распечатывают счета.Я думаю, что я мог бы просто продублировать код для печати и обновить его для вывода в файл PDF.Я могу заставить это работать, но не так, как хотелось бы.

Код функции печати приведен ниже:

Private Sub cmdOpenGroupInvoice_Click()
Dim db As DAO.Database
Dim rsGetCustomerInvoice As DAO.Recordset
Dim rsInvoice As DAO.Recordset
Dim rsInvoiceAll As DAO.Recordset
Dim lngCusID As Long
Dim lngJobNo As Long
Dim iCountInvoice
Dim lngInvoiceNo As Long
Dim iNumberCopies As Integer
Dim sSQLGetInv As String
Dim sSQLInv As String
Dim datInvoiceDate As Date

sSQLGetInv = "SELECT tblJobs.JobNo,tblJobs.NetDespatchRef, tblLoads.Sales, tblLoads.PODName, tblLoads.TotalSales, tblLoads.Cost, tblLoads.Profit, tblJobs.SendToInvoice, tblJobs.Invoiced, tblJobs.MarkForHistory, tblJobs.CustomerID" & vbCrLf _
& "FROM tblJobs INNER JOIN tblLoads ON tblJobs.JobNo = tblLoads.JobNo" & vbCrLf _
& "WHERE (((tblJobs.SendToInvoice)=Yes) AND ((tblJobs.Invoiced)=No) AND ((tblJobs.MarkForHistory)=No));"


Set db = CurrentDb
Set rsGetCustomerInvoice = db.OpenRecordset(sSQLGetInv, dbOpenDynaset)
If rsGetCustomerInvoice.EOF Then
Beep
If MsgBox("There are no jobs to invoice", _
    vbCritical + vbOKOnly, _
    "No Jobs To Invoice") = vbOK Then
    Exit Sub
End If
End If
rsGetCustomerInvoice.MoveLast
Debug.Print rsGetCustomerInvoice.RecordCount
rsGetCustomerInvoice.MoveFirst
Do Until rsGetCustomerInvoice.EOF = True
Set rsGetCustomerInvoice = db.OpenRecordset(sSQLGetInv, dbOpenDynaset)
If rsGetCustomerInvoice.EOF Then
    rsGetCustomerInvoice.Close
    db.Close
Set rsGetCustomerInvoice = Nothing
Set db = Nothing
    DoCmd.Close acForm, "frmInvoiceDate"
Exit Sub
End If
Debug.Print rsGetCustomerInvoice.RecordCount
datInvoiceDate = CVDate(txtInvoiceDate)
lngInvoiceNo = GiveMeAnInvoiceNo()
lngCusID = rsGetCustomerInvoice.Fields!CustomerID
Call AddNewInvoice(lngInvoiceNo, datInvoiceDate, True)

Debug.Print iCountInvoice
lngJobNo = rsGetCustomerInvoice![JobNo]
Call SendThisJobToSageAll(lngCusID, datInvoiceDate, lngInvoiceNo)
Call InvoiceAll(lngCusID, lngInvoiceNo)
Dim strPODName As String
If Not IsNull(rsGetCustomerInvoice!NetDespatchRef) Then
If IsNull(rsGetCustomerInvoice![PODName]) Then
strPODName = " "
Else
strPODName = rsGetCustomerInvoice![PODName]
End If
'Call NetDesTrackingJobCompleate(rsGetCustomerInvoice![NetDespatchRef], rsGetCustomerInvoice![JobNo], strPODName)
End If
iCountInvoice = iCountInvoice - 1
'Debug.Print I
iNumberCopies = txtNumberOfCopies
Do Until iNumberCopies = 0

    DoCmd.OpenReport "rptInvoice2", acViewNormal, , "[Invoice No]= " & lngInvoiceNo
iNumberCopies = iNumberCopies - 1
Loop
Form_frmInvoicing.Requery
rsGetCustomerInvoice.MoveNext
Loop
DoCmd.Close acForm, "frmInvoiceDate"
rsGetCustomerInvoice.Close

db.Close
Set rsGetCustomerInvoice = Nothing

Set db = Nothing


End Sub

С моим первоначальным планом, изложенным выше, я обновилраздел ниже для вывода в PDF:

Do Until iNumberCopies = 0

        DoCmd.OpenReport "rptInvoice2", acViewNormal, , "[Invoice No]= " & lngInvoiceNo
        DoCmd.OutputTo acOutputReport, "", acFormatPDF, MyPath & MyFilename, True
    iNumberCopies = iNumberCopies - 1
    Loop

Теперь это работает, и он пытается вывести файл PDF.Проблема в том, что он запускает отчет и создает счет-фактуру для каждого задания в системе, а не применяет отчет только для заданий, которые помечены для выставления счетов.

Я надеюсь, что это происходит потому, что я 'Я поместил код в неправильное место, но у меня есть ощущение, что это сложнее, чем это.

Публикация этого сообщения здесь довольно длинная, но я очень ценю любую помощь в этом вопросе.Я также старался сделать это как можно короче, поэтому, если есть какие-то детали, которые не ясны, я помогу.

Ответы [ 2 ]

4 голосов
/ 03 февраля 2011

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

Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("MyReportQuery")
sSQL = "SELECT Whatever FROM MyTable WHERE [Invoice No]= " & lngInvoiceNo
qdf.SQL = sSQL

DoCmd.OutputTo acOutputReport, "rptInvoice2", acFormatPDF, _
    MyPath & MyFilename, True

Если у вас нет Access 2007 с надстройкой Сохранить как PDF или 2010, вам лучше всего установить скажем, cutePDF и распечатать на PDF-принтере с помощью DoCmd.PrintOut

1 голос
/ 06 февраля 2011

Я задавал тот же вопрос пару лет назад на UtterAccess ..

Здесь есть бесплатная библиотека, которая делает именно то, что вам нужно: http://www.lebans.com/reporttopdf.htm

Моя оригинальная тема на UAздесь: http://www.utteraccess.com/forum/Automatically-PDF-send-t1353547.html

Я успешно использовал библиотеку в течение нескольких лет в нескольких проектах, главным образом для генерации цитат и счетов.

Надеюсь, это поможет PG

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...