Ir para conteúdo
  • Cadastre-se

dev botao

Exemplo de Envio de E-mail pelo Fortes Report


Ver Solução Respondido por Juliomar Marchetti,
  • Este tópico foi criado há 2103 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Olá a todos,

Estou procurando bastante um exemplo de envio de e-mail pelo Fortes Report, em muitas mensagens comentam que no site oficial tem esse e vários outros exemplos, mas não acho nada.

Alguém saberia me dizer onde está? Quero, ao invés de imprimir o relatório, enviar um e-mail com o mesmo anexado em formato PDF.

Desde já agradeço a atenção de todos

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom dia Realmente não tem Exemplos no Git do Fortes.

mas sugestão é olhar os fontes do componente do ACBr onde já trata isso para as DANFe

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
Em 14/09/2017 at 08:25, Juliomar Marchetti disse:

Bom dia Realmente não tem Exemplos no Git do Fortes.

mas sugestão é olhar os fontes do componente do ACBr onde já trata isso para as DANFe

Olá Juliomar, obrigado pela dica.

Nunca fiz uso do envio de DANFE por e-mail usando componentes do próprio ACBr, poderia me dar a dica de qual(is) unit(s) tem o que me interessa?

Desde já obrigado

Editado por doidopb
Link para o comentário
Compartilhar em outros sites

  • Moderadores
31 minutos atrás, doidopb disse:

Olá Juliomar, obrigado pela dica.

Nunca fiz uso do envio de DANFE por e-mail usando componentes do próprio ACBr, poderia me dar a dica de qual(is) unit(s) tem o que me interessa?

Desde já obrigado

Você consegue ver o seu uso com o exemplo do ACBrNFe

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Grato Juliomar,

Dei uma olhada e realmente ele deixa enviar o e-mail junto com o DANFE, mas ao menos no exemplo que tenho aqui na minha máquina, ele faz uso do ACBrMail para tal.

Meu intuito era fazer tudo através do Fortes Report, ativando aquele botão ENVIAR do componente na tela de Preview,

Editado por doidopb
Link para o comentário
Compartilhar em outros sites

  • Moderadores
4 minutos atrás, doidopb disse:

Grato Juliomar,

Dei uma olhada e realmente ele deixa enviar o e-mail junto com o DANFE, mas ao menos no exemplo que tenho aqui na minha máquina, ele faz uso do ACBrMail para tal.

Meu intuito era fazer tudo através do Fortes Report, ativando aquele botão ENVIAR do componente na tela de Preview,

Boa tarde

acho que para isso ele só irá funcionar se for chamado preview

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • 9 meses depois ...
  • Membros Pro
Em 18/09/2017 at 15:38, Juliomar Marchetti disse:

Boa tarde

acho que para isso ele só irá funcionar se for chamado preview

Olá Juliomar... tudo bom?

Então... Consegui colocando um RLPreviewSetup1 e jogando o código no evento RLPreviewSetup1Send.

O problema agora é que TODOS os relatórios do meu sistema estão vinculados a esse objeto, e consequentemente executando esse código. Eu preciso que somente UM relatório visualize esse RLPreviewSetup1. É possível?

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
45 minutos atrás, Juliomar Marchetti disse:

sim tu pode adicionar o evento somente quando for executar essa parte do sistema.

Olá Juliomar... Obrigado pela resposta

Então... Eu basicamente fui no evento OnSend do componente e adicionei os comandos de geração do PDF e envio do e-mail lá, não sei como adicionar o evento da maneira que sugeriu.

Você teria um exemplo de como eu posso adicionar o evento somente quando eu for executar essa parte do sistema?

Link para o comentário
Compartilhar em outros sites

  • Moderadores
  • Solution
35 minutos atrás, doidopb disse:

Olá Juliomar... Obrigado pela resposta

Então... Eu basicamente fui no evento OnSend do componente e adicionei os comandos de geração do PDF e envio do e-mail lá, não sei como adicionar o evento da maneira que sugeriu.

Você teria um exemplo de como eu posso adicionar o evento somente quando eu for executar essa parte do sistema?

Sim basicamente  tu vai implementar o procedimento

procedure X(Sender:TObject);

 

e quando for usar vai passar lá para o componente

RLREport.onchamaX := X;

e depois vai retirar

RLREport.onchamaX := nil;

  • Curtir 1
Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Obrigado pela dica, tentei fazer, mas está dando erro... Creio que estou "pecando" em algo.

Basicamente criei uma procedure onde programo a ação que acontecerá no OnSend:

procedure Trlr_rel_vendasnfce.EnviarEmail;
var
  para:String;
begin
  para := InputBox('Enviar relatório por e-mail','Preencha o(s) e-mail(s) abaixo:', '');
  if para <> '' then
    begin
      try
        RLReport1.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf');

        frm_aviso := Tfrm_aviso.Create(Application);
        frm_aviso.lbl_aviso.Caption := '   Enviando e-mail';
        frm_aviso.Show;
        frm_aviso.BringToFront;
        Application.ProcessMessages;

        dtm_banco.ACBrMail1.Clear;
        dtm_banco.ACBrMail1.IsHTML := False;
        dtm_banco.ACBrMail1.Subject := 'Relatório Vendas NFCe ';

        AjustaParametrosDeEnvio(para);

        dtm_banco.ACBrMail1.AltBody.Text := 'Empresa: ' + dtm_banco.Emitente_Nome + #13 + #13 +
                                            'CNPJ: ' + dtm_banco.Emitente_CNPJCPF + #13 + #13 +
                                            'Telefone: ' + dtm_banco.Emitente_Fone + #13 + #13 +
                                            #13 + #13 + #13 + #13 +
                                            '* Este e-mail foi enviado automaticamente pelo aplicativo da B&D Sistemas.Favor não responder. ';

        dtm_banco.ACBrMail1.AddAttachment(ExtractFilePath(Application.ExeName) + 'relatorio.pdf');

        dtm_banco.ACBrMail1.Send(False);

        frm_aviso.Free;
        ShowMessage('Relatório enviado com sucesso');
      except
        on E : Exception do
          begin
            frm_aviso.Free;
            ShowMessage('ERRO' + #13 + #13 + e.message);
          end;
      end;
    end;
end;

Aí no evento BeforePrint do RLReport1 eu coloquei o seguinte comando:

  RLPreviewSetup1.OnSend := EnviarEmail;

E no evento AfterPrint do RLReport1 eu coloquei o seguinte comando:

  RLPreviewSetup1.OnSend :=nil;

Mas na linha do BeforePrint (RLPreviewSetup1.OnSend := EnviarEmail;) está retornando o seguinte erro:

[DCC Error] u_report_rel_vendasnfce.pas(252): E2009 Incompatible types: 'Parameter lists differ'

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membros Pro
13 minutos atrás, Rafael Dias disse:

Simples a função que tu passou para o evento não contempla os parâmetros que o evento espera.

Olhe como é o evento na hora que você adiciona pelo object inspector e copie os mesmo parâmetros para sua função.
 

Perfeito, valeu pela dica... Ao tentar pelo Object Inspector ele cria a procedure da seguinte forma:

procedure Trlr_rel_vendasnfce.RLPreviewSetup1Send(Sender: TObject);

Aí "empaquei". Qual valor TObject devo colocar???? Como devo escrever????

Link para o comentário
Compartilhar em outros sites

  • Membros Pro
4 minutos atrás, Rafael Dias disse:

Não precisa colocar nenhum valor apenas atribui a função ao evento que quando o evento for chamado ele se encarregara de colocar o valor no TObject.

Então, eu atribuo a procedure EnviarEmail ao evento onSend do componente e dá esse erro... Mas como suspeitei era falha minha, não observei direito o exemplo do amigo Juliomar...

Faltou colocar "(Sender: TObject)" na procedure EnviarEmail.

procedure EnviarEmail(Sender: TObject);

Dessa maneira compilou sem erro, o problema é que o botão ENVIAR do Preview do Fortes fica desativado, como se a linha "rlr_rel_vendasnfce.RLPreviewSetup1.OnSend := rlr_rel_vendasnfce.EnviarEmail;" não fosse carregada.

Por garantia comentei a linha "rlr_rel_vendasnfce.RLPreviewSetup1.OnSend :=nil;", mas mesmo assim o botão continua desativado. Se eu programar no onSend direto pelo Object Inspector o botão ativa.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Falha minha novamente... tinha um "rlr_rel_vendasnfce.RLPreviewSetup1.OnSend :=nil ;" perdido pelo código... Ficou perfeito.

Mas agora estou pensando além e creio que posso criar algo bem melhor, prático e que pode servir para todos que usam o Fortes e finalmente teremos um (bom) exemplo de envio de e-mail.

A minha idéia é a seguinte: Já que o RLPreviewSetup1 é visto por todos os relatórios do meu aplicativo, posso colocar ele no meu DataModule e criar um código universal, daí o usuário poderá usar o botão ENVIAR da Pré-Visualização de qualquer relatório.

O código que postei acima serve perfeitamente, o problema será o comando da geração do PDF:

RLReport1.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf');

Como podem ver acima eu estou especificando um relatório... Existe algum comando que salve o PDF do relatório que está com a Pré-Visualização em execução??? Algo tipo "RLReportEmVisualizacaoNoMomento.SaveToFile(ExtractFilePath(Application.ExeName) + 'relatorio.pdf');"????

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2103 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.