sexta-feira, 12 de junho de 2009

NF-E: COLETANDO DADOS DO ARQUIVO DE SITUAÇÃO


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:

UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID

Olá, pessoal!  Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...