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á 424 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

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

  • Consultores
Postado

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

  • Consultores
Postado

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

  • 5 semanas depois ...
  • Consultores
Postado

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

Postado
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?

  • Consultores
Postado

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

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