Ir para conteúdo
  • Cadastre-se

dev botao

Erro access violation ao encerrar o MDFe


Ver Solução Respondido por BigWings,
  • Este tópico foi criado há 1699 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.

 

  • Administradores
Postado

Boa tarde.

O mesmo pode ser simulado no demo?

Att.

Consultora SAC ACBr

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á 1699 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.