Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Access Violation Na Impressão Da Nfe


Go to solution Solved by Otavio Benini,
  • Este tópico foi criado há 3331 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

prezados,

 

em alguns aplicativos utilizo os componentes da NFe e DANFERave no mesmo form onde trato os demais dados da NFe; entrego, imprimo o DANFE, envio email e tudo ok;

 

num aplicativo em desenvolvimento utilizei um form para tratar os dados da NFe e outro com os componentes e funçoes comuns da NFe, como consulta, cancelamento, etc.

 

do form-base chamo o form da NFe e envio a NFe, recebo o protocolo ok, mas quando vai para impressão (automática na chamada do .Enviar(lote,true)), já na tela do Rave, ao clicar OK recebo um Access Violation (anexo mensagem)

 

onde estou errando ?

o que está faltando ?

o xml está ok, protocolado, entregue

já re-instalei o DANFERave

o mesmo erro ocorre se opto por Imprimir e aponto o xml existente

o xml pode ser impresso através dos outros programas existentes

post-305-0-80861900-1362617382.jpg

 

agradeço a atenção

Otavio Benini

 

post-305-0-80861900-1362617382.jpg

Link to comment
Share on other sites

  • Consultores

Faz o debug do código e poste exatamente qual linha que está gerando o erro de AV.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Consultores

Você consegue ver se um dos objetos é nil? Talvez o Connection ou o FNFe, ou o Det?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Consultores

Ponha um BreakPoint na linha que está gerando erro, no caso você diz 486. Daí quando o Delphi parar nessa linha você tem duas opções:

  1. Vá com o mouse em cima do objeto e deixe ele parado por alguns segundos. Isso vai mostrar o valor;
  2. ou Adicione um watch. (Você faz isso apertando Ctrl+F5, e escrevendo o objeto que deve ser analisado);

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Membros Pro

Elton,

 

adicionei 3 watches: FNFE, Connection e Det

FNFE = nil

Det = undeclared identifier

Connection:

([csInheritable], '7.7.0 (VCL2010)', 684, #4, 0, nil {#0}, 65536, 0, #4, #9, nil {#0}, False, $126BE10, True, 'RT', False, $125CE38, 0, 0, 0, 0, '', '', '', True, False, rtDeveloper, $1283A00, (nil,nil), (nil,nil), (nil,nil), (ACBrNFeDANFERaveDM.TdmACBrNFeRave.CustomDadosProdutosCXNGetCols,$124F930), (ACBrNFeDANFERaveDM.TdmACBrNFeRave.CustomDadosProdutosCXNGetRow,$124F930), (nil,nil), (nil,nil), (nil,nil), (ACBrNFeDANFERaveDM.TdmACBrNFeRave.CustomDadosProdutosCXNOpen,$124F930), (nil,nil), (nil,nil))

 

sds

Otavio Benini

 

imagem:

post-305-0-96799000-1362760825_thumb.jpg

Link to comment
Share on other sites

  • Consultores

Ok, vamos por partes:

 

O valor retornado pelo Connection mostra diversas propriedades, o que significa que o objeto está carregado na memória. Ou em outras palavras: "tudo ok".

 

Det = undeclared identifier

 

Significa que o Delphi não encontrou o Det. Isso era esperado, pois Det é parte do FNFE. Ou seja, para adicioná-lo no watch você teria que ter adicionado FNFE.Det. De qualquer forma o nosso vilão está no seguinte:

 

FNFE = nil

 

Isso quer dizer que o objeto FNFE não está acessível na memória. Então quando o componente tenta acessá-lo para buscar o valor do contador (linha apresentada), será gerado um erro de violação de acesso, ou Access Violation (AV). Pois, dizendo a grosso modo, você está tentando acessar algo que não existe na memória.

 

Como essa unit parece ser do seu programa, revise o código, o motivo de você estar acessando aí o objeto FNFE e o porquê ele não estar criado.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Membros Pro

Elton,

 

essa unit é a ACBrNFeDANFERaveDM, ou seja, do componente de impressão

o erro é apresentado logo após clicar OK na tela do Rave

ainda é possível ver a mensagem de "imprimindo pagina 1", muito rapidamente

por favor, da uma lida no post inicial desta questão

 

Otavio Benini

Link to comment
Share on other sites

  • Consultores

Olá Otávio,

 

  Desculpe-me. Você tem razão. Essa unit é do ACBr... Ainda assim os objetivos para encontrar o erro continuam os mesmos.

 

  Você deve ter percebido que esse DataModule possui uma propriedade NFe. O que essa propriedade recebe é passado para o objeto FNFE. Em algum certo momento esse objeto precisa ser criado e preenchido e, pelo que eu vi, isso acontece fora desta unit.

  Em que momento é preenchido essa propriedade? Você precisa encontrar porque o erro é justamente causado quando a propriedade não está sendo preenchida.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Membros Pro

Elton,

 

vou explicar de outro modo prá vc entender:

 

inicio a rotina informando para o componente ACBrNFe algumas informações como ambiente, certificado, etc;

 

depois "preencho" a NFe usando ACBrNFe1.NotasFiscais.Add.NFe

 

depois usando ACBrNFe1.Enviar(NumNFe,true) o xml é criado, entregue, protocolado, tudo direitinho e é essa rotina quem manda imprimir (true), eu não faço nada além

 

ou seja, tudo acontece dentro do componente;

 

se pego o xml gerado, e protocolado, eu consigo impressão usando outro programa que também usa o componente

 

a questão está, portanto, dentro desse modelo, lógico, de usar um único form com um único componente da Nfe e um único componente de impressão sendo chamados por outros forms; tudo está correto, exceto a impressão;

 

mesmo usando só a impressão, quando entrego o xml para o componente (LoadFromFile) e depois uso ACBrNFe.NotasFiscais.Imprimir o erro é o mesmo, ou seja, a rotina de impressão do componente é quem está proporcionando ocasião para o AV

 

Otavio Benini

Link to comment
Share on other sites

  • Consultores

Olá Otávio,

 

   Eu entendi, e quero deixar claro que eu quero ajudar você. Mas veja bem, eu não tenho o código fonte dando problema. Você tem. Então temos duas opções:

 

1) você cria um programa de exemplo da forma mais simples possível que causa o AV e me envia o código fonte para que eu possa reproduzir na minha máquina.

2) Eu vou lhe orientando onde procurar e você mesmo vai fazendo o debug do código procurando onde está o problema.

 

   Estou tentando seguir o segundo método, pois acho que assim você pode ganhar mais em conhecimento sobre debug e sobre o componente. Desta forma, futuramente você próprio poderia até mesmo corrigir outros problemas. Quem sabe até adicionar coisas que seriam benéficas não só pra você mas pra muitos outros.

   Entretanto, se quiser usar o primeiro método, fique a vontade de enviar um programa simples que reproduz o erro. Ou explanar como reproduzir o erro com o Exemplo do NFe

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • 4 weeks later...
  • Consultores

Olá Otavio,

 

Que bom que consegiu resolver.

Obrigado pelo seu retorno.

Bom trabalho por aí. :)

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.