Jump to content

dev botao

Download XML após Manifestação


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

Recommended Posts

  • Membros Pro
1 minuto atrás, BigWings disse:

Até onde sei, não é possível.

Você deve salvar o XML no momento da manifestação.

O problema é que a MANIFESTAÇÃO e o RETORNO do XML ocorrem em frações de segundos distintas... Em uma internet ruim é comum manifestar e não receber o retorno dessa manifestação... Aí em uma segunda tentativa é vital poder reconhecer que houve a manifestação (o que é sabido pelo erro Duplicidade de Evento) e logo em seguida poder resgatar o XML desse evento.

Link to comment
Share on other sites

  • Consultores

Bom dia,

A Manifestação do Destinatário, trata-se de um evento que é enviado pelo Destinatário da mercadoria para a SEFAZ.

O web services que recepciona qualquer tipo de evento, seja ele de Cancelamento, Carta de Correção, Manifestação do Destinatário entre outros, funciona no modo síncrono.

Sendo assim no retorno do envio já é a resposta do processamento do evento enviado.

Não existe um Web Services especifico para consultar a situação de um evento enviado para saber se o mesmo foi recebido pela SEFAZ ou não e desta forma decidirmos se de devemos envia-lo novamente ou não.

Mas vejo uma luz no fim do túnel para o seu caso.

É sabido que todo evento deve ser vinculado a um documento fiscal, no caso da Manifestação do Destinatário é a NF-e.

Pois bem, o componente ACBrNFe possui um método chamado Consultar, onde podemos passar como parâmetro a chave da NF-e.

Exemplo:

ACBrNFe1.Consultar(sChaveNFe);

Teremos como resposta a situação atual da nota e de quebra todos os eventos vinculados a mesma.

De posse do retorno, basta checar se consta o evento de Manifestação do Destinatário enviado para a respectiva nota.

Se não constar, isso significa que devemos enviar o evento novamente.

Lembre-se que o método Consultar do componente ainda não esta preparado para extrair de forma amigável os eventos vinculados.

Mas como escrevi acima, é uma luz no fim do túnel.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • 4 weeks later...
  • Membros Pro
Em 26/11/2017 at 11:51, Italo Jurisato Junior disse:

Bom dia,

A Manifestação do Destinatário, trata-se de um evento que é enviado pelo Destinatário da mercadoria para a SEFAZ.

O web services que recepciona qualquer tipo de evento, seja ele de Cancelamento, Carta de Correção, Manifestação do Destinatário entre outros, funciona no modo síncrono.

Sendo assim no retorno do envio já é a resposta do processamento do evento enviado.

Não existe um Web Services especifico para consultar a situação de um evento enviado para saber se o mesmo foi recebido pela SEFAZ ou não e desta forma decidirmos se de devemos envia-lo novamente ou não.

Mas vejo uma luz no fim do túnel para o seu caso.

É sabido que todo evento deve ser vinculado a um documento fiscal, no caso da Manifestação do Destinatário é a NF-e.

Pois bem, o componente ACBrNFe possui um método chamado Consultar, onde podemos passar como parâmetro a chave da NF-e.

Exemplo:

ACBrNFe1.Consultar(sChaveNFe);

Teremos como resposta a situação atual da nota e de quebra todos os eventos vinculados a mesma.

De posse do retorno, basta checar se consta o evento de Manifestação do Destinatário enviado para a respectiva nota.

Se não constar, isso significa que devemos enviar o evento novamente.

Lembre-se que o método Consultar do componente ainda não esta preparado para extrair de forma amigável os eventos vinculados.

Mas como escrevi acima, é uma luz no fim do túnel.

Boa tarde, tudo bom???

Fui testar o manifestação hoje pela primeira vez em um cliente, em Produção.

Adivinha... Aconteceu de início o que eu imaginei, erro 12002 (internet lenta) ao tentar manifestar e logo em seguida "Duplicidade de Evento".

O meu problema nem é tanto saber se manifestou, pois dado o erro é óbvio que a manifestação foi realizada com sucesso... O problema é que preciso as seguintes informações que armazeno em meus sistema...

Número, data e hora do protocolo, além do motivo para saber se foi corretamente vinculado a NFe em questão, além claro do XML completo do evento da manifestação

Como resgatar tais informações???

Link to comment
Share on other sites

  • Consultores

Boa tarde,

Não existe um Web Service para consultar a situação atual de um evento.

Se você consultar a situação atual da NF-e se não me falha a memória é para retornar a situação da mesma, bem como os eventos vinculados a nota.

Mas o componente não extrai essas informações do XML de retorno e coloca os dados em propriedades, para que você possa ler e atualizar o banco de dados.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • Membros Pro

Entendo Italo, mas aí fica inviável usar a Manifestação do componente, pelo simples fato de esse problema de internet existir e ocorrer, aí fica dando Duplicidade de Evento e perco o XML do evento com dados importantes.

Como você faz nesses casos em suas aplicações?

Outrac oisa, você disse que o componente não extrai as informações do XML... Então é possível resgatar o XML do evento posteriormente? Como?

 

Link to comment
Share on other sites

  • Consultores

Se o problema é a internet, que culpa tem o componente neste caso?

Simplesmente implementamos no componente seguindo o que consta nos manuais e notas técnicas, métodos para consumir os Web Services disponibilizados pela SEFAZ.

Se fica dando duplicidade de evento é porque a sua aplicação não seta no banco de dados que o evento já foi enviado ou não.

Como dito antes, ao consultar a situação atual de uma NF-e é retornado da SEFAZ um XML que consta se a nota esta autorizada ou não e caso afirmativo, retorna se existir os eventos vinculados a mesma.

No momento para o componente ACBrNFe interessa se a nota esta autorizada ou não, o resto das informações são ignoradas.

Mas como dito antes, se existir os eventos vinculados é para constar nesse retorno.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • Membros Pro

Realmente Italo, conforme disse o componente não tem culpa alguma...  

E realmente eu posso simplesmente setar na minha aplicação que a Manifestação foi feita, mas levando em conta que o cliente pode ter um histórico de manifestações sobre uma mesma NFe (dar ciência e depois confirmar a operação, por exemplo), eu acho pertinente salvar todas, com seus XMLs respectivos para auditorias futuras que se façam necessárias... E é aí que eu vejo a inviabilidade, se eu não tiver como consultar ou recriar pelo componente,  por exemplo, o XML da Ciência que foi dada com o comando ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.XML, pois nessa hora, apesar de ocorrer a Manifestação, deu falha logo em seguinda na internet, é fato que a Internet no Brasil é uma BOMBA.

Mas eu estou exagerando nesse arquivamento? O que acha... Você não salva tais XMLs?

Link to comment
Share on other sites

  • Consultores

Boa noite,

Eu costumo salvar tudo, ou seja, inclusive os arquivos de envio e de retorno.

Já que a internet não é essas grandes coisas, você tentou mudar o valor de timeout para ver se minimiza o problema?

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • Membros Pro

Sim Italo, mudei o Timeout, mas persiste. E mesmo resolvendo em um cliente, ainda assim existiria a possibilidade de ocorrer em algum outro e eu gostaria de dar uma solução mais específica.

Dentre esses arquivos de retorno tem o XML da Manifestação (que nesses casos de erro eu não consigo obter pelo ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.XML)???????? 

Cara, eu consegui resolver isso no evento do Cancelamento há muito tempo atrás, eu não sei se está certo a solução que dei, mas reparei que pelo comando"dtm_banco.ACBrNFe1.WebServices.Consulta.RetWS" eu conseguia recuperar parte do XML do evento do Cancelamento Aí eu peguei isso, adicionei o resto do conteúdo à mão e recrio o XML do Cancelamento de NFCe em casos de falha de internet, quando a nota é cancelada e logo após não recebo o retorno por falha da internet. Não dá pra fazer algo similar ou mais fácil para obter o XML da manifestação nesses casos de erro?

Segue abaixo o código que fiz para o cancelamento, caso ajude alguém:

if ACBrNFe1.WebServices.EnvEvento.EventoRetorno.retEvento.Items[0].RetInfEvento.cStat = 573 Then
	begin
    	ACBrNFe1.NotasFiscais.Clear;
        ACBrNFe1.WebServices.Consulta.NFeChave := chave;
		xml := ACBrNFe1.WebServices.Consulta.RetWS;
		xml := TextoEntre(xml, '<procEventoNFe', '</procEventoNFe>');
        xml := '<?xml version="1.0" encoding="UTF-8"?><procEventoNFe' + xml + '</procEventoNFe>';
	    idevento := Copy(xml, Pos('infEvento Id="ID', xml) + 16, 52);
        AssignFile ( arq, ExtractFilePath(Application.ExeName)+ 'XML\NFCe\Canceladas\'+FormatDateTime('yyyymm', DataServidor)+'\' + idevento + '-procEventoNFe.xml' );
        Rewrite ( arq );
        WriteLn ( arq, xml);
        CloseFile ( arq );
        messageBox(handle,'Nota cancelada com sucesso','Cancelamento concluído',MB_IconInformation+mb_OK);
	end

 

Link to comment
Share on other sites

  • Consultores

Boa noite,

Abra os dois através de uma navegador.

Note que o XML gerado pelo seu código possui 2 namespace a mais.

Se remover vai ficar exatamente igual.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • Membros Pro

Ok, boa observação. Mas então tirando esse detalhe a minha idéia deu certo.

Mas ainda fico com o problema no XML da Manifestação no caso da falha na internet.

Existe algo que eu possa fazer? Uma solução similar a que criei para o do Cancelamento? Ou em caso de falha simplesmente não tem jeito e perco o conteúdo desse XML?

Desde já agradeço todas as dicas dadas meu amigo

Link to comment
Share on other sites

  • Consultores

Bom dia,

Você concorda que o Cancelamento é um Evento?

E o que vem a ser a Carta de Correção e Manifestação do Destinatário?

Não são eventos também?

Sendo assim, acredito que você possa adotar a mesma solução.

Consultor SAC ACBr

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

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Link to comment
Share on other sites

  • Moderadores

Bom dia,

Não acho que será possível obter o XML da manifestação dessa forma.

Visto que está extraindo o XML a partir da consulta da NFe:

Em 19/12/2017 at 18:11, doidopb disse:

xml := ACBrNFe1.WebServices.Consulta.RetWS;

xml := TextoEntre(xml, '<procEventoNFe', '</procEventoNFe>');

Ou seja, em algum momento foi executado o método Consultar o que retorna os eventos, porém nem todos os eventos são retornados.
Desde a NT 2015/002 os eventos retornados foram limitados, conforme NT:

Citar

Na resposta do Web Service de Consulta Situação da Nota Fiscal deverão ser retornados unicamente os Eventos de Cancelamento, Carta de Correção e EPEC, reduzindo o tamanho da mensagem de resposta da SEFAZ Autorizadora e reduzindo também o tempo de resposta para esta consulta (*1).
(*1) Eventualmente a SEFAZ Autorizadora poderá manter o modelo anterior, conforme seu critério.

 

Isso é até compreensível considerando a quantidade de eventos que uma NFe pode ter.

 

Equipe ACBr BigWings
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

 

 

Link to comment
Share on other sites

  • Membros Pro

Realmente eu tentei aqui e não recebo nada de Manifestação...

Pelo jeito não tem jeito, não vejo solução. Faltará esse XML em caso de falha na internet... Incrível como a SEFAZ, sabendo a dificuldade de infraestrutura que temos nesse nosso país, não disponibilizou um meio para obter isso através de uma simples consulta a ser usada posteriomente nos casos de falha na internet.

Edited by doidopb
Link to comment
Share on other sites

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