Gerar relatórios em pdf e enviar por email
O Service Pack 2 do Office 2007 trouxe uma ótima novidade, que é a de poder gerar arquivos de pdf dos objetos do Access, de forma nativa; ou seja, sem ferramentas de terceiros. O Access 2010 também vem com esta funcionalidade.
É bastante comum nas empresas, o envio de relatórios a clientes e fornecedores, tais como propostas e pedidos de compra. O arquivo transmitido no formato de pdf é o mais bem aceito no mercado, pois 95% das máquinas têm instalado o leitor de PDF (Adobe Acrobat Reader).
Com o comando OutputTo é possível gerar arquivos pdf de tabelas, consultas, formulários, relatórios e outros.
Com o OutputTo você pode gerar outros formatos de arquivos, como HTML, XLS, TXT, RTF, SNP, ...
O que é preciso informar ao comando OutputTo para gerar um arquivo pdf de um relatório?
1- Que objeto iremos transformar em pdf - acOutputReport
2- O nome do objeto - rltProposta
3- O formato de saída do objeto - acFormatPDF
4- O local de destino e o nome para o arquivo pdf a ser gerado -
c:\Projeto\Proposta02.pdf
Docmd.OutputTo acOutputReport,"rltProposta",acformatPDF,"c:\Projeto\Proposta02.pdf"
Ao executar o comando OutputTo, ele abrirá o relatório rltProposta, gerando o arquivo proposta02.pdf e gravando na pasta Projeto.
Local para armazenar o arquivos gerados
Na prática, costumo criar uma pasta exclusiva para armazenar os arquivos de pdf no mesmo local do aplicativo. Assim posso criar um caminho relativo para esta pasta, com o seguinte comando:
CurrentProject.Path & "\enviados\Proposta02.pdf"
CurrentProject.Path informa a localização do aplicativo e a pasta enviados é o local para armazenar os arquivos de pdf gerados.
Se desejar se aprofundar sobre o caminho relativo, acesse aqui.
Nome do arquivo
O nome dado para os arquivos gerados tem que ser o mais sugestivo possível. O que costumo fazer é associar o número da proposta e/ou pedido no nome do arquivo. Exemplo:
CurrentProject.Path & "\enviados\Proposta" & me!nProposta & ".pdf"
O exemplo acima está capturando o número da proposta (me!nProposta) de um suposto formulário proposta e incrementando-o ao nome do arquivo que será gerado.
Fica a seu critério, achar a melhor forma de gerar um nome para o seus arquivos de pdf.
Usando variáveis
O uso de variáveis permite uma boa organização na escrita.
Veja o resumo do que foi apresentado até aqui com a escrita mais apurada:
Dim strArquivo as string
Dim strLocal as string
strArquivo = "Proposta" & me!nProposta & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo
Docmd.OutputTo acOutputReport,"rltProposta",acformatPDF,strLocal
Filtrando o relatório
O relatório, quando for aberto pelo OutputTo tem que estar devidamente filtrado para se gerar o arquivo pdf, com as informações desejadas. As duas formas mais comuns de filtragem são: o uso de parâmetros na consulta origem do relatório e o uso do argumento WHERE, do comando OpenReport.
Prefiro utilizar o argumento WHERE do OpenReport, por ser o mais flexível nas possibilidades de filtragem!
O objetivo é abrir o relatório com as informações referentes ao registro que está sendo visualizado no formulário. Por exemplo, se estou com o formulário aberto na proposta 1325, desejo abrir o relatório filtrado apenas com as informações da proposta 1325. Para realizar a filtragem, podemos usar o campo do número da proposta, conforme a linha abaixo:
DoCmd.OpenReport "rltProposta",acViewPreview,,"nProposta = " & Me!nProposta
Mantendo o relatório aberto e filtrado para o OutputTo
Quando o OutputTo solicita a abertura do relatório, o mecanismo interno do Access identifica que já se encontra aberto o relatório solicitado e informa ao OutputTo que a abertura já foi realizada. O comando OutputTo, então, gera o arquivo de pdf, aproveitando o relatório já previamente aberto e filtrado. Para ficar mais elegante, o relatório é aberto de forma oculta.
Veja o resumo do código:
Dim strArquivo as string
Dim strLocal as string
strArquivo = "Proposta" & me!nProposta & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo
'Abre o relatório devidamente filtrado e oculto
DoCmd.OpenReport "rltProposta", acViewPreview,,"nProposta=" & Me!nProposta, acHidden
'Gera arquivo pdf do relatório previamente aberto e filtrado.
Docmd.OutputTo acOutputReport,"rltProposta",acformatPDF,strLocal
'Fecha o relatório
DoCmd.Close acReport, "rltProposta"
Como enviar o arquivo por email usando o Outlook ?
O código apresentado aqui está bem comentado para você compreender como é possível abrir o formulário de envio do Outlook e inserir o arquivo pdf no anexo.
Private Sub btemail_Click()
Dim strArquivo As string
Dim strLocal As string
Dim objOut As Object Dim objmail As Object Dim objAnexo As Object
'---------------------------------------------
'Carregando a coleção do Outlook
'Similar ao abrir o Outlook
'---------------------------------------------
Set objOut = CreateObject("Outlook.application")
'------------------------------------------------------------
'Abrindo o formulário de email para inserir os itens de email
'Similar ao clicar no botão NOVO do Outlook
'------------------------------------------------------------
Set objmail = objOut.CreateItem(olMailItem)
'------------------------------------------------------------
'Abrindo a opção anexo
'Similar ao clicar no botão ANEXO do Outlook
'------------------------------------------------------------
Set objAnexo = objmail.Attachments
'------------------------------------------------------------------------------
'Indico o nome do arquivo pdf e o local que será gravado.
'Neste exemplo gero os nomes dos arquivos, aproveitando o número da proposta,
'ficando com o seguinte aspecto: proposta1.pdf, proposta2.pdf,... '------------------------------------------------------------------------------ strArquivo = "Proposta" & me!nProposta & ".pdf"
strLocal = CurrentProject.Path & "\enviados\" & strArquivo
'----------------------------------------------------------------------------
'Abre o relatório filtrado e oculto, de acordo com a proposta selecionada.
'----------------------------------------------------------------------------
DoCmd.OpenReport "rltProposta", acViewPreview,,"nProposta=" & Me!nProposta, acHidden
'---------------------------------------------------------------------------- 'Gera o pdf do relatório através do comando OutputTo. 'O mecanismo do Access reconhece que o relatório solicitado pelo OutputTo
'já está aberto e então o OutputTo usará o relatório já aberto e filtrado. '---------------------------------------------------------------------------- DoCmd.OutputTo acOutputReport, "rltProposta", acFormatPDF, strLocal '--------------------------------------------- 'Fecha o relatório que está oculto '--------------------------------------------- DoCmd.Close acReport, "rltProposta"
'------------------------------------------------------------- 'Adiciona o arquivo pdf no anexo, capturado da pasta enviados '------------------------------------------------------------- objAnexo.Add strLocal, olByValue, 1 '-------------------------------------------------------- 'Mostra o formulário de envio de email '-------------------------------------------------------- objmail.Display '------------------------------------------------------- 'Tudo já foi entregue ao Outlook; então podemos esvaziar 'a memória do computador usada pelas variáveis objeto. '------------------------------------------------------- Set objAnexo = Nothing Set objmail = Nothing Set objOut = Nothing
End Sub
Neste artigo eu explico em detalhes como você pode automatizar o Access para o envio de emails , usando o Outlook.
Artigos Relacionados
Caminho relativo mais enumeração
Access X Outlook (troca de contas, anexos, relatório no corpo, PDF, ...)
|
1 comentários Luís Augusto 7/4/2010 21:05:31 Excelente explicação Avelino, tentarei implementareste artigo ao meu projeto. Obrigado. |