Ir para conteúdo
  • Cadastre-se

Erro access violation ao encerrar o MDFe


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

Recommended Posts

Postado

Olá.

Mais uma vez venho solicitar a ajuda de vocês. Ao encerrar o MDFe quando chamo o método ImprimirEvento ele está me dando um erro de access violation, debugando ele para na pagina ACBrMDFeDAMDFEFR na seginte procedure: 

procedure TACBrMDFeDAMDFEFR.frxReportBeforePrint(Sender: TfrxReportComponent);
var
  qrCode: String;
begin
  if Assigned(FMDFe) then
  begin
    qrCode := FMDFe.infMDFeSupl.qrCodMDFe;
  if Assigned(Sender) and (Trim(qrCode) <> '') and (Sender.Name = 'ImgQrCode') then
     PintarQRCode(qrCode, TfrxPictureView(Sender).Picture.Bitmap, qrUTF8NoBOM);
  end;
end;

O mais estranho é que o erro somente me ocorre se eu tiver tentado fazer qualquer outra impressão de danfe anteriormente, ou seja se eu abrir o sistema e for diretamente encerrar o MDFe ele faz a impressão corretamente, mas se eu imprimir o danfe e depois for tentar encerrar aí ele me retorna o erro.

 

  • Consultores
Postado

Boa tarde.

O mesmo pode ser simulado no demo?

Att.

Consultora ACBr Pro

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

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

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Postado

Bom dia. Tentei simular o mesmo erro no demo, mas o mesmo não aconteceu. Vocês acham que pode está relacionado ao fast, pois aqui funcionava normal, e o erro começou a acontecer depois da atualização de alguns componentes e um deles foi o fast, mas como ele para em um arquivo do ACBr ao ser debugado, e o mesmo também, avia sido atualizado, por esse motivo imaginei que o erro estaria no componente do ACBr.

  • Moderadores
Postado
14 minutos atrás, Orlando Dantas disse:

Bom dia. Tentei simular o mesmo erro no demo, mas o mesmo não aconteceu. Vocês acham que pode está relacionado ao fast, pois aqui funcionava normal, e o erro começou a acontecer depois da atualização de alguns componentes e um deles foi o fast, mas como ele para em um arquivo do ACBr ao ser debugado, e o mesmo também, avia sido atualizado, por esse motivo imaginei que o erro estaria no componente do ACBr.

Também não consegui replicar pelo programa exemplo.

Se conseguir crie uma aplicação simples onde o problema ocorra e anexe os fontes aqui.

  • Curtir 2
Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
59 minutos atrás, BigWings disse:

Também não consegui replicar pelo programa exemplo.

Se conseguir crie uma aplicação simples onde o problema ocorra e anexe os fontes aqui.

Farei isso. Mas só para constar e talvez com esse feedback vocês já consigam me ajudar, quando eu simplesmente abro a aplicação e encerro o MDFe que é quando ele imprime sem erro o atributo FMDFe ele é igual a (nil), já quando eu utilizo o componente para fazer uma impressão antes de encerrar o MDFe, o mesmo atributo não vem vazio ele vem com informações assim entrando no IF e gerando o erro porque a property (qrCodMDFe) vem sem informação. 

Como eu faço a impressão após enviar, eu utilizo os métodos:

FVISUALIZAR_MDFE.MDFE.EventoMDFe.Evento.Clear;
FVISUALIZAR_MDFE.MDFE.Manifestos.Clear;

antes do envio.  

Postado (editado)
1 hora atrás, Orlando Dantas disse:

Bom dia. Tentei simular o mesmo erro no demo, mas o mesmo não aconteceu. Vocês acham que pode está relacionado ao fast, pois aqui funcionava normal, e o erro começou a acontecer depois da atualização de alguns componentes e um deles foi o fast, mas como ele para em um arquivo do ACBr ao ser debugado, e o mesmo também, avia sido atualizado, por esse motivo imaginei que o erro estaria no componente do ACBr.

Me desculpem quando eu falei acima que não tinha conseguido gerar o mesmo erro no demo eu tinha testado da seguinte forma, eu adicionei a opção ACBrMDFe1.ImprimirEvento após o enviar pois é assim que eu faço na minha aplicação. Mas testando novamente pela opção do botão (btnImprimirEvento) conseguir simular o mesmo erro da seguinte forma:

Eu primeiro imprimo um XML de MDFe, após eu vou imprimir o evento, aí o mesmo erro é gerado.

Lembrando que eu adicionei o componente ACBrMDFeDAMDFEFR no demo para o teste.

Editado por Orlando Dantas
  • Moderadores
Postado
2 minutos atrás, Orlando Dantas disse:

da seguinte forma, eu adicionei a opção ACBrMDFe1.ImprimirEvento após o enviar pois é assim que eu faço na minha aplicação.

Se fez alteração no programa exemplo, anexe os fontes alterados.

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Postado
1 minuto atrás, BigWings disse:

Se fez alteração no programa exemplo, anexe os fontes alterados.

No último teste que eu fiz a unica alteração foi que eu adicionei o componente ACBrMDFeDAMDFEFR e linquei ao ACBrMDFe, a outra alteração que eu disse que tinha feito foi no primeiro teste onde não tinha conseguido gerar o erro mas eu não salvei estas alterações, ou seja as mesmas não estavam no último teste. Mesmo assim se ainda preferir que eu mande os fontes com a adição do componente ACBrMDFeDAMDFEFR, anexarei agora.

  • 4 semanas depois ...
Postado

Alguém já passou por esse problema? e conseguiu resolver? No Demo dá o mesmo erro. É como se o componente não estivesse limpo aí pega valores que não deveria ter no encerramento assim gerando o access violation.

  • Consultores
Postado

Bom dia Orlando,

É muito estranho o que você esta relatando, pois no programa exemplo, mais precisamente o botão que exemplifica esse evento temos:

    ACBrMDFe1.Manifestos.Clear;  // <--- essa linha limpa o componente antes de carregar o XML do MDF-e que vai ser encerrado
    ACBrMDFe1.Manifestos.LoadFromFile(OpenDialog1.FileName);

    ACBrMDFe1.EventoMDFe.Evento.Clear; // <--- essa linha limpa a classe evento antes de receber os dados de um evento, neste caso o de encerramento

    with ACBrMDFe1.EventoMDFe.Evento.New do
    begin
      infEvento.chMDFe     := Copy(ACBrMDFe1.Manifestos.Items[0].MDFe.infMDFe.ID, 5, 44);
      infEvento.CNPJCPF    := edtEmitCNPJ.Text;
      infEvento.dhEvento   := now;
      infEvento.tpEvento   := teEncerramento;
      infEvento.nSeqEvento := 1;

      infEvento.detEvento.nProt := ACBrMDFe1.Manifestos.Items[0].MDFe.procMDFe.nProt;
      infEvento.detEvento.dtEnc := Date;
      infEvento.detEvento.cUF   := StrToInt(Copy(IntToStr(ACBrMDFe1.Manifestos.Items[0].MDFe.infDoc.infMunDescarga.Items[0].cMunDescarga),1,2));
      infEvento.detEvento.cMun  := ACBrMDFe1.Manifestos.Items[0].MDFe.infDoc.infMunDescarga.Items[0].cMunDescarga;
    end;

    ACBrMDFe1.EnviarEvento( 1 ); // 1 = Numero do Lote

    MemoResp.Lines.Text := ACBrMDFe1.WebServices.EnvEvento.RetWS;
    LoadXML(ACBrMDFe1.WebServices.EnvEvento.RetWS, WBResposta);

 

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

Postado
5 horas atrás, Italo Jurisato Junior disse:

Bom dia Orlando,

É muito estranho o que você esta relatando, pois no programa exemplo, mais precisamente o botão que exemplifica esse evento temos:


    ACBrMDFe1.Manifestos.Clear;  // <--- essa linha limpa o componente antes de carregar o XML do MDF-e que vai ser encerrado
    ACBrMDFe1.Manifestos.LoadFromFile(OpenDialog1.FileName);

    ACBrMDFe1.EventoMDFe.Evento.Clear; // <--- essa linha limpa a classe evento antes de receber os dados de um evento, neste caso o de encerramento

    with ACBrMDFe1.EventoMDFe.Evento.New do
    begin
      infEvento.chMDFe     := Copy(ACBrMDFe1.Manifestos.Items[0].MDFe.infMDFe.ID, 5, 44);
      infEvento.CNPJCPF    := edtEmitCNPJ.Text;
      infEvento.dhEvento   := now;
      infEvento.tpEvento   := teEncerramento;
      infEvento.nSeqEvento := 1;

      infEvento.detEvento.nProt := ACBrMDFe1.Manifestos.Items[0].MDFe.procMDFe.nProt;
      infEvento.detEvento.dtEnc := Date;
      infEvento.detEvento.cUF   := StrToInt(Copy(IntToStr(ACBrMDFe1.Manifestos.Items[0].MDFe.infDoc.infMunDescarga.Items[0].cMunDescarga),1,2));
      infEvento.detEvento.cMun  := ACBrMDFe1.Manifestos.Items[0].MDFe.infDoc.infMunDescarga.Items[0].cMunDescarga;
    end;

    ACBrMDFe1.EnviarEvento( 1 ); // 1 = Numero do Lote

    MemoResp.Lines.Text := ACBrMDFe1.WebServices.EnvEvento.RetWS;
    LoadXML(ACBrMDFe1.WebServices.EnvEvento.RetWS, WBResposta);

 

Boa tarde. Gravei um pequeno vídeo demonstrando o erro que dá mesmo no Demo. Unica alteração feita foi colocar um componente ACBrMDFeDAMDFEFR. 

https://1drv.ms/v/s!AgBd18bzyxx6iaRNLG-7YVly01B8eg?e=Al5szH

Como já informei em um dos meus comentários  acima debugando encontrei o seguinte erro:

Quando eu imprimo diretamente o evento ele imprime sem erro, o atributo FMDFe ele é igual a (nil), já quando eu utilizo o componente para fazer uma impressão do Danfe antes de imprimir o evento,  o mesmo atributo não vem vazio ele vem com informações assim entrando no IF e gerando o erro porque a property (qrCodMDFe) vem sem informação. 

Postado
53 minutos atrás, BigWings disse:

No exemplo de impressão do evento, primeiro é necessário selecionar o XML do MDFe, depois o XML do evento.

Você está selecionando o XML do evento duas vezes.

 

Obrigado meu amigo. Esse realmente era meu problema, no meu sistema eu não estava selecionando o XML do MDFe, ao fazer isso o problema foi resolvido. Os moderadores podem fechar o tópico. 

  • Este tópico foi criado há 2271 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...