Jump to content

dev botao

C# - Cancelamento NFCe - CancelamentoNFeResposta


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

Recommended Posts

Boa tarde pessoal, tudo bem?
Se deparamos com uma situação aqui ao cancelar uma NFC-e, ao cancelar a nota e utilizar a classe CancelamentoNFeReposta para ler a resposta, estávamos obtendo a seguinte exceção:
image.png.eafb235f78d5316c9ea386fd229ba0c4.png

A exceção ocorria aqui, pois na NFC-e o retorno do cancelamento volta [Cancelamento] ao invés de [CANCELAMENTO]
 

cancelamentoNFeResposta.Resposta = resposta;


image.thumb.png.5e77757704b5c6f024d349f0a2526195.png

Somente adicionei essa validação acima para caso não consiga ler o CANCELAMENTO, ele tenta ler Cancelamento, de forma provisória para conseguirmos liberar aqui.


Método inteiro:

public new static CancelamentoNFeResposta LerResposta(string resposta)
{
  ACBrIniFile iniData = ACBrIniFile.Parse(resposta);
  CancelamentoNFeResposta cancelamentoNFeResposta = iniData.ReadFromIni<CancelamentoNFeResposta>("CANCELAMENTO");
  if (cancelamentoNFeResposta == null)
  {
    cancelamentoNFeResposta = iniData.ReadFromIni<CancelamentoNFeResposta>("Cancelamento");
  }

  cancelamentoNFeResposta.Resposta = resposta;
  return cancelamentoNFeResposta;
}

a

Link to comment
Share on other sites

  • Consultores

Obrigado pela contribuição, em breve será validada para possível inclusão ao svn.

#TK-4347 

  • Thanks 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

  • Consultores

Arquivo alterado para análise:

 

  • Like 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

  • 5 weeks later...
  • Consultores

Boa noite!

Primeiro de tudo, mais uma vez, muito obrigado pela contribuição.

Toda colaboração sempre será mais do que bem vinda.

No entanto, fiz alguns testes e não entendi a real necessidade da sua contribuição.

Comparando o arquivo CancelamentoResposta.cs que disponibilizou com o que temos no SVN, foram apontadas duas diferenças.

A primeira delas é adição de algumas propertys:

public string Versao { get; set; }

public TipoAmbiente TpAmb { get; set; }

public string VerAplic { get; set; }

public int CStat { get; set; }

public string XMotivo { get; set; }

public int CUF { get; set; }

public string ChNFe { get; set; }

public DateTime DhRecbto { get; set; }

public string NProt { get; set; }

public string tpEvento { get; set; }

public string xEvento { get; set; }

public string nSeqEvento { get; set; }

public string CNPJDest { get; set; }

public string emailDest { get; set; }

public string XML { get; set; }

public string Resposta { get; set; }

Se conferirmos na declaração da classe, podemos ver que ela herda de CancelamentoRespostaBase:

public sealed class CancelamentoNFeResposta : CancelamentoRespostaBase<CancelamentoNFeResposta, TipoEventoNFe>

Já CancelamentoRespostaBase, herda de DFeRespostaBase.

Ambas já possuem as propriedades que você adicionou, por isso, não acho necessário adicionar elas na classe filha novamente.

 

A segunda alteração é a adição de um método LerResposta.

public static CancelamentoNFeResposta LerResposta(string resposta)
{
	ACBrIniFile iniData = ACBrIniFile.Parse(resposta);
	CancelamentoNFeResposta cancelamentoCTeResposta = iniData.ReadFromIni<CancelamentoNFeResposta>("CANCELAMENTO");

	if (cancelamentoCTeResposta == null)
		cancelamentoCTeResposta = iniData.ReadFromIni<CancelamentoNFeResposta>("Cancelamento");

	cancelamentoCTeResposta.Resposta = resposta;
	return cancelamentoCTeResposta;
}

Este método tenta ler de uma seção "CANCELAMENTO" na resposta e se não encontrar, busca de "Cancelamento".

Nos testes que fiz, o conteúdo devolvido veio da seguinte maneira:

Citar

{[Cancelamento]
arquivo=C:\ACBr\trunk2\Projetos\ACBrLib\Demos\C#\NFe\Demo\ACBrLib.NFe.Demo\bin\Debug\Nova pasta\110111352309187605400001395XXXXXXXXXXXXXXXXXXXXXXXXX-procEventoNFe.xml
cnpjdest=05481336XXXXXX
cstat=135
cuf=35
dhrecbto=22/09/2023 18:19:57
msg=
veraplic=SP_EVENTOS_PL_100
versao=SP_EVENTOS_PL_100
xml=<?xml version="1.0" encoding="UTF-8"?>(...)<evento versao="1.00"><cOrgao>35</cOrgao><tpAmb>2</tpAmb><xEvento>Cancelamento registrado</xEvento>(...)
xmotivo=Evento registrado e vinculado a NF-e
chnfe=3523091876054000013XXXXXXXXXXXXXXXXXXXXXXXXX
emaildest=
nprot=1352300XXXXXXXX
nseqevento=1
tpamb=2
tpevento=110111
xevento=Cancelamento registrado

}

Portanto, o if que busca por "CANCELAMENTO" retornou vazio e acabou buscando e encontrando em "Cancelamento".

Para este caso, já tem na rotina de leitura de CancelamentoRespostaBase.cs

Realizei meus testes usando o demo em C# e a seguinte versão da Lib.

image.png

 

  • Thanks 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

Em 22/09/2023 at 18:59, Diego Foliene disse:

Boa noite!

Primeiro de tudo, mais uma vez, muito obrigado pela contribuição.

Toda colaboração sempre será mais do que bem vinda.

No entanto, fiz alguns testes e não entendi a real necessidade da sua contribuição.

Comparando o arquivo CancelamentoResposta.cs que disponibilizou com o que temos no SVN, foram apontadas duas diferenças.

A primeira delas é adição de algumas propertys:

public string Versao { get; set; }

public TipoAmbiente TpAmb { get; set; }

public string VerAplic { get; set; }

public int CStat { get; set; }

public string XMotivo { get; set; }

public int CUF { get; set; }

public string ChNFe { get; set; }

public DateTime DhRecbto { get; set; }

public string NProt { get; set; }

public string tpEvento { get; set; }

public string xEvento { get; set; }

public string nSeqEvento { get; set; }

public string CNPJDest { get; set; }

public string emailDest { get; set; }

public string XML { get; set; }

public string Resposta { get; set; }

Se conferirmos na declaração da classe, podemos ver que ela herda de CancelamentoRespostaBase:

public sealed class CancelamentoNFeResposta : CancelamentoRespostaBase<CancelamentoNFeResposta, TipoEventoNFe>

Já CancelamentoRespostaBase, herda de DFeRespostaBase.

Ambas já possuem as propriedades que você adicionou, por isso, não acho necessário adicionar elas na classe filha novamente.

 

A segunda alteração é a adição de um método LerResposta.

public static CancelamentoNFeResposta LerResposta(string resposta)
{
	ACBrIniFile iniData = ACBrIniFile.Parse(resposta);
	CancelamentoNFeResposta cancelamentoCTeResposta = iniData.ReadFromIni<CancelamentoNFeResposta>("CANCELAMENTO");

	if (cancelamentoCTeResposta == null)
		cancelamentoCTeResposta = iniData.ReadFromIni<CancelamentoNFeResposta>("Cancelamento");

	cancelamentoCTeResposta.Resposta = resposta;
	return cancelamentoCTeResposta;
}

Este método tenta ler de uma seção "CANCELAMENTO" na resposta e se não encontrar, busca de "Cancelamento".

Nos testes que fiz, o conteúdo devolvido veio da seguinte maneira:

Portanto, o if que busca por "CANCELAMENTO" retornou vazio e acabou buscando e encontrando em "Cancelamento".

Para este caso, já tem na rotina de leitura de CancelamentoRespostaBase.cs

Realizei meus testes usando o demo em C# e a seguinte versão da Lib.

image.png

 

Bom dia, então apenas utilizando os eventos já existentes, a leitura da resposta de ocorrer normalmente, correto?

Link to comment
Share on other sites

  • Consultores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

  • Like 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

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 !!

Link to comment
Share on other sites

  • Este tópico foi criado há 381 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • 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.