Cancelamento NFe 4.0

176 views
Skip to first unread message

Márcos Eduardo V. Martins

unread,
Dec 29, 2017, 8:23:24 AM12/29/17
to NFePHP
Bom dia Roberto,

Cheguei na fase do Cancelamento e estou recebendo o retorno "135 - Evento registrado e vinculado a NF-e" e não o informado no link https://github.com/nfephp-org/sped-nfe/blob/master/docs/metodos/Cancelamento.md , ou seja,101 - Cancelamento homologado ou 155 - Cancelamento homologado fora de prazo.

Esse código que recebi era o que vinha no modelo antigo, será que ainda vai mudar para esse que você informou, ou tem algum equívoco?

Att Marcos

Roberto Machado

unread,
Dec 29, 2017, 9:05:53 AM12/29/17
to nfe...@googlegroups.com
Marcos o cStat 135 também está CORRETO apenas faltou menciona-lo no documento

Depende do SEFAZ e do momento quem que você faz o cancelamento pode receber respostas diferentes.

Roberto

Márcos Eduardo V. Martins

unread,
Jan 2, 2018, 8:14:16 AM1/2/18
to NFePHP
Bom dia,

estou tendo problemas de demora no Cancelamento, da mesma forma da emissão, onde, se demora em demasiado, ocorre o timeout. Na emissão, consegui resolver, fazendo antes uma consulta da chave, para ver se já foi emitida. Na emissão foi resolvida, porém no Cancelamento tentei fazer a mesma coisa, consultar se ela já foi cancelada, ele até consulta, volta o retorno, testo, e se foi cancelada tento seguir o mesmo procedimento de protocolar:

$xml = Complements::toAuthorize($this->Tools->lastRequest, $this->Response);

Só que dai recebe o retorno de excessão: "Este documento [{{msg}}] não recebe protocolos. Confira a ordem dos parâmetros."

Até tentei resetar a tag unset($std->protNFe), mas sem sucesso também...

Alguma dica nessa situação?


Att Marcos

Roberto Machado

unread,
Jan 2, 2018, 8:21:06 AM1/2/18
to nfe...@googlegroups.com
Marcos !!

Não tem como protocolar uma nota já aceita !! e protocolada !!!

Se você quer apenas fazer um REGISTRO do cancelamento no XML original o métoco correto é 

cancelRegister($nfe, $cancelamento)



Roberto

Roberto Machado

unread,
Jan 2, 2018, 8:23:19 AM1/2/18
to nfe...@googlegroups.com
Mas por outro lado não sei o que você está fazendo ai !! 

recomento DEBUGGAR com o xdebug para ver onde está o erro

Roberto 

Márcos Eduardo V. Martins

unread,
Jan 2, 2018, 8:58:52 AM1/2/18
to NFePHP
Tinha feito o toAuthorize porque nas documentações estão todos com o mesmo nome:  $xml = Complements::toAuthorize($req, $res);

Vou testar com esse que mencionou...

Att Marcos

Roberto Machado

unread,
Jan 2, 2018, 9:08:52 AM1/2/18
to nfe...@googlegroups.com
Leia o documento antes de fazer qq coisa !!

o método toAuthorize() é para protocolar as mensagem que requerem o mesmo 

O cancelamento é um EVENTO e como tal também deve ser protocolado !!! com o método toAuthorize()

Roberto

Márcos Eduardo V. Martins

unread,
Jan 3, 2018, 1:15:10 PM1/3/18
to NFePHP
Justamente! O que precisava, era protocolar o evento de cancelamento, só que acontece as vezes, aquela demora (timeout), dai a gente tenta novamente e vem a mensagem que já foi feito o cancelamento (naquela tentativa demorada que não retornou nada). Então pensei... em fazer a consulta antes, para ver se já foi feito o cancelamento, e se foi, protocolar esse envio que "falhou" para mim, mas não para "ele" (SEFAZ).

Então, nesse momento ele dá erro quando eu tento enviar o retorno do comando: $Response = $Tools->sefazConsultaChave($this->Chave);
para o Complements::toAuthorize($Tools->lastRequest, $Response);

dá o erro: "Este documento [{{msg}}] não recebe protocolos. Confira a ordem dos parâmetros." 

Como não pode protocolar esse cancelamento, se é um evento e precisa ser protocolado?


Marcos

Roberto Machado

unread,
Jan 3, 2018, 2:01:52 PM1/3/18
to nfe...@googlegroups.com
Marcos;

Por favor preste atenção no que você está fazendo !!!!!!

depois que você faz uma consulta a chave você NÃO TEM MAIS um evento de cancelamento no ultimo pedido (last request)

O que o sistema está dizendo que uma CONSULTA DE CHAVE não pode ser protocolada !!!

Roberto

Márcos Eduardo V. Martins

unread,
Jan 4, 2018, 7:05:16 AM1/4/18
to NFePHP
Então não é possivel contornar esse problema de TIMEOUT, que pode ocorrer no CANCELAMENTO? Ou tem alguma outra forma?

Marcos

Roberto Machado

unread,
Jan 4, 2018, 7:20:07 AM1/4/18
to nfe...@googlegroups.com
Marcos;

Você é o primeiro a comentar sobre TIMEOUT em uma operação síncrona com a SEFAZ.

Para mim isso é a exceção da exceção !!! É um evento muito raro de ocorrer.

Mas como tratar isso ?

1 - ao realizar qualquer operação, que requeira protocolo, grave o ultimo request na base de dados (sim o XML mesmo);
2 - em havendo um TIMEOUT você terá esse request para poder protocolar posteriormente.
3 - na consulta da chave é retornado o protocolo de cancelamento que poderá ser usado para protocolar esse request de cancelamento.

Mas tudo isso requer que o sistema possua uma lógica para esses tratamentos e á seu sistema que deve faze-lo, e não a API (ela não tem como lidar com isso).

Roberto

Reply all
Reply to author
Forward
0 new messages