Parte 2Hoje uma nota fiscal deixou de ser papel e virou um arquivo do tipo xml. Esse arquivo precisa ser criado (digitado), assinado, validado,autorizado (enviado para a sefaz autorizar ele) e imprimido para acompanhar a mercadoria. Quando ele é impresso passa a se chamar Danfe (Documento auxiliar de nota fiscal eletronica). Então a nota fiscal no papel hoje nada mais é do que um xml interpretado e impresso com o nome de danfe.
Existem 03 tipos de NFe. (Os outros colegas podem me corrigir se estiver errado)
NFe - Nota Fiscal Eletrônica
NFCe - Nota Fiscal ao Consumidor ELetrônica
NFS - Nota Fiscal Eletrônica de Seviços.
Existem algun procedimentos que acredito não serem considerados NFe, tais como MDFe e etc....
Para fazer uma NFe é necessário alguns eventos:
1 - Digitar a nota e criar o arquivo XML
2 - Assinar o arquivo XML
3 - Validar o arquivo XML
4 - Enviar/Transmitir o arquivo XML
5 - Imprimir o XML (Danfe)
Outros eventos:
Cancelar um NFe e Inutilizar a NFe. É necessário observar que Cancelar uma NFe é diferente de Inutilizar uma NFe.
Cancelar - Depois que a nota foi transmitida e autorizada pela SEFAZ existe a possibilidade de gerar um evento de cancelamento desta NFe. Existe um prazo legar de duas horas para o cancelamento de uma NFe e de meia hora para uma NFCe. Ultrapassado este limite só através de um cancelamento exteporâneo mediante o pagamento de uma taxa para a sefaz.
Inutilizar um número de NFeÉ possível a inutilização de um número de NFe desde que a mesma ainda não tenha sido enviada para a SEFAZ. Ao contrário do que muitos pensam não é necessário a existência de um xml para executar tal evento. É enviado um comando para o acbr que executa o evento e retorna uma resposta informando se o evento foi executado ou não. Até hoje não vi ainda nenhum limite de data para a inutilização de uma NFe/NFCe.
Só deixo uma observação para instruir o cliente que quanto menos notas cancelar e inutilizar melhor para sua empresa. Quando se trata de fisco quanto menos aparecer melhor.
Conversando com o monitor Como já foi dito o monitor do acbr fica monitorando uma pasta especifica, no nosso caso c:\acbrnfe2. Essa é a grande vantagem do acbr. Nâo existe a obrigatoriedade de uma linguagem especifica. Ele se comunica através de arquivos textos com comandos para ele. O acbr vai ler o arquivo que você salvar na pasta c:\acbrnfe2 e interpretar o comando e executar.
Para fazer um teste vamos descobrir qual o status da sefaz. Entre no notepad e digite NFE.StatusServico, salve esse arquivo na pasta c:\acbrnfe2 com o nome entnfe.txt , se fez tudo correto até agora o acbr vai ler o seu arquivo entnfe.txt e executar o comando que você enviou e salvar uma arquivo de saida com o nome sainfe.txt, que terá o seguinte conteúdo:
Conteúdo do arquivo sainfe.txt
OK: Servico em Operacao
[STATUS]
Versao=3.10
TpAmb=1
VerAplic=3.10
CStat=107
XMotivo=Servico em Operacao
CUF=51
DhRecbto=11/05/2016 13:37:48
TMed=1
DhRetorno=30/12/1899
XObs=
Eu posso testar praticamente todos os comandos do acbr dessa forma, claro que observando sua sintaxe e argumentos. A relação dos comandos e objetos do acbr pode ser encontrada no arquivo AcbrMonitor.chm nas pasta c:\acbrnfe2.
ps. Eu não vou ensinar aqui os comandos de uma nfe, isso vão ver nos exemplos e no arquivo de ajuda. Somente vou passar os conceito e alguns macetes que é o que mais judia da gente.
Observem que são criados dois arquivos um de entrada (entnfe.txt) e um de saída (sainfe.txt). Então toda vez que for enviar um comando para o acbr será necessário apagar estes arquivos.
O conteúdo enviado e recebido também pode encontrado no arquivo log.txt dentro da pasta c:\acbrnfe2
Criando um xml da NFeA primeiro evento a ser feito na criação da NFe e criar a nfe, o XMl com o comando NFE.CriarNFe. Observerm que todos os comandos de uma NFE começa com NFE. o acbr é uma suíte/framework com vários objetos como pode ser visto na figura da página inicial. Então temos que informar qual objeto será usado, no caso específico o NFE.
Código usado para criar uma NFEO uso é o seguinte
NFE.CriarNFe( cTEXTO DA NFE )
Daí segue o mesmo procedimento, salva esse comando num arquivo entnfe.txt o acbr lê e retorna uma resposta no arquivo sainfe.txt
Daí lê o arquivo sainfe.txt e toma as decisões baseadas no que foi retornado.
Arquivo enviado para o acbr, salvo em c:\abrnfe2 como entnfe.txt
NFE.CriarNFe("[Identificacao]
NaturezaOperacao=ENTRADA RECLASSIFICACAO MERCADORIA FORMACAO KIT DESAGREGACAO
idDest=1
FormaPag=2
Modelo=55
Serie=1
Codigo=003736
Numero=003736
Emissao=26/04/2016
Tipo=0
TpAmb=1
Finalidade=1
[Emitente]
CNPJ=99999999999999
IE=
Razao=MDV INF E PAPELARIA LTDA
Fantasia=TESTE
Fone=6634381933
CEP=78690000
CRT=1
Logradouro=AV RIO GRANDE DO SUL
Numero=690
Complemento=
Bairro=CENTRO
CidadeCod=5106257
Cidade=NOVA XAVANTINA
UF=MT
[Destinatario]
indIEDest=9
CNPJ=99999999999999
IE=
NomeRazao=2 OFICIO EXTRA JUDICIAL DE N. XAVANTINA
Fone=6634383183
CEP=78690000
Logradouro=AV CAMPO GRANDE
Numero=368
Complemento=
Bairro=CENTRO
CidadeCod=5106257
Cidade=NOVA XAVANTINA
UF=MT
Email=
[Produto001]
Item=1
CFOP=1926
Codigo=20424
Descricao=DIARIOS DECORADOS LIVRO DIARIO
NCM=48201000
EAN=6161103642116
uCom=UN
qCom=1.000
vUnCom=16.82
vProd=16.82
ValorDesconto=0.00
IndTot=1
[ICMS001]
Origem=0
CSOSN=500
[Produto002]
Item=2
CFOP=1926
Codigo=20425
Descricao=DIARIOS DECORADOS LIVRO DIARIO BOLSA MUS
NCM=48201000
EAN=6161103641171
uCom=UN
qCom=1.000
vUnCom=26.33
vProd=26.33
ValorDesconto=0.00
IndTot=1
[ICMS002]
Origem=0
CSOSN=500
[Produto003]
Item=3
CFOP=1926
Codigo=20427
Descricao=DIARIOS DECORADOS LIVRO DIARIO+CADERNETA
NCM=49019900
EAN=6161103642307
uCom=UN
qCom=1.000
vUnCom=22.08
vProd=22.08
ValorDesconto=0.00
IndTot=1
[ICMS003]
Origem=0
CSOSN=500
[Produto004]
Item=4
CFOP=1926
Codigo=03301
Descricao=DICIONARIO ESPANHOL ESPANHOL/PORT
NCM=49019100
EAN=9788573383492
uCom=UN
qCom=1.000
vUnCom=12.64
vProd=12.64
ValorDesconto=0.00
IndTot=1
[ICMS004]
Origem=0
CSOSN=500
[Total]
ValorProduto=77.87
ValorDesconto=0.00
ValorOutrasDespesas=0.00
ValorNota=77.87
[Transportador]
FretePorConta=9
NomeRazao=
[DadosAdicionais]
Fisco=
Complemento=PROCON-MT-Fone 151 Av.Hist.Rubens Mendonca - Nr 917 - Araes - Ed.Eld.Exec.Center CEP:78-008-000 - Cuiaba-MT;DOC EMITIDO POR ME/EPP OPTANTE SIMPLES NACIONAL NAO GERA DIREITO A CREDITO FISCAL DE ICMS ")
Resposta do acbr no arquivo sainfe.txt
OK: C:\ACBrNfe2\Retorno\51160407407005000182550010000037361000037361-nfe.xml
Observe que ele tá te informando que criou um arquivo na pasta c:\acbrnfe2\retorno (lembra dela?).
Beleza então já temos um arquivo xml!!! já posso até imprimir o danfe dele se eu quiser... mas aparecerá não autorizado pela sefaz. Porque? porque ainda não enviei esse xml para a sefaz.
Agora vamos para o evento 2, assinar o xml.
Assinando o xmlVai precisar ler o arquivo sainfe e pegar o nome do arquivo xml com o seu caminho completo. No final vou postar as rotinas que uso. Você também poderá usar as rotina que o Fladimir deu um show neste tópico
http://www.pctoledo.com.br/forum/viewtopic.php?f=20&t=16781&start=15#p105951.
Então ler o arquivo e pegar o xml. depois enviar para o acbr assinar. Como? salvando o conteúdo abaixo no arquivo entnfe.txt
NFE.AssinarNFe("C:\ACBRNFE2\RETORNO\51160407407005000182550010000037361000037361-nfe.XML")
O acbr retornará no arquivo sainfe.txt
OK: C:\ACBrNfe2\Retorno\51160407407005000182550010000037361000037361-nfe.xml
Validando o xmlA mesma coisa que o assinar só que o comando validar.
NFE.ValidarNFe("C:\ACBRNFE2\RETORNO\51160407407005000182550010000037361000037361-nfe.XML")
Se não deu nenhum erro até aqui é porque o seu arquivo xml está prontinho para ser enviado para a sefaz.
Enviando arquivo xml para a sefazNFE.EnviarNFe("C:\ACBRNFE2\RETORNO\51160407407005000182550010000047361000047361-nfe.XML", 3736)
Se ocorreu tudo bem vai receber o seguinte do acbr
OK: Lote recebido com sucesso
[ENVIO]
Versao=3.10
TpAmb=1
VerAplic=3.10
CStat=103
XMotivo=Lote recebido com sucesso
CUF=51
NRec=510000328830675
DhRecbto=11/05/2016 14:20:08
TMed=1
Autorizado o uso da NF-e
[RETORNO]
Versao=3.10
TpAmb=1
VerAplic=3.10
NRec=510000328830675
CStat=100
XMotivo=Autorizado o uso da NF-e
CUF=51
[NFE4736]
Versao=3.10
TpAmb=1
VerAplic=3.10
CStat=100
XMotivo=Autorizado o uso da NF-e
CUF=51
ChNFe=51160407407005000182550010000047361000047361
DhRecbto=11/05/2016 14:20:08
NProt=151160027504323
DigVal=HTw6o8oEZBPO4J8zVO5uW4QrE5k=
É só interpretar o retorno.
Imprimindo o danfeNo final disso ainda pode imprimir o danfe
NFE.ImprimirDANFE("C:\ACBRNFE2\RETORNO\51160407407005000182550010000047361000047361-nfe.XML")
Retorno
OK: Danfe Impresso com sucesso
Se quiser pode gerar também o pdf
NFE.ImprimirDANFEPDF("C:\ACBRNFE2\RETORNO\51160407407005000182550010000047361000047361-nfe.XML")
Retorno
OK: Arquivo criado em: C:\ACBrNfe2\PDF\51160407407005000182550010000047361000047361-nfe.pdf
Observe que ele criou o pdf do danfe em C:\ACBrNfe2\PDF porque foi onde foi definido na configuração do acbr.
ps. Aqui tem um erro que preciso corrigir. Os eventos estão acontecendo com o xml temporário do acbr que estão sendo salvos na pasta c:\acbrnfe2\retorno. O correto é buscar o xml na pasta de arquivos já autorizados. Conforme nossa configuração de diretórios esse xml aí foi salvo em C:\ACBrNFE2\NFE\201604\NFe então o comando de impressão ficaria assim:
NFE.ImprimirDANFEPDF("C:\ACBrNFE2\NFE\201604\NFe\51160407407005000182550010000047361000047361-nfe.XML")
Porque isso? Pode ser que o acbr por algum motivo não consiga atualizar o arquivo xml que está no temporário e na hora de imprimir não tem a autorização da sefaz e vai dar a tarja no danfe de "NF-e não autorizada pela SEFAZ", então imprimir sempre o arquivo da pasta onde os xmls estão autorizados.
Consultar uma NFeO evento de consultar uma NFe retornará as informações referentes aquele nfe no momento da consulta.
Alguns programadores usam fazer a consulta da nota assim que a enviam para terem certeza de que a nfe foi autorizada pela sefaz. Quando você envia a nfe e a sefaz autoriza, ela passa a ter um status (CSTAT) 100 que é de autorizada.
É comum porém ao transmitir a nfe para a sefaz dar erro de comunicação e você não conseguir obter o status da nfe. No seu banco de dados vai ficar sem status e na sefaz ela vai estar autorizada CSTAT=100, daí o cliente faz o que? envia a nota de novo. Vai haver um retorno duplicidade porque a nota já está autorizada lá na sefaz.
Bom por qualquer motivo que precisar consultar uma NFe o comando é esse:
NFE.ConsultarNFe(cXML)
Na consulta temos duas situações. Se você quer que na consulta o acbr já atualize a nota, que seria o caso em que não obteve resposta quando enviou a nfe, você terá que enviar o caminho completo:
NFE.ConsultarNFe("C:\ACBRNFE2\NFE\201604\NFE\51160407407005000182550010000047361000047361-nfe.XML")
Dessa forma o acbr vai consultar a nota e atualizar o xml que vocÊ está enviando.
Caso precise só consultar a nfe sem atualizar nada basta enviar a chave da nfe.
NFE.ConsultarNFe("51160407407005000182550010000047361000047361")
Caso a nfe tenha sido transmitida e autorizada o retorno será
OK: Autorizado o uso da NF-e
[CONSULTA]
Versao=3.10
TpAmb=1
VerAplic=3.10
CStat=100
XMotivo=Autorizado o uso da NF-e
CUF=51
ChNFe=51160407407005000182550010000047361000047361
DhRecbto=11/05/2016 14:20:08
NProt=151160027504323
DigVal=HTw6o8oEZBPO4J8zVO5uW4QrE5k=
E por último para
Inutilizar NFeComo eu já disse para inutilizar uma nfe não é necessário enviar xml ou chave de xml para inutilizar uma nfe, porque? porque não foi enviado ainda esse xml para a SEFAZ, então eles não querem nem saber do xml, somente do evento de inutilização. Esse procedimento como o de cancelamento é feito a nível de estado. Daí o fuso horário será o fuso horário do estado. Mato Grosso mesmo trabalha com o fuso horário de Manaus.
Comando para inutilização da nfe.
NFE.InutilizarNFE("07407005000182","NUMERO DE NOTA FISCAL NAO UTILIZADO",2016,55,1,003735,003735)
Veja o retorno
ERRO: Rejeicao: Um numero da faixa ja foi utilizadoCNPJ do Emitente: 07407005000182 Faixa Inicial: 3735 Faixa Final: 3735
Houve uma rejeição. Está me informando que já existe uma nfe utilizada no número que eu informei.
Tudo isso terá que ser tratado no seu aplicativo.
Eu acho que deu uma boa noção do que é e de como trabalhar com a NFE.
Vou anexar as rotinas que uso e você terá que estudá-las e adapta-las ao seu sistema.
Espero que seja útil.
Um abraço a todos
Rubens
Arquivo com rotinas de criação e outros eventos
Arquivo com rotinas de comunicação com o acbr
- NFE.PRG
- (16.36 KiB) Baixado 928 vezes