Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 3509 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia,

 

Após enviar o CT-e e receber as informações  tenho uma rotina que envia os email aos respectivos envolvidos, porém, se existe mais de um CT-e a exportação do PDF vai se repetindo a cada CT-e, exemplo:

 

3 CT-e :

 

Exporta o numero 1 na primeira vez

Exporta os numero 1,2 na segunda vez

Exporta os numero 1,2,3 na terceira vez

 

 

Segue parte rotina 

 

 

if EnviarEmail and EnviarSefaz then

      begin
        memoStatus.Lines.Add('');
        memoStatus.Lines.Add('Enviando Conhecimento(s) por e-mail');
        memoStatus.Lines.Add('');
        for I := 0 to (CTeSYS4.WebServices.Retorno.CteRetorno.ProtCTe.
          Count - 1) do
        begin
          EnderecoEmail := sEmailsCTe;
          sDataHora := DateTimeToStr
            (CTeSYS4.WebServices.Retorno.CteRetorno.ProtCTe.Items.DhRecbto);
          sProtocolo := CTeSYS4.WebServices.Retorno.CteRetorno.ProtCTe.
            Items.nProt;
          sStat := IntToStr(CTeSYS4.WebServices.Retorno.CteRetorno.ProtCTe.Items
            .cStat);
          sMotivo := CTeSYS4.WebServices.Retorno.CteRetorno.ProtCTe.Items
            .xMotivo;
          sChave := CTeSYS4.WebServices.Retorno.CteRetorno.ProtCTe.
            Items.chCTe;
          sConhecimento := Copy(sChave, 26, 3) + '.' + Copy(sChave, 29, 3) + '.'
            + Copy(sChave, 32, 3);
          sCTRCMax := SiglaFilial + 'E' +
            Zero(StrToInt(SoNumero(sConhecimento)), 6, True, '0');
          if EnderecoEmail <> '' then
          begin
            sCC.Clear;
            mmEmailMsg.Clear;
            mmEmailMsg.Lines.Add
              ('Comunicamos por este e-mail, a emissão do Conhecimento Eletrônico (Chave : '
              + sChave + ') e autorização de uso sob o protocolo : ' +
              CTeSYS4.Conhecimentos.Items.CTe.procCTe.nProt);
            mmEmailMsg.Lines.Add(' ');
            mmEmailMsg.Lines.Add(' CTe Numero :' + sConhecimento);
            mmEmailMsg.Lines.Add(' ');
            mmEmailMsg.Lines.Add
              ('Enviamos em anexo o arquivo XML do respectivo CT-e.');
            mmEmailMsg.Lines.Add(' ');
            mmEmailMsg.Lines.Add('Atenciosamente,');
            mmEmailMsg.Lines.Add(' ');
            mmEmailMsg.Lines.Add(NomeFilial);
            mmEmailMsg.Lines.Add('System4 - CTe');
            if trim(EmailCopiaFilial) <> '' then
              sCC.Add(trim(EmailCopiaFilial));
            if trim(EmailContabilidade) <> '' then
              sCC.Add(trim(EmailContabilidade));
            Ok := False;
            Falha := False;
            memoStatus.Lines.Add('CT-e         : ' + sConhecimento);
            memoStatus.Lines.Add('Chave        : ' + sChave);
            memoStatus.Lines.Add('Destinatário : ' + EnderecoEmail);
            for I2 := 0 to sCC.Count - 1 do
            begin
              memoStatus.Lines.Add('Cópia para   : ' + sCC[i2]);
            end;
            // Se houver mais de uma host utilize o contador
            // iHost := 1 ate os que tiver
            repeat
              memoStatus.Lines.Add('');
              try
                CTeSYS4.Conhecimentos.Items.EnviarEmail(edtSmtpHost.Text,
                  edtSmtpPort.Text, edtSmtpUser.Text, edtSmtpPass.Text,
                  edtSmtpUser.Text, EnderecoEmail, edtEmailAssunto.Text +
                  ' Nº : ' + sConhecimento, mmEmailMsg.Lines,
                  chkEmailSSL.Checked, True // Enviar PDF junto
                  , sCC // Lista com emails que serão enviado cópias - TStrings
                  , nil // Lista de anexos - TStrings
                  , chkPedeConfirmacao.Checked, False, NomeFilial, False);
                // Pede confirmação de leitura do email
                Ok := True;
                memoStatus.Lines.Add('Enviado pelo Host [' +
                  HostSmtpFilial + ']  ');
                memoStatus.Lines.Add('');
              except
                Ok := False;
                Falha := True;
              end;
            until Ok or Falha;
            memoStatus.Lines.Add('');
            if Falha then
              MessageDlg('E-mail não enviado por motivo de Falha.', mtError,
                [mbOk], 0);
          end
          else
          begin
            // MessageDlg('Tomador do Serviço não possui, e-mail Cadastrado CTe : ' + sConhecimento, mtInformation, [mbOk], 0);
            Ok := False;
          end;
       if Ok then
          MessageDlg('E-mail enviado com Sucesso.', mtInformation, [mbOk], 0)
        else
          MessageDlg('Nem Todos E-mails foram enviado com Sucesso.',
            mtInformation, [mbOk], 0);
        sCC.Free;
        sEmailsCTe.Free;
      end;

 

 

 

 

 

Postado (editado)

obirgado pela informação !

 

Como carrego todos CTE-s no componente depois utilizo um a um através de um FOR..., fazendo o uso do DEBUG percebi que a procedure TACBrCTeDACTEFR.ImprimirDACTEPDF da unit ACBrCTeDACTEFR conforme abaixo:

 

procedure TACBrCTeDACTEFR.ImprimirEVENTOPDF(CTE: TCTe);

const
  TITULO_PDF = 'Conhecimento de Transporte Eletrônico - Evento';
var
  I: Integer;
  NomeArq: String;
begin
  if PrepareReportEvento then
  begin
    dmDacte.frxPDFExport.Author     := Sistema;
    dmDacte.frxPDFExport.Creator    := Sistema;
    dmDacte.frxPDFExport.Producer   := Sistema;
    dmDacte.frxPDFExport.Title      := TITULO_PDF;
    dmDacte.frxPDFExport.Subject    := TITULO_PDF;
    dmDacte.frxPDFExport.Keywords   := TITULO_PDF;
    dmDacte.frxPDFExport.ShowDialog := False;
 
    for I := 0 to TACBrCTe(ACBrCTe).Conhecimentos.Count - 1 do
    begin
      NomeArq := StringReplace(TACBrCTe(ACBrCTe).EventoCTe.Evento.Items[0].InfEvento.id, 'ID', '', [rfIgnoreCase]);
 
      dmDacte.frxPDFExport.FileName := IncludeTrailingPathDelimiter(PathPDF) +
                                       NomeArq {dmDacte.CTe.procCTe.chCTe} +
                                       '-procEventoCTe.pdf';
      dmDacte.frxReport.Export(dmDacte.frxPDFExport);
    end;
  end;
end;

 

Executa um FOR com todos os conhecimentos toda vez que é chamada, para resolver o problema por aqui, tive que comentar as linha dos FOR como abaixo:

 

procedure TACBrCTeDACTEFR.ImprimirEVENTOPDF(CTE: TCTe);

const
  TITULO_PDF = 'Conhecimento de Transporte Eletrônico - Evento';
var
//  I: Integer;
  NomeArq: String;
begin
  if PrepareReportEvento then
  begin
    dmDacte.frxPDFExport.Author     := Sistema;
    dmDacte.frxPDFExport.Creator    := Sistema;
    dmDacte.frxPDFExport.Producer   := Sistema;
    dmDacte.frxPDFExport.Title      := TITULO_PDF;
    dmDacte.frxPDFExport.Subject    := TITULO_PDF;
    dmDacte.frxPDFExport.Keywords   := TITULO_PDF;
    dmDacte.frxPDFExport.ShowDialog := False;
 
//    for I := 0 to TACBrCTe(ACBrCTe).Conhecimentos.Count - 1 do
//    begin
      NomeArq := StringReplace(TACBrCTe(ACBrCTe).EventoCTe.Evento.Items[0].InfEvento.id, 'ID', '', [rfIgnoreCase]);
 
      dmDacte.frxPDFExport.FileName := IncludeTrailingPathDelimiter(PathPDF) +
                                       NomeArq {dmDacte.CTe.procCTe.chCTe} +
                                       '-procEventoCTe.pdf';
      dmDacte.frxReport.Export(dmDacte.frxPDFExport);
//    end;
  end;
end;

 

 

utilizo o fastreport como podem notar, a pergunta é isto pode ser alterado na distribuição do componente ou existe uma outra maneira para se contornar este problema no meu caso.

Editado por Adelson
  • Este tópico foi criado há 3509 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.