Option Compare Database
Private Sub ExportReportToPDF(AFileName As String)
'Сохранение отчета в файл
DoCmd.OutputTo acOutputReport, "reportClients", acFormatPDF, AFileName, False
End Sub
Private Sub ElementSendMail(Adr As String, AFileName As String)
Dim MSG As Object
Dim Config As Object
Dim CFields As Object
Dim strBody As String
'создаем объект Message это наше письмо
Set MSG = CreateObject("CDO.Message")
'создаем объект Configuration это настройки соединения
Set Config = CreateObject("CDO.Configuration")
Set CFields = Config.Fields
Set MSG.Configuration = Config
CFields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
CFields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "192.168.0.4" 'адрес SMTP сервера192.168.0.4
CFields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
CFields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "rsolanov@fexer.ru" 'Login
CFields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = " " 'пароль
CFields("urn:schemas:mailheader:content-language") = "windows-1251" ' кодировка письма чтобы писать по русски
CFields.Update
MSG.To = Adr 'адрес получателя
MSG.FROM = "rsolanov@fexer.ru" 'адрес отправителя
MSG.Subject = "Отчеты клиентам" ' тема письма
MSG.BodyPart.Charset = "windows-1251" ' кодировка письма чтобы писать по русски
'формируем текст который будет телом письма
strBody = "Отчет находится во вложении"
MSG.HTMLBody = strBody 'тело письма
MSG.AddAttachment AFileName
MSG.Send 'отправляем
'обнуляем переменные
Set CFields = Nothing
Set Config = Nothing
Set MSG = Nothing
End Sub
Public Sub SendMail()
Dim DB As Database
Set DB = CurrentDb
Dim RS As Recordset
Dim StrSQL As String
StrSQL = "SELECT Contacts.CompanyName, Contacts.Account, Contacts.Mail, Trades.TradeDate " _
& "FROM Contacts INNER JOIN (Client INNER JOIN Trades ON Client.BrokerRef = Trades.BROKERREF) ON Contacts.ClientID = Client.ClientID " _
& "WHERE (((Trades.BUYSELL) = 'покупка')) " _
& "GROUP BY Contacts.CompanyName, Contacts.Account, Contacts.Mail, Trades.TradeDate;"
Set RS = DB.OpenRecordset(StrSQL, dbOpenDynaset)
RS.MoveFirst
While Not RS.EOF
CurrentDb.QueryDefs("qryTrades").SQL = "SELECT Trades.TradeDate, Trades.TRADENO, Trades.TRADETIME, Trades.PRICE, Trades.QUANTITY, Trades.VALUE, Trades.BUYSELL, Trades.SecCode, Contacts.ClientID, Contacts.Account, Contacts.Company, Agents.Company AS Agent, Security.ShortName, Security.LotSize " _
& "FROM ((SELECT Contacts.Company, Trades.TradeDate, Trades.TRADENO " _
& "FROM Contacts INNER JOIN (Client INNER JOIN Trades ON Client.BrokerRef = Trades.BROKERREF) ON Contacts.ClientID = Client.ClientID " _
& "WHERE (((Trades.BUYSELL)='продажа'))) AS Agents INNER JOIN (Contacts INNER JOIN (Client INNER JOIN Trades ON Client.BrokerRef = Trades.BROKERREF) ON Contacts.ClientID = Client.ClientID) ON (Agents.TradeDate = Trades.TradeDate) AND (Agents.TRADENO = Trades.TRADENO)) INNER JOIN Security ON Trades.SECCODE = Security.SecCode " _
& "WHERE (((Trades.BUYSELL)='покупка')AND((Contacts.Account)=""" & RS.Fields("Account") & """));"
FileName = "C:\" + "Отчет_" + RS.Fields("Account") + "_" + RS.Fields("CompanyName") + "_" + Format(RS.Fields("TradeDate"), "mm/dd") + ".pdf"
ExportReportToPDF (FileName)
ElementSendMail(RS.Fields("Mail"), FileName)
RS.MoveNext
Wend
RS.Close
End Sub
Сохранение отчета из Access в pdf
Я столкнулся с проблемой сохранения отчета в MS Access'е в формат pdf. Думаю, что данный вопрос заинтересует многих. С сайта Microsoft я скачал приложение SaveAsPDFandXPS, после установки которого в диалоге сохранения отчета появляется опция "Сохранить отчет в pdf или xps". Таким образом необходимый отчет можно вручную сохранить в формат pdf. Все хорошо, когда отчет один или несколько.
А если таких отчетов, которые необходимо сохранить несколько сотен? Может быть где-то в инете уже выложен такой макрос, который сможет сохранять отчет в pdf, но такого макроса я не нашел.
Вообще мысль такая:
Написать код в Access'е, который собой реализует следующий алгоритм:
по sql-запросу в цикле, данные из каждой записи запроса подтягиваются в шаблон для отчета (шаблон один и тот-же, только разные данные), открыть отчет, сохрать в pdf, отправить по почте адресату, перейти к следующей записи, опять открыть отчет, сохранить в pdf и отослать, и так далее до конца цикла.
Думаю, что наверняка уже кто-то сталкивался с подобной проблемой.
Пожалуйста, кто знает, подскажите
Код:
Если кому-нибудь это поможет, то отлично.
Процедура ExportReportToPDF сохраняет отчет в файл pdf, ElementSendMail отправляет отчет в формате pdf адресату. Проверял, работает. Но есть одно но:
В процедуре SendMail если убрать вызов процедуры ElementSendMail(RS.Fields("Mail"), FileName) (5-я строка кода снизу) все работает как надо. Но если добавить вызов полученного pdf-файла на отправку по почте, возникает такая ошибка:
Compile error:
Expected: =
Если кто знает, пожалуйста, помогите
Код:
Private Sub ElementSendMail(ByVal Adr As String, ByVal AFileName As String)
Call ElementSendMail(RS.Fields("Mail"), FileName)
Call ElementSendMail(RS.Fields("Mail"), FileName)
Похоже форум находится в состоянии "ни жив, ни мертв". Кризис :-)