Ir para conteúdo
  • Cadastre-se

dev botao

ACBRNFeNotasFiscais Erro no proc.EnviarEmail - RESOLVIDO


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

Recommended Posts

Boa tarde pessoal,

bem coloquei meu sistema para enviar múltiplas notas e após o envio das notas realizar o envio do email - xml e pdf (se requisitado). No envio coloquei pra salvar o pdf da Danfe numa pasta específica, como exemplo vamos tomar C:\DANFE_PDF\ ...

A NFe está sendo transmitida à SEFAZ perfeitamente, os pdfs estão sendo armazenados perfeitamente tb. Porém no momento de enviar por email ao cliente e à uma conta de backup ocorre o seguinte erro, geralmente em um lote de 5 notas ocorre pelo menos em 1 nota:

"OCORRERAM OS SEGUINTES ERROS: CANNOT CREATE FILE "C:\DANFE_PDF\22000810174444000120550010000053551000999992.pdf". O ARQUIVO JÁ ESTÁ SENDO USADO POR OUTRO PROCESSO."

O erro está dentro do procedure NotaFiscal.EnviarEmail(const sSmtpHost,sSmtpPort,sSmtpUser,sSmtpPasswd,sFrom,sTo,sAssunto: String;sMensagem : TStrings;SSL : Boolean;EnviaPDF: Boolean = true;sCC: TStrings=nil;Anexos:TStrings=nil;PedeConfirma: Boolean = False;AguardarEnvio: Boolean = False;NomeRemetente: String = '';TLS : Boolean = True);

na linha: TACBrNFe( TNotasFiscais( Collection ).ACBrNFe ).DANFE.ImprimirDANFEPDF(NFe); Coloquei ela até dentro de um try e mesmo assim aparece a mensagem de erro, porém mesmo com essa mensagem de erro as notas são enviadas por email, esse é o mais estranho!

Já tive casos da mensagem aparecer para a primeira nota, às vezes para segunda e assim por diante, às vezes mais de uma vez para mais de uma nota e às vezes somente para uma de cinco, sendo que como estou em homologação grande parte dos dados das notas são os mesmos mudando só a numeração da NFe.

Att.

Rômulo Mayworm

Focus Automação - RJ

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Alguma coisa está deixando o arquivo C:\DANFE_PDF\22000810174444000120550010000053551000999992.pdf aberto e no método de enviar email não está conseguindo sobreescrever o arquivo.

Vc pode alterar o função ImprimirDANFEPDF para não gerar o PDF novamente se já encontrar o arquivo na pasta.

djsystem-logo.png
 youtube.png facebook.png instagram.png linkedin.png
André Ferreira de Moraes | Analista de Sistemas
www.djsystem.com.br | www.djpdv.com.br
www.tefhouse.com.br | www.lambretinha.com.br
Link para o comentário
Compartilhar em outros sites

Funcionou dessa forma!

no mesmo procedimento que descrevi acima, no enviaremail, coloquei da seguinte forma:

if (EnviaPDF) then

    begin

       if TACBrNFe( TNotasFiscais( Collection ).ACBrNFe ).DANFE <> nil then

       begin

         if not FileExists(PathWithDelim(TACBrNFe( TNotasFiscais( Collection ).ACBrNFe ).DANFE.PathPDF)+(StringReplace(NFe.infNFe.ID,'NFe', '', [rfIgnoreCase]))+'.pdf') then

           TACBrNFe( TNotasFiscais( Collection ).ACBrNFe ).DANFE.ImprimirDANFEPDF(NFe);

         NomeArq :=  StringReplace(NFe.infNFe.ID,'NFe', '', [rfIgnoreCase]);

         NomeArq := PathWithDelim(TACBrNFe( TNotasFiscais( Collection ).ACBrNFe ).DANFE.PathPDF)+NomeArq+'.pdf';

         m.AddPartBinaryFromFile(NomeArq, p);

       end;

    end;

E agora os erros acabaram!

Obrigado amigo!

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

André, só uma coisinha, teria como você repassar essa alteração se possível ao desenvolvedor responsável pelo ACBRNFe?

Acredito que seria de grande valia para os usuários.

Obrigado,

Rômulo Mayworm

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

A alteração feita foi na ACBRNFEDANFEFR.pas:

procedure TACBrNFeDANFEFR.ImprimirDANFEPDF(NFE: TNFe);

const

  TITULO_PDF = 'Nota Fiscal Eletrônica';

var

  I: Integer;

begin

  if PrepareReport(NFE) then

  begin

    dmDanfe.frxPDFExport.Author     := Sistema;

    dmDanfe.frxPDFExport.Creator    := Sistema;

    dmDanfe.frxPDFExport.Producer   := Sistema;

    dmDanfe.frxPDFExport.Title      := TITULO_PDF;

    dmDanfe.frxPDFExport.Subject    := TITULO_PDF;

    dmDanfe.frxPDFExport.Keywords   := TITULO_PDF;

    dmDanfe.frxPDFExport.ShowDialog := False;


    for I := 0 to TACBrNFe(ACBrNFe).NotasFiscais.Count - 1 do

    begin

      if not FileExists(PathPDF + dmDanfe.NFe.procNFe.chNFe + '.pdf') then begin

        dmDanfe.frxPDFExport.FileName := PathPDF + dmDanfe.NFe.procNFe.chNFe + '.pdf';

        dmDanfe.frxReport.Export(dmDanfe.frxPDFExport);

      end;

    end;

  end;

end;

"Não me envergonho de mudar de opinião, porque não me envergonho de pensar" (Blaise Pascal)

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...

Boa tarde, pessoal. Estou tendo um problema no envio de arquivos através do Acbr, então resolvi reativar este tópico, a fim de evitarmos duplicidade nos assuntos.

O erro está acontecendo quando tento enviar os arquivos  (xmL e Pdf ). o erro retornado é o abaixo :

NomeArq := PathWithDelim(TACBrNFe( TNotasFiscais( Collection ).ACBrNFe ).DANFE.PathPDF)+NomeArq+'.pdf'

 

2) Entenda-se que essa é a linha em que o debug está parando.

3) Interessante é que tenho o mesmo código funcionando perfeitamente utilizando-me de um outro provedor (Lecom). Neste caso atual estou tentando mandar atraves do Hotmail.Abri uma conta la, coloquei os dados, etc, porta 587 mas não consigo fazer funcionar.

Se for interessante, postarei o código utilizado (o mesmo do demo do Acbr ).

 

Agradecido pela atenção.

 

Link para o comentário
Compartilhar em outros sites

Ola, estou aqui de novo. Constatei que, na parte do código onde coloca-se True (envia pdf anexo) e false (não envia ), colocando-se " False " o email é enviado normalmente. O erro de violação de endereço somente aparece quando a gente tenta enviar, juntamente com o .xml, também o arquivo .Pdf.

 

Vale acrescentar que tenho, no programa emissor, uma rotina que exporta para .Pdf, e essa está funcionando normalmente (teria algo a ver ? ) ..

obrigado de novo pela atenção de vocês.

Link para o comentário
Compartilhar em outros sites

Ola, Juliomar, bom dia. Primeiro, desculpe-me por ter demorado para responder. É que prefiro contar até 100 antes de  decidir o que fazer.  Eu não ia mais retornar aqui.

Por favor, não me convide mais para ler as regras do fórum. Desculpe-me, sei que errei, assumo, mas só prá vc ter uma idéia eu tenho 66 anos. Não faria um erro elementar desses , não lendo as regras. É que fiquei ansioso, não sabia se o tópico seria reaberto, então, precipitadamente, abri outro. Sei que explica mas não justifica.

Assim, mais uma vez eu lhe peço desculpas, como  moderador, pelo incômodo que devo ter causado com minha atitude ;  fique certo de que procurarei fazer com que não aconteça mais.

 

2) Respondendo a sua pergunta : Eu estou utilizando o Danfe Rave, na verdade não consegui instalar o Fast Report em minha máquina, apesar de eu haver deletado o Delphi anterior e reinstalado tudo de novo. Como o instalador que acompanha o ACBR não termina a instalação em meu sistema e, assim, tenho de instalar tudo manualmente, usei o Rave em vez do FR.

Agora, algo digno de nota : Eu tenho outro programa (rodando em uma empresa) -- do qual eu copiei / colei a rotina -- e funciona corretamente (tanto na empresa quanto na minha máquina ) -- utilizando inclusive o mesmo servidor (Lecom.com.br) , o mesmo usuário e a mesma senha.

Só que quando coloco no sistema atual não funciona.

Faz uns três dias que estou quase ficando doido (rs rs ). Mas sou persistente e acabarei encontrando o erro.

Obrigado pela sua atenção, e dos demais membros do fórum.

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois ...
  • 2 anos depois...
  • Este tópico foi criado há 3055 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.