Ir para conteúdo
  • Cadastre-se

dev botao

Criar Componentes Tacbrnfe E Tacbrnfedanfefr Em Tempo De Execução


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

Recommended Posts

Olá, gostaria de saber por que o erro "cdsIdentificacao: Missing data provider or data packet" aparece ao tentar imprimir a NFe quando crio os componentes dinamicamente ?

 

Resumindo as linhas que crio são:

 

 

var
  _ACBrNFeDANFE: TACBrNFe;
  _ACBrNFeDANFEFR: TACBrNFeDANFEFR;
begin
 _ACBrNFeDANFEFR := TACBrNFeDANFEFR.Create(Self);
 
  _ACBrNFeDANFE := TACBrNFe.Create(Self);
  _ACBrNFeDANFE.Configuracoes.Geral.IniFinXMLSECAutomatico := False;
 
  _ACBrNFeDANFEFR.ACBrNFe := _ACBrNFeDANFE;
 
  //Aqui coloco preencho as propriedades dos objetos como Certificado no _ACBrNFeDANFE, FastFile no _ACBrNFeDANFEFR, etc. e tudo vai bem até a linha abaixo

 

 _ACBrNFeDANFE.NotasFiscais.ImprimirPDF;

end;

 

Alguém sabe se tenho que preencher algo crucial no objeto _ACBrNFeDANFEFR ?

 

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • Solution

Pessoal, parece que o componente ACBrNFeDANFEFR gera o erro acima quando existe mais que um dele no projeto vejam em 

Como já tinha lido o tópico acima, só mantinha um deles instanciado, mas ao que parece, mesmo assim não posso criar outro dinamicamente.

O que fiz: excluí os únicos dois componentes instanciados (TACBrNFe e ACBrNFeDANFEFR) e os criei dinamicamente com as linhas que citei e funcionou, mas ainda não me atendeu e digo porque.

Tive todo esse trabalho porque meu projeto é feito em multi camadas, ou seja, possui um TDSServerModule por onde passam todas as conexões e se um usuário abrisse mais que uma instância do executável, o objeto ACBrNFeDANFEFR mantinha em memória a última NF impressa, ou seja, não reconhecia a leitura do novo XML, lembro que isso só acontecia se eu abrisse duas instâncias do meu sistema.

Depois de muitos testes vi que o problema era resolvido de duas formas:

1a. se dentro do meu ServerContainer eu mondasse a propriedade LifeCycle do componente TDSServerClass de Session para Invocation (que destrói a instância dos objetos assim que são enviados ao cliente).

2a. se eu criasse uma nova unit simples, com os objetos instanciados lá e "simulasse" um "LifeCycle Invocation", ou seja, cada vez que eu preciso utilizar os objetos ACBR, eu crio o formulário (nem preciso dar o Show) e o destruo após a impressão do DANFE ou envio de informações.

Optei pela 2a solução, pois não tive que fazer grandes mudanças no meu código.

Bom, pessoal é isso aí, espero que possa ter ajudado alguém e se houver outra forma de resolver o problema, avisem-me.

Abraço.

 
Link para o comentário
Compartilhar em outros sites

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