Ir para conteúdo
  • Cadastre-se

dev botao

Validação do CT-e - Regra de Validação G60


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

Recommended Posts

Olá!

Na emissão de CT-e em alguns servidores da Sefaz é feito a validação da regra número G60, que segue abaixo:

Citar

"Se Tipo do CT-e= 0 (Normal) ou 3 (Substituição) e informados grupos de
informações de documentos (infDoc) e NF-e (infNfe), para cada uma das
NF-e´s relacionadas:
- Acessar BD CHAVES NFE (Chave: CNPJ Emit, Modelo, Série, Nro):
- A NF-e não pode estar cancelada ou denegada
Retornar a primeira chave de acesso de NF-e com situação inválida.
OBS: A SEFAZ Autorizadora poderá consultar o documento diretamente no
Ambiente Nacional através de WebService nfeConsultaNFe"

Existe alguns casos em que o CT-e tem muitas notas incluídas e por ventura acontece de ter uma ou duas notas canceladas. A mensagem de exceção acaba não retornando todas as chaves com problemas e isso dificulta bastante a emissão, pois é necessário identificar a nf-e que está cancelada e retirar do transporte.

Com isso fizemos uma rotina para consultar se a nota está cancelada antes da emissão do CT-e para assim identificarmos e adiantarmos a validação do problema. Estamos utilizando um método com código semelhante a esse abaixo:

Citar

ACBrNFe1.NotasFiscais.Clear;
ACBrNFe1.WebServices.Consulta.NFeChave := "Chave de Acesso";
ACBrNFe1.WebServices.Consulta.Executar;

if (Trim(ACBrNFe1.WebServices.Consulta.RetWS) <> '') then
 begin
   wXML := ACBrNFe1.WebServices.Consulta.RetWS;

   XMLDocument1 := TXMLDocument.Create(nil);
   XMLDocument1.LoadFromXML(wXML);
   XMLDocument1.Active := True;

   if not(XMLDocument1.IsEmptyDoc) then
	begin
	  wRetConsSitNFe := XMLDocument1.ChildNodes.FindNode('retConsSitNFe');
	  if (wRetConsSitNFe <> nil) then
	    Result := (wRetConsSitNFe.ChildNodes['cStat'].Text = '101')
	  else
	    Result := False;
	end;
  end
else
  Result := False;

 

A rotina é funcional, porém não performática. Em alguns momentos é retornado a exceção de uso indevido e isso acaba prejudicando a implementação da rotina.

Dado esse cenário gostaria da ajuda/consultoria sobre uma melhor maneira de validar esse problema que é muito comum no dia-a-dia de emissão de CTes.

  1. Existe uma melhor forma de fazer essa pesquisa?
  2. Não é funcional utilizar essa rotina?
  3. Existe uma maneira de adicionar mais chaves e pesquisar todas de uma vez para resolver o problema de uso indevido ao servidores?

Obrigado pela ajuda de sempre.

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Fernando,

Não sei se resolve o problema, mas acredito que minimiza ele.

O emitente da NF-e caso venha cancelar uma nota, deve sempre enviar imediatamente o arquivo *-procEventoNFe.xml tanto para o cliente quanto para a transportadora, para que ambos saibam que a nota foi cancelada.

O arquivo XML mencionado acima contem o pedido de cancelamento bem com o protocolo retornado pela SEFAZ atestando o cancelamento da nota.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores

Fernando,

Pelo que entendi a transportadora sequer recebe o XML da NF-e referente a carga que vai transportar, correto?

Logo tudo se baseia no DANFE.

Em qual momento você roda a rotina que consulta a nota, a medida que lança as notas ou quando vai alimentar o componente?

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Consultores
  • Solution

Fernando,

Neste caso se o CT-e possui 10 notas ele vai realizar a consulta 10 vez em um curto espaço de tempo, correto?

E se na medida que o usuário vai informando os dados da nota, já chama essa consulta?

Faz com que seja solicitado logo de inicio a chave da nota, em seguida faz a consulta, se estiver cancelada, uma mensagem é apresentada e solicita a próxima nota caso tenha.

Desta forma os dados da nota cancelada nem vai para o banco de dados e acredito que com isso acaba gerando um intervalo de tempo maior entre uma consulta e outra e consequentemente evitando a rejeição por consumo indevido.

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1992 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.