Ir para conteúdo
  • Cadastre-se

dev botao

C# - Cancelamento NFCe - CancelamentoNFeResposta


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

Recommended Posts

  • Membros Pro

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 para o comentário
Compartilhar em outros sites

  • Consultores

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

#TK-4347 

  • Obrigado 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 para o comentário
Compartilhar em outros sites

  • Consultores

Arquivo alterado para análise:

 

  • Curtir 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 para o comentário
Compartilhar em outros sites

  • 5 semanas depois ...
  • 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

 

  • Obrigado 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 para o comentário
Compartilhar em outros sites

  • Membros Pro
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 para o comentário
Compartilhar em outros sites

  • Consultores

Obrigado por reportar.

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

  • Curtir 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 para o comentário
Compartilhar em outros sites

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