Ir para conteúdo
  • Cadastre-se

dev botao

Download XML após Manifestação


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

Recommended Posts

  • Membros Pro
Postado
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.

  • Consultores
Postado

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

  • 4 semanas depois ...
  • Membros Pro
Postado
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???

  • Consultores
Postado

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

  • Membros Pro
Postado

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?

 

  • Consultores
Postado

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

  • Membros Pro
Postado

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?

  • Consultores
Postado

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

  • Membros Pro
Postado

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

 

  • Membros Pro
Postado

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

  • Consultores
Postado

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

  • Moderadores
Postado

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

 

 

  • Membros Pro
Postado (editado)

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.

Editado por doidopb
×
×
  • 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.