No artigo de hoje, vou mostrar como disparar um relatório automaticamente por e-Mail via AdvPL, usando tanto TReport como FWMSPrinter.
TReport:
Para esse caso, é possível gerar um html do relatório e enviar por e-Mail.
Primeiro, certifique-se de ter configurado corretamente os parâmetros para envio de e-Mail (os MV_REL*** ou veja o passo a passo do TDN clicando aqui).
Após isso, ao criar seu fonte com TReport, defina para quem será enviado com o atributo cEmail. No nDevice defina como 3 (que é o tipo que envia por e-mail). Abaixo um exemplo do trecho mencionado:
//Cria as definições do relatório oReport := fReportDef() //Define o e-Mail de destinatário cPara := "teste@teste.com" //Define que será executado sem tela (job), o e-Mail destinatário, o tipo 3 (e-Mail) e gera o arquivo sem visualização oReport:nRemoteType := NO_REMOTE oReport:cEmail := cPara oReport:nDevice := 3 //1-Arquivo,2-Impressora,3-email,4-Planilha e 5-Html oReport:SetPreview(.F.) oReport:Print(.F., "", .T.)
FWMSPrinter:
Primeiro, tenha uma variável que define se esta rodando via Job ou não (iremos chamar de lJob). Se for via Job, a pasta que você irá apontar, deve ser dentro da Protheus data, por exemplo, x_relatorios.
Após processar o relatório, se for via job, você aciona o método Print() e anexa o arquivo no disparo do e-Mail.
//Se for via JOB, muda as parametrizações If lJob //Define o caminho dentro da protheus data e o nome do arquivo cCaminho := "\x_relatorios\" cArquivo := "zTstRel_job_" + dToS(dDataGer) + "_" + StrTran(cHoraGer, ':', '-') + ".pdf" //Se não existir a pasta na Protheus Data, cria ela If ! ExistDir(cCaminho) MakeDir(cCaminho) EndIf //Cria o objeto FWMSPrinter oPrintPvt := FWMSPrinter():New(cArquivo, IMP_PDF, .F., '', .T., .F., , , .T., .T., , .F.) oPrintPvt:cPathPDF := cCaminho Else //Definindo o diretório como a temporária do S.O. e o nome do arquivo com a data e hora (sem dois pontos) cCaminho := GetTempPath() cArquivo := "zTstRel_" + dToS(dDataGer) + "_" + StrTran(cHoraGer, ':', '-') //Criando o objeto do FMSPrinter oPrintPvt := FWMSPrinter():New(cArquivo, IMP_PDF, .F., "", .T., , @oPrintPvt, "", , , , .T.) oPrintPvt:cPathPDF := cCaminho EndIf //Setando os atributos necessários do relatório oPrintPvt:SetResolution(72) oPrintPvt:SetPortrait() oPrintPvt:SetPaperSize(DMPAPER_A4) oPrintPvt:SetMargin(60, 60, 60, 60) /* Aqui você coloca a lógica do seu relatório com os comandos de impressões como StartPage, Box, SayAlign, etc */ //Se for via job, imprime o arquivo para gerar corretamente o pdf If lJob oPrintPvt:Print() //Atenção! - é necessário baixar a função zEnvMail() - disponível em https://terminaldeinformacao.com/2017/10/17/funcao-dispara-e-mail-varios-anexos-em-advpl/ cPara := "teste@teste.com" cAssunto := "Assunto Teste" cCorpo := "Corpo do e-Mail Teste" aAdd(aAnexos, cCaminho + cArquivo) u_zEnvMail(cPara, cAssunto, cCorpo, aAnexos) //Se for via manual, mostra o relatório Else oPrintPvt:Preview() EndIf
Referências:
- FWMSPrinter: Exemplo 3- Relatório com opção de forma manual e via job com disparo de e-Mail
- TReport: Exemplo1- Gerando HTML e mandando por e-Mail (job)
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Poderia nos dar um exemplo de como devem ser postos os parâmetros no programa, para que o relatório seja enviado corretamente e automaticamente via e-mail.
Att
Bom dia, tudo bem?
Segue a documentação da TOTVS com exemplo de como preencher os parâmetros MV_REL* – https://tdn.totvs.com/pages/releaseview.action?pageId=463812948
Abraços