Em alguns momentos, seja por erro no retorno do web service, seja por algo que impossibilite o acesso, os arquivos -proc-rec.xml para uma nfe enviada normalmente ao servido da sefaz poderão ser perdidos. Ao consultar o site da sefaz você constatará que a mesma já se encontra autorizada para uso, mas não possui ainda o arquivo -pro-rec.xml com número do protocolo informado no site.
Para alguns aplicativos de ERP isso pode significar um problema se de maneira normal estes aplicativos aguardam a recepção do arquivo -pro-rec.xml para validar no banco de dados da empresa a numeração do protocolo de autorização de uso e o status da nf-e no site da Sefaz.
Se o seu ERP move os arquivos de num-lot.xml, -rec.xml e -pro-rec.xml para uma outra pasta quando os mesmos são detectados e um deles não retorna - como o -pro-rec.xml - o trabalho do seu ERP estará comprometido. Você terá que criar um arquivo de pedido de situação da nf-e que enviou à Sefaz e atualizar os dados do protocolo de uso, hora de recepção e status da nf-e na mão... trabalho inglório!!!
Nessa caso, será preciso obter de um outro modo o número do protocolo de autorização da nf-e. Para obter os dados novamente, pode gerar um arquivo de pedido de status e deixar o retorno na mesma pasta onde deveria estar o arquivo -pro-rec.xml não recebido e dessa forma forçar seu ERP a ler o arquivo -sit.XML para resolver por si mesmo essa situação.
Um pedido de situação da nf-e enviado a Sefaz está listado abaixo. O arquivo é pequeno e bem simples de ser gerado:
<
?xml version="1.0" encoding="UTF-8"?>
<
conssitnfe xsi="http://www.w3.org/2001/XMLSchema-instance" xsd="http://www.w3.org/2001/XMLSchema" versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe">
<
tpamb
>1</tpamb>
<xserv
>CONSULTA</xserv>
<chnfe
>13090604672291000115550110000000380000000494</chnfe>
</consSitNFe>
O nome do arquivo de pedido de situação é nfe-sit.xml.
Exemplo: 13090604672291000115550110000000380000000494-ped-sit.xml
O arquivo de retorno gerado por um pedido de situação traz em conjunto em seu interior o próprio número da nf-e, o número do protocolo de uso e o status da nf-e no site da sefaz:
< ?xml version="1.0" encoding="UTF-8"?>
<retConsSitNFe versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.portalfiscal.inf.br/nfe retConsSitNFe_v1.07.xsd">
<infProt
>Id="ID113090003033468">
<tpamb
>1</tpamb>
<verAplic
>1</verAplic>
<cStat
>100</cStat>
<xMotivo
>Autorizado o uso da NF-e</xMotivo
<cUF
>13</cUF>
<chNFe
>13090604672291000115550110000000400000000514</chNFe>
<dhRecbto
>2009-06-12T08:50:58</dhRecbto>
<nProt
>113090003033468</nProt>
<digVal
>roFtqwdm/MZJQEmiXms/u3hwEe4=</digVal>
</infProt>
Para coletar a informação do número de protocolo para ser usado na impressão da DANFE, um simples IF a mais precisa ser acrescentado ao código de impressão da DANFE.
Você pode checar antes da impressão da DANFE se há a existência de um arquivo de pedidido de situação ou o arquivo pro-rec.xml de retorno do recibo.
Eis um código em VB.NET para isso:
Dim NomeArquivoRecibo As String
NomeArquivoRecibo = "F:\SisWin\IAM\NFE\RETORNO\PROCESSADOS\" + IdNfe + "-pro-rec.xml"
'Danfe Normal. Pega os dados dos recibos e do protocolo de uso
If TipodeEmissao = "1" Then
'Verifica se já houve retorno do arquivo selecionado
If IO.File.Exists(NomeArquivoRecibo) = False Then
Dim NomeArquivoRecibo5 As String
'Algo errado com o retorno do recibo. Procurar pelo arquivo de situação
'da NF-e. Necessário para os erros de falta de dados do arquivo -pro-rec.xml
'Ler dados do arquivo de retorno de situação, caso o status do
'recibo de retorno esteja diferente de 104
NomeArquivoRecibo5 = "F:\SisWin\NFE\RETORNO\PROCESSADOS" + IdNfe + "-sit.xml"
'Abrir o arquivo de retorno situação de status
Dim reader_5 As XmlTextReader = New XmlTextReader(NomeArquivoRecibo5)
If IO.File.Exists(NomeArquivoRecibo5) = False Then
MsgBox("Impressão da DANFE Cancelada!!! Sem Recibo de Retorno! Envie a NF-e primeiro a SEFAZ!!", MsgBoxStyle.Critical, "DANFE Coplast")
Exit Sub
Else
Do While (reader_5.Read())
Select Case reader_5.NodeType
Case XmlNodeType.Element
If reader_5.Name = "nProt" Then
LProtocolo2 = reader_5.ReadString
If LProtocolo2 <> "" Then
myRow2.NumProtocolo = LProtocolo2
End If
End If
End Select
Loop
reader_5.Close()
End If
(...)
Esse pequeno trecho fará a leitura do dado do Protocolo diretamente do arquivo -sit.xml gerado.
O trecho também pode ser utilizado para gravar o registro de protocolo no banco de dados a fim de evitar problemas quando não se consegue obter o -pro-rec.xml de modo correto no retorno do site da Sefaz.
Sorte a todos!
Nenhum comentário:
Postar um comentário