Jump to content
Notícias do ACBr

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

click.png

consultoria_sticker.png

Conteúdo para desenvolvedores
 ao vivo de terça a quinta!
Saiba mais

dev.png

logo_acbr_paygo.png

TEF ACBr PayGo
Seja um revendedor e ofereça uma solução completa para seu cliente.


botao.png

beneficios.png

Access Violation - AV - assinado xml da NFe


Go to solution Solved by Italo Giurizzato Junior,

Recommended Posts

  • Usuários SAC

Boas tardes, pessoal

em 21/09 tive um problema no usando ACBrNFe, cuja tentativa de solução, apontou para outro; um AV muito cabeludo; esse problema ficou suspenso aqui enquanto eu trabalhava outras questões mais urgentes; agora, e antes que este se torne urgente, preciso resolve-lo

tenho, hoje, 5 clientes que emitem Nfe e neles, portanto, uso ACBr – o primeiro foi em Set/2009;

a unit que trata a Nfe é basicamente a mesma para todos eles, com mínimas variações; poderia até ser a mesma unit, mas eu mantenho um projeto para cada cliente;

o ambiente de desenvolvimento e testes, desde 2014, é uma VM Windows 7, c/ Delphi 2010, Firebird 2.5, tudo 32 bits; o host é um i7, 16 gb RAM e Windows 8 32 bits;

em 21/09/20 quando precisei "forçar" um servidor virtual para um cliente do Ceará, encontrei um problema e antes de qualquer outra providencia atualizei o ACBr; depois dessa atualização fiquei c/ 2 problemas; o principal, que motivou as ações, foi resolvido com um muito bom suporte do @Big Wings; ficou um AV (novíssimo !) exatamente na emissão da Nfe;

para resolver o AV então eu voltei um backup da VM, anterior a 21/09, e ficou tudo ok; a dedução óbvia dessa ocorrência é um "bug" no ACBrNFe, visto que nada além disso mudou;

voltei ao problema no final do mês passado e cá estou até agora;

se eu atualizar o ACBr o problema se repete; eu fiz isso; voltei um backup da VM mais antigo, compilei e emiti uma Nfe; depois atualizo o ACBr, compilo e lá vem a o AV na emissão da Nfe; com o mesmo código, sem alterações;

tentei também remover totalmente o ACBr e atualiza-lo do zero: não funcionou;

estou migrando todo ambiente de desenvolvimento, e havia começado por outro projeto, que não usa ACBr, mas parei tudo pra resolver esse AV;

por host estou usando um Dell i7, 16 gb RAM, Windows 10 Pro 64, Firebird 3; criei uma VM Windows 10 Pro 64, instalei Delphi 10.4 Sydnei e ACBr: AV igualzinho !

eu testei com 3 projetos diferentes; num deles recriei a unit onde uso o ACBr, do zero; nessa Unit não faço nada além de gerar e enviar o xml; os dados estão num data module;

eu uso, com base na publicação "Conheça a ACBrDFeSSL" por Daniel Simões de Almeida, desde a versão 4 da NFe, o seguinte set:

Geral.SSLCryptLib := cryOpenSSL;  Geral.SSLHttpLib := httpOpenSSL;  Geral.SSLLib := libOpenSSL;  Geral.SSLXmlSignLib := xsLibXml2;  WebServices.SSLType := LT_TLSv1_2;

ajustei os parametros do pgr exemplo para esse set, mas dá erro, não compila;

então eu ajustei minha app para ficar igual à que usei no exemplo e que foi aceita:

Geral.SSLCryptLib := cryWinCrypt;  Geral.SSLHttpLib := httpWinHttp;  Geral.SSLLib := libWinCrypt;  Geral.SSLXmlSignLib := xsLibXml2;  WebServices.SSLType := LT_TLSv1_2;

essas propriedades só puderam ser ajustadas diretamente no componente (no Delphi Sydnei, no 2010 não sei, uso no componente direto), dá erro e não compila se alterar na linha;

o programa exemplo com esse set compila, roda e emite a NFe;

minha app com um ou outro set compila e roda; com ACBr atualizado dá AV, com ACBr "defazado" compila, roda, emite NFe;

mas eu não encontro nada a alterar na minha unit, aliás eu não alterei nada nela, a única diferença é a atualização do ACBr a partir de 21/09;

debugando, o AV ocorre na chamada para assinar o xml: em ACBrNFeNotasFiscais, na procedure NotaFiscal.Assinar, linha 282 – anexo print da tela; a chamada é interna pelos metodos do ACBr, eu apenas chamo ACBrNFe1.Enviar

escrevi toda essa história na esperança que possam acender uma luz para a solução 🙏; nunca antes precisei do suporte como agora;

antes, resta uma via ainda não explorada: como posso salvar o xml antes da assinatura ?  no exemplo só encontro a gravação do xml depois da assinatura;

com o xml gerado pela minha app eu poderei comparar com o xml do exemplo, inclusive envia-lo pra vocês;

agradeço a atenção

Otavio Benini

2-AV_linha_282.jpg

Link to post
Share on other sites

Na tela principal do fórum tem um local que destina ao SAc e outro fórum aberto, veja nesse link a sessão do SAC

https://www.projetoacbr.com.br/forum/forum/38-suporte-pago-sac/

13 minutos atrás, Otavio Benini disse:

Boas tardes, pessoal

em 21/09 tive um problema no usando ACBrNFe, cuja tentativa de solução, apontou para outro; um AV muito cabeludo; esse problema ficou suspenso aqui enquanto eu trabalhava outras questões mais urgentes; agora, e antes que este se torne urgente, preciso resolve-lo

tenho, hoje, 5 clientes que emitem Nfe e neles, portanto, uso ACBr – o primeiro foi em Set/2009;

a unit que trata a Nfe é basicamente a mesma para todos eles, com mínimas variações; poderia até ser a mesma unit, mas eu mantenho um projeto para cada cliente;

o ambiente de desenvolvimento e testes, desde 2014, é uma VM Windows 7, c/ Delphi 2010, Firebird 2.5, tudo 32 bits; o host é um i7, 16 gb RAM e Windows 8 32 bits;

em 21/09/20 quando precisei "forçar" um servidor virtual para um cliente do Ceará, encontrei um problema e antes de qualquer outra providencia atualizei o ACBr; depois dessa atualização fiquei c/ 2 problemas; o principal, que motivou as ações, foi resolvido com um muito bom suporte do @Big Wings; ficou um AV (novíssimo !) exatamente na emissão da Nfe;

para resolver o AV então eu voltei um backup da VM, anterior a 21/09, e ficou tudo ok; a dedução óbvia dessa ocorrência é um "bug" no ACBrNFe, visto que nada além disso mudou;

voltei ao problema no final do mês passado e cá estou até agora;

se eu atualizar o ACBr o problema se repete; eu fiz isso; voltei um backup da VM mais antigo, compilei e emiti uma Nfe; depois atualizo o ACBr, compilo e lá vem a o AV na emissão da Nfe; com o mesmo código, sem alterações;

tentei também remover totalmente o ACBr e atualiza-lo do zero: não funcionou;

estou migrando todo ambiente de desenvolvimento, e havia começado por outro projeto, que não usa ACBr, mas parei tudo pra resolver esse AV;

por host estou usando um Dell i7, 16 gb RAM, Windows 10 Pro 64, Firebird 3; criei uma VM Windows 10 Pro 64, instalei Delphi 10.4 Sydnei e ACBr: AV igualzinho !

eu testei com 3 projetos diferentes; num deles recriei a unit onde uso o ACBr, do zero; nessa Unit não faço nada além de gerar e enviar o xml; os dados estão num data module;

eu uso, com base na publicação "Conheça a ACBrDFeSSL" por Daniel Simões de Almeida, desde a versão 4 da NFe, o seguinte set:

Geral.SSLCryptLib := cryOpenSSL;  Geral.SSLHttpLib := httpOpenSSL;  Geral.SSLLib := libOpenSSL;  Geral.SSLXmlSignLib := xsLibXml2;  WebServices.SSLType := LT_TLSv1_2;

ajustei os parametros do pgr exemplo para esse set, mas dá erro, não compila;

então eu ajustei minha app para ficar igual à que usei no exemplo e que foi aceita:

Geral.SSLCryptLib := cryWinCrypt;  Geral.SSLHttpLib := httpWinHttp;  Geral.SSLLib := libWinCrypt;  Geral.SSLXmlSignLib := xsLibXml2;  WebServices.SSLType := LT_TLSv1_2;

essas propriedades só puderam ser ajustadas diretamente no componente (no Delphi Sydnei, no 2010 não sei, uso no componente direto), dá erro e não compila se alterar na linha;

o programa exemplo com esse set compila, roda e emite a NFe;

minha app com um ou outro set compila e roda; com ACBr atualizado dá AV, com ACBr "defazado" compila, roda, emite NFe;

mas eu não encontro nada a alterar na minha unit, aliás eu não alterei nada nela, a única diferença é a atualização do ACBr a partir de 21/09;

debugando, o AV ocorre na chamada para assinar o xml: em ACBrNFeNotasFiscais, na procedure NotaFiscal.Assinar, linha 282 – anexo print da tela; a chamada é interna pelos metodos do ACBr, eu apenas chamo ACBrNFe1.Enviar

escrevi toda essa história na esperança que possam acender uma luz para a solução 🙏; nunca antes precisei do suporte como agora;

antes, resta uma via ainda não explorada: como posso salvar o xml antes da assinatura ?  no exemplo só encontro a gravação do xml depois da assinatura;

com o xml gerado pela minha app eu poderei comparar com o xml do exemplo, inclusive envia-lo pra vocês;

agradeço a atenção

Otavio Benini

2-AV_linha_282.jpg

Para solução existem algumas coisas, por exemplo usar as versões mais nova do openssl que pode ser esse o caso.

 

  • Like 1
Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites
  • Usuários SAC
29 minutos atrás, Juliomar Marchetti disse:

Para solução existem algumas coisas, por exemplo usar as versões mais nova do openssl que pode ser esse o caso.

eu rodo meu app sem nenhuma dll na pasta, tal qual roda o prg exemplo
então vale o que está na pasta windows\syswow64 e lá estão as dlls mais recentes, comparando com o que traz o ACBr; veja figura;

 

 

dlls.png

Link to post
Share on other sites

Há tá o exemplo do svn não ocasiona erros? somente sua aplicação?

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites
  • Usuários SAC
19 horas atrás, Otavio Benini disse:

é uma situação intrigante

dá uma lida no histórico que fiz inicialmente e nas tentativas

enquanto não surge a solução, pode me responder: como posso salvar o xml antes da assinatura ?

Link to post
Share on other sites
  • Solution

Boa tarde Otavio,

Eu salvaria o XML assinado, pois se você gerar o XML e tentar validar ele vai ocorrer erro de validação, uma vez que a validação exige que o XML esteja assinado.

E para ter o XML assinado salvo em disco basta executar o método Assinar.

  • Like 1
Consultor SAC ACBr Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to post
Share on other sites
  • Usuários SAC
4 horas atrás, Italo Giurizzato Junior disse:

Boa tarde Otavio,

Eu salvaria o XML assinado, pois se você gerar o XML e tentar validar ele vai ocorrer erro de validação, uma vez que a validação exige que o XML esteja assinado.

E para ter o XML assinado salvo em disco basta executar o método Assinar.

Italo, boa noite
eu quero gerar o xml antes da assinatura para comparar com o xml gerado pelo exemplo

não sei se vc teve oportunidade de ler o histórico que inicio este pedido de suporte

trata-se de um AV na chamada para assinar o xml, ocasionado depois de atualização do ACBr

em 21/09 quando o prbl começou, o Daniel pediu prá rodar o exemplo e se este rodasse então o prbl seria da minha aplicação

mas não é bem assim, como estou tentando demonstrar

nunca estive debruçado por tanto tempo em cima de um problema - no mato sem cachorro

obrigado por seu  interesse

Link to post
Share on other sites

Bom dia Otavio,

O Juliomar lhe mostrou como salvar o XML gerado sem a assinatura, uma vez que o AV ocorre ao tentar assinar.

Você poderia gerar e anexar o XML para que possamos analisar?

Outra coisa o AV ocorre na linha 282 da unit ACBrNFeNotasFiscais, correto?

Tentou durante o "debug" dar Trace into (F7) nessa linha?

Pois dessa forma saberemos a linha exata que ocorre o AV, uma vez que o método Assinar da linha 282 esta implementando na unit ACBrDFeSSL.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to post
Share on other sites
  • Usuários SAC
3 horas atrás, Italo Giurizzato Junior disse:

Bom dia Otavio,

O Juliomar lhe mostrou como salvar o XML gerado sem a assinatura, uma vez que o AV ocorre ao tentar assinar.

Você poderia gerar e anexar o XML para que possamos analisar?

Outra coisa o AV ocorre na linha 282 da unit ACBrNFeNotasFiscais, correto?

Tentou durante o "debug" dar Trace into (F7) nessa linha?

Pois dessa forma saberemos a linha exata que ocorre o AV, uma vez que o método Assinar da linha 282 esta implementando na unit ACBrDFeSSL.

ok, Italo

assim que estiver no jeito te envio

estou às voltas com falta de energia e a VM onde estava o Delphi Berlin não está abrindo...

  • Like 1
Link to post
Share on other sites
  • Usuários SAC

boa tarde, Italo
reconstrui a VM, Win10Pro64, instalei Delphi 10.4 +patchs 1, 2 e 3, ACBr At revision: 20958

antes do AV, 2 informações:

  1. anexo tela1 com erro na fixação dos atributos em ACBrNFe1.Configurações.Geral.SSLs, acusa valor não declarado; só fixando no componente; 
  2. tentando usar OpenSSL, gera erro de cara, conf. tela2; as dll's carregadas em \Windows\SysWow64 foram da versão  1.1.1.4; substitui-as pelas da versão 1.1.1.7 mas o erro persistiu; eu uso OpenSSL desde a nfe-v4;

compilei minha app usando cryWinCrypt, httpWinHttp, libWinCrypt, xsLibXml2, que deu certo no exemplo antes;

executei consulta ao ambiente, consulta de nfe usando xml, consulta de nfe informando chave: tudo ok

emitindo uma nfe e debugando conf. sua instrução, parou na linha 635 da ACBrDFeXsLibXml2 (tela3) e daí não dá prá seguir;

gravei o xml sem assinatura da nfe que tentei emitir - anexo;

anexo tela 0 c/ AV rodando app direto;

vou usar o exemplo e te informo os resultados;

obrigado por seu empenho

Otavio Benini

tela1-Erro_declarando_SSLs.jpg

tela2-Erro_OpenSSL.jpg

tela3-AV_linha_635_ACBrDFeXsLibXml2.jpg

tela 0-AV.jpeg

225.xml

Link to post
Share on other sites

Bom dia.

como ficou marcado as opções do instalador para copiar as dll para você usar?

ele copia para o diretorio do windows ou para a pasta do delphi?

 

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites

Bom dia Otavio,

Na primeira imagem que você anexou que ocorre erro de valor não declaro basta você incluir no Uses dessa Unit a unidade: ACBrDFeSSL.

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

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Link to post
Share on other sites
  • Usuários SAC
3 horas atrás, Juliomar Marchetti disse:

Bom dia.

como ficou marcado as opções do instalador para copiar as dll para você usar?

ele copia para o diretorio do windows ou para a pasta do delphi?

 

bom dia, Italo

copia para pasta do Windows, neste caso SysWow64

3 horas atrás, Italo Giurizzato Junior disse:

Bom dia Otavio,

Na primeira imagem que você anexou que ocorre erro de valor não declaro basta você incluir no Uses dessa Unit a unidade: ACBrDFeSSL.

eu declarei essa unit em Uses, mas o AV se repetiu...

uma diferença que, aparentemente, não tem efeito prático é como se constroe o xml

meu app foi baseado no exemplo existente em 2009 e de lá prá cá só fiz pequenos ajustes, a estrutura principal não mudou

nessa ocasião, consultei o exemplo e não me lembro dele ter a estrutura que tem hoje

prg exemplo:

// declara colletions

  NotaF: NotaFiscal;
  Produto: TDetCollectionItem;
  Volume: TVolCollectionItem;
  Duplicata: TDupCollectionItem;
  ObsComplementar: TobsContCollectionItem;
  ObsFisco: TobsFiscoCollectionItem;
...

// usa collection

NotaF := ACBrNFe1.NotasFiscais.Add;
  NotaF.NFe.Ide.natOp     := 'VENDA PRODUCAO DO ESTAB.';

Produto := NotaF.NFe.Det.New;
  Produto.Prod.nItem    := 1; // Número sequencial, para cada item deve ser incrementado

Duplicata := NotaF.NFe.Cobr.Dup.New;
  Duplicata.nDup  := '001';

// finaliza

  ACBrNFe1.NotasFiscais.GerarNFe;

 

meu app:

// monta o xml

with ACBrNFe1.NotasFiscais.Add.NFe do begin
  with dtmLib do begin
    Ide.cNF       := Calc_cNF(dtmPed.cdsCabCODIGO.Value);
    Ide.natOp     := 'VENDA DE MERCADORIAS ADQUIRIDAS DE TERCEIROS';
    Ide.indPag    := ipPrazo;
    Ide.modelo    := strTOint(cdsEmpNFE_MODELO.Value);
    Ide.serie     := strTOint(cdsEmpNFE_SERIE.Value);
    Ide.nNF       := StrToInt(NumNFe);
    Ide.dEmi      := Now;
    Ide.dSaiEnt   := Now;
    Ide.tpNF      := tnSaida;
    Ide.tpEmis    := teNormal;

// finaliza

ACbrNF1.Enviar(nNFe);

 

usei GerarNFe, como no exemplo, mas o AV se repete

 

 

Link to post
Share on other sites

Seria necessário mexer e entender seu fonte mas é algo nele que está ocorrendo

pois se rodarmos o exemplo do svn o erro não ocorre correto?

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
http://www.juliomarmarchetti.com.br
Embarcadero MVP
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil
Link to post
Share on other sites
Em 02/12/2020 at 11:09, Otavio Benini disse:

bom dia, BigWings

deletei .dproj e dproj.local: não resolveu, o AV persiste, no mesmo ponto fora da minha unit

Bom dia Otavio.

   Se você criar uma nova aplicação e colocar o seu código nela, gera o AV?

[]'s

Consultor SAC ACBr

Elton
Ajude o Projeto ACBr crescer - Assine o SAC

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 post
Share on other sites
×
×
  • Create New...