Skip to Content

Introdução

Entre as principais dificuldades decorrentes da implantação da NF-e pode-se citar a obtenção do arquivo XML como uma das tarefas que mais atrapalham o processo de recebimento.  O arquivamento dos arquivos XML válidos e com o protocolo de autorização é um requerimento legal e observamos diversas dificuldades entre clientes e fornecedores: falta do envio do arquivo, envio do arquivo XML sem o respectivo protocolo de autorização, envio de arquivos corrompidos, arquivos com erro na assinatura digital, entre outros.

Diante deste cenário sabemos que a SEFAZ centraliza as informações de todos os emissores e destinatários de NF-e então por quê não disponibilizar o download de todos os XMLs emitidos contra um CNPJ? Por diversos motivos, entre eles a infraestrutura necessária, pois o tráfego de arquivos iria consumir mais recursos tecnológicos.

Este desejo compartilhado por diversas empresas recentemente foi atendido por meio da Nota Técnica 2012/002 – Manifestação do Destinatário e que permite o download da NF-e via webservices diretamente da SEFAZ. Esta Nota Técnica pode ser visualizada no seguinte endereço: http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=bUBJ/PmtKQo=.

Contexto


A SEFAZ disponibilizou o webservice que permite do download do XML da NF-e por parte do destinatário, porém exigiu que haja uma manifestação do destinatário como premissa para o download. Dessa forma é necessário enviar um evento de “Ciência da Operação” para ter acesso ao arquivo.

Após o download o arquivo podemos enviar novos eventos como a “Confirmação da Operação”, o “Desconhecimento da Operação” ou “Operação não realizada”. Esta última quando o recebimento da mercadoria foi recusado e neste caso é necessário enviar uma justificativa.

Solução Standard SAP


Ainda não encontrei uma solução standard pelo produto  SAP GRC 1.0. Procurei por apresentações e no roadmap e só encontrei a nota 1721007 que dispõe sobre o evento de confirmação.

Primeiras Impressões


A Nota Técnica adverte que o uso indevido seria bloqueado devido ao alto consumo do WebService com o código ““656–Rejeição: Consumo Indevido”.”. Dessa forma resolvi fazer um pequeno teste.

Este teste será mostrado a seguir.


Como baixar o XML via WebService


O teste foi feito em ambiente de homologação utilizando um report ABAP e o PI para transmissão. Nenhuma das interfaces do produto SAP foi utilizada para simplificar o teste, dispensando o uso de Integration Processes e criação de mapeamentos adicionais.


1- Criando uma interface do tipo SOAP-Envelope no PI


O primeiro passo é criar uma interface do tipo SOAP-Envelope.  O PI implementa o protocolo SOAP por standard com todas as suas especificações, porém não permite mudar o header, então vamos importar a interface para criar tipos de mensagens genéricas que iremos popular diretamente no ABAP.

Baixe o arquivo disponível em http://www.w3.org/2003/05/soap-envelope/  e salve como envelope.xsd

Importe este arquivo no Integration Repository em um namespace de sua preferência como External Definition.

Em seguida crie duas Message Interfaces com o nome MI_RecepcaoEvento e outra com o nome MI_DownloadNF.

Atribua o tipo Envelope que foi importado tanto para a mensagem Inbound quanto para a mensagem Outbound.

Salve e ative a change list.


2-Configurar os canais de comunicação


Primeiro crie os canais de comunicação para a SEFAZ Ambiente Nacional, caso ainda não possua.

Estes são iguais aos da NF-e com autenticação por certificado digital e com as URLS:


https://hom.nfe.fazenda.gov.br/NfeDownloadNF/NfeDownloadNF.asmx

https://hom.nfe.fazenda.gov.br/RecepcaoEvento/RecepcaoEvento.asmx

Em seguida crie 2 Receiver Determinations entregando as mensagens do tipo MI_DownloadNF e MI_RecepcaoEvento para o Parceiro criado


O próximo passo é criar 2 Interface Determinations para dizer que a SEFAZ irá receber a mesma interface. Você pode criar mapeamentos, mas este não é nosso objetivo neste teste, uma vez que iremos mandar todos os dados diretamente em ABAP.

A última etapa é a criação dos Receiver Agreements que fazem a ligação entre a interface de destino e os webservices propriamente ditos.

3 – Criar os  ABAP Proxies para chamada das interfaces


Utilize um usuário desenvolvedor na instância ABAP e chame a transação SPROXY.

Expanda o namespace escolhido na guia Integration Repository até abrir as Interfaces de Serviço. Clique com o botão direito sobre cada uma e vá em “Criar Proxy”. Salve e ative os proxies.

4-Registrando um Evento de Ciência da Operação


Crie um report ABAP com o nome de sua preferência.

Usaremos um conjunto simples de variáveis, descritas a seguir:


Em seguida definiremos um conjunto de subprogramas,  o primeiro define o cabeçalho da mensagem SOAP, note que o valor para o parâmetro cUF está “hardcode”  e deve ser substituído pelo código da UF Correspondente e em seguida a string deve ser convertida para o formato XSTRING.

O próximo subprograma monta um XML  de acordo com as especificações. Novamente todos os dados estão “hardcode” para ilustrar melhor a estrutura do arquivo. Note que o campo tpEvento contém 210210, que é o código do evento “Ciência da Operação”.


O próximo subprograma assina o XML em ABAP utilizando o módulo de função standard do produto SAP NF-e.


Em seguida basta completar a mensagem XML e transmitir. Note que o tipo de dados do objeto Proxy é a classe gerada pela transação SPROXY. Essa classe já contém toda a implementação para entregar a mensagem ao PI.

 

O resultado pode ser visto na transação SXI_MONITOR. Note que o evento pode ser rejeitado por quaisquer motivos e isto deve ser tratado na aplicação.


  

4-Fazendo o download do XML


A etapa final de nosso estudo envolve o download do XML que confirmamos a operação. Maisuma vez iremos gerar o cabeçalho da mensagem SOAP utilizando um subprograma.

Em seguida montamos a mensagem XML de acordo com os manuais da SEFAZ. A grande vantagem desta mensagem de download é que ela não necessita assinatura digital.

A última etapa é fazer a chamada ao WebService e em seguida o download para a máquina local.

Um detalhe importante é que o XML retornado não é exatamente do formato esperado,  mas contém mais tags que o necessário, no que se refere à conclusão da transação, então utilizamos a instrução FIND REGEX para extrair a tag procNFe por meio de expressões regulares e em seguida  baixar para a máquina local.

Conclusão


Este programa é válido para fins de teste e não pode ser comparado a uma solução como o NFE 10.0 Entradas mas pode ser usado para ilustrar e testar o processo, que é novidade para todos.

Uma solução de qualidade deve conter somente as chamadas com objetos do dicionário de dados e deixar o trabalho de montagem do XML e protocolo SOAP para o PI, além disso é necessário implementar o tratamento das exceções e também rejeições e outras mensagens de erro que podem ser retornadas por parte da SEFAZ.

Espero que possa servir de apoio para o desenvolvimento de suas próprias soluções enquanto a SAP não libera a solução Standard


Até a próxima,


Fabio Purcino Aragão

To report this post you need to login first.

7 Comments

You must be Logged on to comment or reply to a post.

    1. Former Member Post author

      Olá Saulo., Obrigado pelo feedback. Esta variável contém o XML assinado em formato string para que possamos concatenar os dados do cabeçalho.

       

      A função /XNFE/CORE_SIGNATURE_CREATE retorna os dados em uma string binária (XSTRING), então eu converti a mesma para string usando o módulo de função /XNFE/XML_XSTRING2STRING para poder adicionar os dados, uma vez que se eu adicionasse antes, a assinatura não ia bater e a SEFAZ ia rejeitar o XML.

      (0) 

Leave a Reply