Ir para conteúdo
  • Cadastre-se

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

Recommended Posts

Postado

Bom dia,

No sistemas que desenvolvemos está ocorrendo Access Violation ao tentar imprimir o Danfe, estou usando o AcbrNfe e o AcbrNfeDanfeRave com Delphi 7. O erro ocorre na seguinte situação:

1) Faço uma nota fiscal normalmente, mas fica um erro que provoque uma rejeição quando é validado no Sefaz, por exemplo um endereço sem número.

2) Vem a mensagem de erro, eu deixo a tela da nota aberta e conserto a informação na tela de cadastro.

3) Volto e tento gerar a nota. Ela gera normalmente, vem a mensagem de lote processado e pergunta se quer imprimir o Danfe.

4) Quando coloco imprimir e clico em ok aparece a mensagem de Access Violation. Nessa procedure da unit "AcbrNfeDanfeRaveDM"

procedure TdmACBrNFeRave.CustomDadosProdutosCXNOpen(

  Connection: TRvCustomConnection);

begin

  Connection.DataRows := FNFe.Det.Count;

end;

Para conseguir imprimir tenho que fechar o sistema e inicializá-lo novamente. Outra coisa, se gero a nota sem nenhuma mensagem de Rejeição do Sefaz a impressão é feita normalmente.

Pesquisando na internet achei que poderia ser falta de configuração do componente ao tentar imprimir, mas já coloquei para sempre configurar o componente antes de imprimir e o erro persiste.

Alguém tem mais alguma solução. Obrigada

Postado

André, no Demo não ocorre o erro, mas eu fiz um procedimento um pouco diferente do que eu uso na prática, eu usei o botão "Carregar XML e enviar" porque não estava conseguindo gerar um nota de teste utilizando a função "Criar e enviar", que é muito parecida com a que eu uso no sistema aqui da empresa. Não sei se isso pode influenciar no erro.

Postado

Eu tive um problema parecido com o seu no inicio do meu sistema, resolvi, mas não tenho certeza como... hehehe

Acho, repito, acho que foi qdo coloquei essa linha no inicio da minha rotina de impressão:

   if ACBrNFe1.DANFE = nil then

       ACBrNFe1.DANFE := ACBrNFeDANFERave1;

Postado

Eu coloquei essa verificação agora, mas infelizmente o erro persiste...

O que mais me intriga é que mesmo que eu faça muitas notas sem fechar o sistema e as notas não apresentam rejeição do sefaz a impressão de todas ocorre normalmente, sem nenhum erro, mas se uma é rejeitada, após feita a correção, a nota é gerada novamente, sem fechar o sistema quando vai imprimir da erro.

Postado

Alguém sabe se quando ocorre uma rejeição pelo site da receita ele exclui o form do Rave, ou melhor ele libera a memória que está sendo usada pelo Rave e por isso que o mesmo não consegue acessar a variável "FNFe.Det.Count" ?

Postado

Me passou pela cabeça: No rotina de gerar um XML de NF-e acho que você deve dar um "Clear" antes, certo ? Será que quando você conserta o erro você repete a mesma rotina de geração e com isso um novo "Clear" é dado e ocorre alguma falta de atualização em algum outro local do sistema ?

Peterson de Cerqueira Matos
[email protected]
Vivo: (11) 97197-1474 / Oi: (11) 98059-4055

Postado

No meu estou tendo o mesmo problema, do nada começou isso,

a exceção ocorre no momento de imprimir, mostrar na tela:

ACBrNFe1.NotasFiscais.Clear;

ACBrNFe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName);

ShowMessage(ACBrNFeDANFEFR1.FastFile);

ACBrNFe1.NotasFiscais.Imprimir;

na linha ACBrNFe1.NotasFiscais.Imprimir;

mostra o nome do arquivo corretamente antes carregado, utilizo o Fast Report. Do nada começou esse erro!!!

Alguém sabe o que pode ser? Estou desconfiado das dlls, mas já mudei e nada, vou continuar tentando! Qqr coisa posto aqui!

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

Postado

dlls descartadas! Me lembrei de uma cópia do executável antiga aqui, que salvei antes de atualizar o ACBR, bingo, ela mostrou a DANFE perfeitamente na tela!!!

Agora descobrir onde está o problema!

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

Postado

vou reportando meus testes aqui para não repetirem,

tentei assim e nada tb:

ACBrNFe1.NotasFiscais.Items[0].Imprimir;

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

Postado

Eu pensei a mesma coisa que o Peterson e tentei sempre inicializar o Danfe antes de imprimir, mas o erro continua. Talvez o componente possa estar tirando o Danfe da memória com um "nil", para esse caso inda não testei.

FocusRJ, no seu caso o erro também é só após uma rejeição ou é sempre que acontece?

Postado

Camila Santos, o meu simplesmente clicando para gerar a DANFE, carregava as informações necessárias para gerar a DANFE e no exato momento de imprimir dava a exceção.

Até mesmo no botão para imprimir DANFE, a mesma coisa, carregava o arquivo xml, gerado e enviado anteriormente, e no momento de imprimir a EXCEÇÃO.

Antes da minha última atualização da pasta ACBR eu fiz uma cópia de segurança, na dúvida restaurei a mesma e abri o meu projeto.... e está funcionando perfeitamente, logo foi alguma modificação que o ACBRNFE sofreu, agora me resta descobrir o q foi alterado, se estou deixando faltar alguma informação ou algo assim pra cair na exceção.

Vou fazer uns testes só p ter certeza.... e varrer o ACBRNFe pra ver o q podia estar acontecendo.

Se algum amigo tiver uma idéia, seria bem vinda! No meu caso estou usando o DANFE em Fast Report!

vlw (Rômulo Mayworm)

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

Postado

Você já rodou um passo-a-passo para ver em qual linha está dando o erro exatamente?

No meu caso eu uso AcbfNfe e o AcbrDanfeRave para geração e impressão das notas. Antes de imprimir faço a rotina de configuração do componente. Se as notas forem geradas sem rejeição funciona normalmente, mesmo imprimindo várias notas.

  //Configurações do Danfe

  nomerav := ExtractFileDir(application.ExeName)+'\'+'NotaFiscalEletronica.rav';

  if fileexists(nomerav) then

    ACBrNFeDANFERave1.RavFile := nomerav

  else

    begin

      ACBrNFeDANFERave1.RavFile := '';

      showmessage('Arquivo de Layout de relatório não encontrado: ' + chr(13) + nomerav);

    end;

  ACBrNFeDANFERave1.NumCopias := 1;

  ACBrNFeDANFERave1.TipoDANFE := tiRetrato;     // (tiRetrato, tiPaisagem)


  if fileexists(ExtractFileDir(application.ExeName) + '\Dados\logotemp.bmp') = false then

    VendasGBD.DBImage3.Picture.SaveToFile(ExtractFileDir(application.ExeName) + '\Dados\logotemp.bmp');


  ACBrNFeDANFERave1.Logo := ExtractFileDir(application.ExeName) + '\Dados\logotemp.bmp';

  ACBrNFeDANFERave1.CasasDecimais._qCom := 3; 

Postado

Acabei de localizar o erro, e foi uma falha minha mesmo, não foi do ACBR.

No DM das informações do FastReport, fiz uma alteração para inserir nas OBS do contribuinte as informações de Endereço de Entrega/Retirada, e a OBS às vezes estava indo pulando algumas linhas, que é tratada pelo caracter ';'. Fiz da seguinte forma:

//retirada

      wInfAd := '';

      with cdsLocalRetirada do

      begin

        if NotaUtil.NaoEstaVazio(FieldByName('CNPJ').AsString) then

        begin

          wInfAd := 'LOCAL RETIRADA: ;'+FieldByName('Xlgr').AsString+', '+FieldByName('Nro').AsString+' ';

          if NotaUtil.NaoEstaVazio(FieldByName('XCpl').AsString) then

            wInfAd := wInfAd + '- '+FieldByName('XCpl').AsString+';';

          wInfAd := wInfAd +FieldByName('XBairro').AsString +' - '+FieldByName('XMun').AsString+' - ' + FieldByName('UF').AsString;

        end;

        if Length(wObs) > 0 then

          wObs := wObs + ';';

        wObs := wObs + wInfAd;

      end;


      //entrega

      wInfAd := '';

      with cdsLocalEntrega do

      begin

        if NotaUtil.NaoEstaVazio(FieldByName('CNPJ').AsString) then

        begin

          wInfAd := 'LOCAL ENTREGA: ;'+FieldByName('Xlgr').AsString+', '+FieldByName('Nro').AsString+' ';

          if NotaUtil.NaoEstaVazio(FieldByName('XCpl').AsString) then

            wInfAd := wInfAd + '- '+FieldByName('XCpl').AsString+';';

          wInfAd := wInfAd +FieldByName('XBairro').AsString +' - '+FieldByName('XMun').AsString+' - ' + FieldByName('UF').AsString;

        end;

        if Length(wObs) > 0 then

          wObs := wObs + ';';

        wObs := wObs + wInfAd;

      end;


      wObs := StringReplace(wObs, #$D#$A, '', [rfReplaceAll]);

      if wObs[1] = ';' then

      begin

        repeat

          wObs := Copy(wObs,2,length(wObs));

        until (Length(wObs)<=1) or (wObs[1] <> ';') ;

      end;
sendo que em
repeat

          wObs := Copy(wObs,2,length(wObs));

        until (Length(wObs)<=1) or (wObs[1] <> ';') ;

O until... estava somente com o teste wObs[1] <> ';' dessa forma se não houvesse informação alguma ele iria apagar o #$D#$A e os ';'s nisso esvaziaria a wobs e continuaria no repeat ocorrendo o erro.

Foi falha minha, já voltei pro acbr atualizado e funcionou!

E vc Camila, conseguiu resolver o seu? No seu caso é somente em casos após rejeição?

Rômulo Mayworm

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

Postado

Acho q ainda assim poderá dar algum erro, vou tratar o tamanho da string antes pra aí sim poder entrar no loop de limpeza.

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

Postado

Rômulo, não consegui ainda não, o mais estranho é que é somente após a rejeição, se eu fecho todo o sistema e vou para imprimir a mesma nota novamente não ocorre o erro.

Postado

Não sei se seria o convencional, mas tenta colocar uma verificação se retorna status de rejeição, caso retorne, limpe o componente e associe novamente a xml a ele!

ArquivoXMLGerado := ACBrNFe1.NotasFiscais.Items[0].NomeArq;

ACBrNFe1.NotasFiscais.Clear;

ACBrNFe1.NotasFiscais.LoadFromFile(ArquivoXMLGerado);

;)

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

  • Moderadores
Postado

Rômulo, não consegui ainda não, o mais estranho é que é somente após a rejeição, se eu fecho todo o sistema e vou para imprimir a mesma nota novamente não ocorre o erro.

Tente utilizar o Danfe com Rave Code Base para sabermos se o problema esta com o Danfe em Rave Arquivo.

Eu uso o danfe com rave arquivo e nunca passei por esse problema, pois eu crio e destruo os componentes em tempo de execução e encorajo todos a fazerem o mesmo.

[]´s

João Henrique de Souza

 

Manual de como configurar o TortoiseSVN para não ficar mostrando a senha repetidas vezes (somente para commiters):

https://sourceforge.net/p/forge/community-docs/TortoiseSVN/

 

 

Postado

Não sei se seria o convencional, mas tenta colocar uma verificação se retorna status de rejeição, caso retorne, limpe o componente e associe novamente a xml a ele!

ArquivoXMLGerado := ACBrNFe1.NotasFiscais.Items[0].NomeArq;

ACBrNFe1.NotasFiscais.Clear;

ACBrNFe1.NotasFiscais.LoadFromFile(ArquivoXMLGerado);

;)

FocusRJ tentei fazer como você sugeriu, limpando os campos do componente e associando a nota novamente. Mas não deu certo, ainda ocorre o erro.

Tente utilizar o Danfe com Rave Code Base para sabermos se o problema esta com o Danfe em Rave Arquivo.

juaumkiko não encontrei o Rave Code Base para download, mas a versão que utilizo em minha máquina é a 5.0 há uma versão desse componente para essa versão do Rave?

Postado

Estava testando a impressão após o retorno de Rejeição do Sefaz e percebi que após mostrar a janela que pergunta se quer visualizar ou imprimir o danfe o componente executa este bloco de código e a variável "FNFe" possui valor corretamente.

procedure TdmACBrNFeRave.RvSystem1BeforePrint(Sender: TObject);

begin

   //processo para não exibir o quadro ISSQN no DANFE_Rave513

   if ((FNFe.Total.ISSQNtot.VServ=0) and

       (FNFe.Total.ISSQNtot.VBC=0) and

       (FNFe.Total.ISSQNtot.VISS=0)) then

      rvPROJECT.SetParam('wISSQN','N')

   else

      rvPROJECT.SetParam('wISSQN','S');

end;
Após esse bloco ele passa imediatamente para o bloco do erro, onde a mesma variável está como "nil".
procedure TdmACBrNFeRave.CustomDadosProdutosCXNOpen(

  Connection: TRvCustomConnection);

begin

  Connection.DataRows := FNFe.Det.Count;

end;

Ambas procedures estão na Unit AcbrNfedanfeRaveDM eu fiz uma execução passo-a-passo utilizando a opção "trace into" em todas as linhas.

Postado

Camila, o João se referiu ao componente Danfe feito em Rave via código, sem arquivo ".rav". Por isso o nome "Rave Code Base". Atualize seu Rave. Baixe-o em http://www.4shared.com/file/z-w6vsEI/rave_be_5_0_8.html

O componente Danfe está na pasta do componente ACBr: "\Pacotes\Delphi\ACBrNFe2\ACBrNFeDanfeRVCodeBase.dpk".

Instale-o, faça os testes e reporte para nós.

Peterson de Cerqueira Matos
[email protected]
Vivo: (11) 97197-1474 / Oi: (11) 98059-4055

  • 1 mês depois ...
Postado

Bom dia, jocgom

Ainda não consegui resolver este problema, para falar a verdade não tive muito tempo de mexer com ele. Mas o mais engraçado no meu caso é que em outro módulo do mesmo sistema que também usa NFe não ocorre esse erro.

  • 1 ano depois...
Postado

Estamos com o mesmo problema, veja um resumo do código:

ACBrNFeDANFERave1 := TACBrNFeDANFERave.Create(Application);
ACBrNFe1.DANFE := ACBrNFeDANFERave1;
ACBrNFeDANFERave1.ACBRNfe := ACBrNFe1;
ACBrNFeDANFERave1.RavFile := XXXX;

ACBrNFe1.NotasFiscais.Clear;
ACBrNFe1.NotasFiscais.LoadFromFile(cFileName);
ACBrNFe1.DANFE.ProtocoloNFe := cNroProtocolo;
ACBrNFe1.NotasFiscais.Imprimir;

Gera o erro:

Access violation at address 00929230 in module 'caf.exe'. Read of address 00000024.

Onde o FNFe vem nil ???

procedure TdmACBrNFeRave.CustomDadosProdutosCXNOpen(
  Connection: TRvCustomConnection);
begin
  Connection.DataRows := FNFe.Det.Count;
end;


Você conseguiram resolver ?

 

O meu acontece esporadicamente, somente em um cliente, não consigo reproduzir o problema.

 

Alguém conseguiu revolver este problema?

Alguma dica - qualquer coisa... heheheh

 

Obrigado a todos

Rodrigo ®¿®

Curitiba-PR

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