Ir para conteúdo
  • Cadastre-se

dev botao

Envio De Nfe Usando Thread.


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

Recommended Posts

Olá,

  implementei o processamento dos NF-e(geração, assinatura, envio e impressão) usando Thread.

  eu estava tendo um problema ao buscar os certificados, e verifiquei que no método "TCertificadosConf.GetCertificado" da unit ACBrCTeConfiguracoes, existe a chamada "CoInitialize(nil)" com o comentário "PERMITE O USO DE THREAD".

  Coloquei este mesmo código "CoInitialize(nil);" no método "TCertificadosConf.GetCertificado" da unit "ACBrNFeConfiguracoes" e o erro parou de ocorrer.

  isso é correto?

  

obrigado pela atenção.

Carlos H. Marian

Analista de Sistemas

|/-\|

Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Que tipo de problema que vc estava tendo?

 

Boa tarde André,

 

Enfrentei o mesmo problema que o Carlos.

 

O erro realmente ocorre quando executado o método GetCertificado dentro de uma Thread.

A Thread necessita que o comando CoInitialize(nil) seja executado, para processar corretamente a API do ActiveX.

 

Para resolver esse problema criei uma condição de compilação, segue em anexo o fonte para ser analisado.

ACBrNFeConfiguracoes.pas

ACBrNFeConfiguracoes.pas

Editado por Vanessinha Mocellin
  • Curtir 4

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois ...
  • Moderadores

ola

Já subiram esta modificação da Vanessinha?

Pois realmente o erro esta ocorrendo.

Agradeço

Não

Você baixou o código? testou em sua aplicação? resolveu seu problema?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

Link para o comentário
Compartilhar em outros sites

Não

Você baixou o código? testou em sua aplicação? resolveu seu problema?

Boa tarde Juliomar

 

Resolve sim, é apenas uma diretiva de compilação, optei por fazer dessa forma para que o processamento de quem não utiliza Thread permaneça o mesmo.

Para quem utiliza com Thread, basta adicionar a diretiva de compilação em seu projeto.

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa tarde Juliomar

 

Resolve sim, é apenas uma diretiva de compilação, optei por fazer dessa forma para que o processamento de quem não utiliza Thread permaneça o mesmo.

Para quem utiliza com Thread, basta adicionar a diretiva de compilação em seu projeto.

No caso estava falando para o Caetano ! 

Para ver se ele fez o teste e baixou o código seu e testou

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

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

 

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Juliomar,

 

No caso do ACBrCTe temos no inicio da function GetCertificado o CoInitialize(nil) e no final o CoUninitialize, este não se faz necessário?

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

No caso estava falando para o Caetano ! 

Para ver se ele fez o teste e baixou o código seu e testou

Eu entendi a quem estava sendo direcionada a pergunta Juliomar hehehe a questão é que não tinha porque não fucionar kkkk

Att. Vanessa Mocellin | Arquiteta de Sistemas 
Sysmo Sistemas Ltda
São Miguel do Oeste - SC | Filial: Itajaí - SC
Fone: 49 3631.0600 | Ramal: 612

www.sysmo.com.br

Link para o comentário
Compartilhar em outros sites

Boa tarde.

Hoje resolvi atualizar o ACBr, dai quando fui rodar a aplicação, me deparei com o erro: OLeSysError with message 'CoInitialize não foi chamado'.

No Delphi aqui, quando dá o erro, ele abre e fica parado na unit ACBrNFeUtil.

 

Detalhe, já utilizamos thread antes para emitir as notas, já havia descomentado a linha CoInitialize(nil); // PERMITE O USO DE THREAD

Mas como atualizei pelo tortoise, deu conflito e resolvi o conflito dando preferência para o arquivo do projeto ACBr, depois olhei lá e o mesmo já veio com a uses da unit ActiveX e a linha CoInitialize(nil); // PERMITE O USO DE THREAD descomentada, mas o erro continua.

 

Alguém já conseguiu resolver?

Obrigado.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Boa tarde

Não serviu o método inserido aqui no código?

então é conforme solicitei acima para que fosse feito testes, dois colegas (Vanessa e Caetano) avisaram que funcionou , mas no seu caso não!

precisa encontrar em seu código o que está ocorrendo ou se for problema com essa alteração, achar o erro debugando e repassar aqui a solução para resolvermos

  • 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_Transparent-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Boa tarde

Não serviu o método inserido aqui no código?

então é conforme solicitei acima para que fosse feito testes, dois colegas (Vanessa e Caetano) avisaram que funcionou , mas no seu caso não!

precisa encontrar em seu código o que está ocorrendo ou se for problema com essa alteração, achar o erro debugando e repassar aqui a solução para resolvermos

Bom dia Juliomar.

Acho que não esclareci direito.

Já funcionava antes, com a linha 'CoInitialize(Nil)' descomentada.

Apenas atualizei os fontes, observei que já está vindo com a mesma linha descomentada e a uses da ActiveX, porém o erro persiste, como se não estivesse chamando o método, não estou utilizando essas as diretivas de compilaçao do ACBr.inc incluídas pelos colegas {IFDEF ACBrThread}.

Obrigado.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Estranho  !

será que você não tem mais alguma coisa ou em especifico que utilize antes mesmo do componente e não esteja sendo feito isso em sua aplicação!?

  • 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_Transparent-02.png
 

 

Link para o comentário
Compartilhar em outros sites

Achei, pelo menos eu acho.

Percebi uma chamada de 'CoUninitialize' na unit ACBrNFeConfiguracoes.

Comentei, no bloco finally da function GetCertificado a chamada 'CoUninitialize', testei e funcionou, depois descomentei novamente e deu o erro.

finally
			  Lista.free;
			end;
            break;
          end;
         Extension := nil;
       end;

      break;
    end;
  end;

  if not(Assigned(Result)) then
    raise EACBrNFeException.Create('Certificado Digital não encontrado!');
  finally
    // CoUninitialize;
  end;

Tem algum problema em comentar ai?

Obrigado.

Leandro Araújo, Analista de Sistemas.

Link para o comentário
Compartilhar em outros sites

Não daria para chamar na 'Finalization' da aplicação?
Ou então, chamar novamente o 'CoUnitialize' lá na ACBrNFEUtil, onde está o erro?

Desculpem não poder indicar em qual procedure ou function ocorre o erro, por algum motivo o IDE aqui não está debugando, mas mesmo assim para lá na untit ACBrNFEUtil.

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3474 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.