Jump to content
Fivewin Brasil

Protocolo autorização da NFe


crisvam

Recommended Posts

Colegas, bom dia.

não sei se alguém tem esse problema, vou expor e se alguem tem uma solução, por favor, nos auxilie

1 - as vezes ao enviar uma nota não é possível gravar o protocolo de autorização no meu sistema

2 - Então tenho que entrar no site da sefaz e copiar para o meu sistema, funciona, mas;

3 - Será que existe uma maneira de faze isso através de uma rotina em fivewin?

4 - Por exemplo digitar a chave de acesso da nota, entrar via url, pegar o protocolo e gravar no meu sistema

 

Agradeço a todos a atenção

 

Link to comment
Share on other sites

Um PTista vai te ajudar. Porquê esse PTista, não mistura FiveWin the best, com política.  

   REDEFINE GET aGet[1] VAR NFINICIAL ID 20 PICTURE "@K 999999" OF oDlgPesq ;
      UPDATE FONT oFnt COLORS CLR_BLACK, CLR_WHITE                    ;
      VALID !EMPTY( NFINICIAL ) .AND. NAO_PERDE_FOCO()
	   REDEFINE GET aGet[2] VAR NFFINAL   ID 21 PICTURE "@K 999999" OF oDlgPesq ;
      UPDATE FONT oFnt COLORS CLR_BLACK, CLR_WHITE                    ;
      VALID VOLTA_GET() .AND. !EMPTY( NFFINAL   ) .AND. ( NFINICIAL <= NFFINAL )
	   REDEFINE BUTTONBMP oProcessar ID 301 OF oDlgPesq                      ;
      PROMPT OemToAnsi( "&Manuten‡Æo da Nf-e" )                    ;
      ACTION( GERA_MANUTENCAO(), XFOCUS( aGet[1] ) )
	   oProcessar:cToolTip := OemToAnsi( "Manuten‡Æo das Notas Fiscais Baixe o Arquivo XML da Nfe" )
	//
	FUNCTION GERA_MANUTENCAO()
	   MEMVAR NFINICIAL, NFFINAL
	   bAction = { | oMeter, oText, oDlg, lEnd | ;
      MANUTENCAO_NFE( oMeter, oText, oDlg, @lEnd ) }
	   MsgMeter( bAction, "Atualizando, Aguarde! ", " Aguarde Por Favor!" )
	RETURN NIL
	FUNCTION MANUTENCAO_NFE( oMeter, oText, oDlg, lEnd )
	   LOCAL WMOTIVO := "ARQUIVO *.XML MAL FORMADO NA PASTA DO PLENO"
	   MEMVAR NFINICIAL, NFFINAL
	   PUBLIC lNovaDll
	   IF ! IsInternet() // MODIFIQUEI EM: 12/11/2015 - Joao
	      MsgStop( OemToAnsi( "ATEN€ÇO USUµRIO:                      " ) + CRLF + ;
               OemToAnsi( "PERDA DE CONEXÇO COM A INTERNET...    " ) + CRLF + ;
               OemToAnsi( "FALHA NA CONEXÇO COM A SEFAZ ESTADUAL." ) + CRLF + ;
               OemToAnsi( "VERIFIQUE SUA CONEXÇO DE INTERNET.    " ),      ;
               OemToAnsi( "PERDA DE CONEXÇO COM A INTERNET...    " ) )
   ENDIF
	   SELECT CADNFE
	   IF CADPARAM->TPAMB = [1]  // em producao
      SET ORDER TO 03
   ELSE
      SET ORDER TO 01
   ENDIF
	   SEEK NFINICIAL
	   IF ! FOUND()
	      MsgStop( OemToAnsi( "ATEN€ÇO USUµRIO:                         " ) + CRLF + ;
               OemToAnsi( "NOTA FISCAL INICIAL, NÇO LOCALIZADA NO   " ) + CRLF + ;
               OemToAnsi( "BANCO DE DADOS DAS NOTAS FISCAIS DO PLENO" ) + CRLF + ;
               OemToAnsi( "RETORNE E DIGITE UMA NOTA FISCAL VµLIDA, " ) + CRLF + ;
               OemToAnsi( "OU REINDEXE OS BANCOS DE DADOS DO PLENO. " ) + CRLF + ;
               OemToAnsi( "TECLE <ENTER> PARA RETORNAR...           " ),      ;
               OemToAnsi( "NOTA FISCAL INICIAL, NÇO LOCALIZADA...   " ) )
	      RETURN NIL
	   ENDIF
	   oMeter:nTotal := RecCount()
	   oMeter:Refresh()
	   oText:SetText( "Aguarde, Conectando a SEFAZ...  " )
	   oNFEUtil := tVoNFeUtil2G():New( CADPARAM->UF, val( cTpAmb ), cCertificado, wProxy, wUsuario, wSenha, cLicenca, .T. )
	   oNfe := TVoNFe2G():New()
	   wContador := 0
	   WHILE ! EOF() .AND. NFECOD <= NFFINAL
   
      SYSREFRESH()
	      cChaveAcesso := ALLTRIM( CADNFE->CHAVEACES )
	      cFileXmlAssinado := "remessa\enviadas\" + Alltrim( CADNFE->CHAVEACES ) + "nfe.xml"
	      cFileXmlProtocolo := "remessa\protocolos\" + Alltrim( CADNFE->CHAVEACES ) + "nfe.xml"
	      IF FILE( cFileXmlProtocolo )
	         cArqProt  = MemoRead( cFileXmlProtocolo )
	         IF AT( "<nProt>" , cArqProt ) > 0
 
            wpos := AT( "<nProt>", cArqProt ) + 7
            wProtocolo := SUBSTR( cArqProt, wPos, 15  )
    
            IF LEN( ALLTRIM( wProtocolo ) ) = 15
	               WPROTODATA := CTOD( "  /  /  " )
                   
               IF AT( "<dhRecbto>" , cArqProt ) > 0
	                  wPosTmpIni := AT( "<dhRecbto>", cArqProt )
                  wPosTmpFim := AT( "</dhRecbto>", cArqProt )
                  wTmpDtProt := ALLTRIM( SUBS( cArqProt , wPosTmpIni + 10 , ( wPosTmpFim - (wPosTmpIni + 10 ) ) ) )
                  WPROTODATA := CTOD( SUBS( wTmpDtProt,9,2 ) + "/" + SUBS( wTmpDtProt,6,2 ) + "/" + SUBS( wTmpDtProt,1,4 ) )
	               ENDIF
	               RLOCK()
	               IF ( STATUS = "   " .OR. STATUS = "GER" .OR. STATUS = "ENV" )
	                  REPL STATUS WITH "APR"
	               ENDIF
	               REPL PROTOCOLO WITH subs( wProtocolo, 1, 15 )   // alterado em 28/10/2015 - Paulo
               REPL PROTODATA WITH WPROTODATA
	               WMOTIVO := "Autorizado o Uso da NF-e. Imprima a(s) NFe(s) "   + ;
                          "Para Finalizar o Processo. O Arquivo *.Xml, Foi " + ;
                          "Baixado Com Sucesso.."
               
               COMMIT
               UNLOCK
	               SKIP
            
               FCLOSE( cArqProt )
	               wContador = wContador + 1
	               oText:SetText( "Atualizando Registro:  "        +             ;
                  Alltrim( STR( wContador, 6, 0 ) ) + "  de:  " + ;
                  Alltrim( STR( Recc(), 6, 0 ) )  + ", Aguarde..." )
            
               oMeter:Set( RecNo() )
               
               LOOP
	            ENDIF
              
         ENDIF
	      ENDIF
	      IF FILE( cFileXmlAssinado ) .AND. ;
            ( STATUS = "ENV" .OR. STATUS = "APR" .OR. STATUS = "IMP" .OR. STATUS = "CAN" )   // alterado em 13/05/2015
	         wContador = wContador + 1
	         cArq  = MemoRead( cFileXmlAssinado )
	         wIni_Velho := '<?xml version="1.0" encoding="UTF-8"?><NFe xmlns='
	         IF lNovaDll3
	            DO CASE
            CASE AT( 'versao="1.10"' , cArq ) # 0
               wIni_Novo := '<?xml version="1.0" encoding="UTF-8"?><nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.10"><NFe xmlns='
            CASE AT( 'versao="2.00"' , cArq ) # 0
               wIni_Novo := '<?xml version="1.0" encoding="UTF-8"?><nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><NFe xmlns='
            CASE AT( 'versao="3.10"' , cArq ) # 0
               wIni_Novo := '<?xml version="1.0" encoding="UTF-8"?><nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10"><NFe xmlns='
               OTHE
               wIni_Novo := '<?xml version="1.0" encoding="UTF-8"?><nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="4.00"><NFe xmlns='  // alterado em 11/02/2018
            ENDCASE
	         ELSE
	            wIni_Novo := '<?xml version="1.0" encoding="UTF-8"?><nfeProc xmlns="http://www.portalfiscal.inf.br/nfe" versao="2.00"><NFe xmlns='
	         ENDIF
	         cArq := StrTran( cArq , wIni_Velho , wIni_Novo )
	         wPosTmpIni := AT( "<nNF>", cArq )
         wPosTmpFim := AT( "</nNF>", cArq )
         WNFECOD := VAL( SUBS( cArq , wPosTmpIni + 5 , ( wPosTmpFim - (wPosTmpIni + 5 ) ) ) )
          
         wPosTmpIni := AT( "<DigestValue>", cArq )
         wPosTmpFim := AT( "</DigestValue>", cArq )
         WDIGVAL := SUBS( cArq , wPosTmpIni + 13 , ( wPosTmpFim - (wPosTmpIni + 13 ) ) )
	         nRet := oNfeUtil:ConsultaNf( cChaveAcesso, cFileXmlAssinado, .F. )   // alterado em 12/03/2015 - Paulo
	         // 5102
         // nret := 5014  // teste de erro.
	         WPROTOCOLO := oNFeUtil:Protocolo
	         WCHAVEACES := ALLTRIM( CADNFE->CHAVEACES )
         WPROTODATA := oNFeUtil:Recebimento
	         IF CADNFE->STATUS = "CAN"
	            WSTATUS := "101"
	            WMOTIVO := "Cancelamento de NF-e homologado com sucesso na Sefaz"
	         ELSE
	            WSTATUS = "100"
	            WMOTIVO := "Autorizado o Uso da NF-e. Imprima a(s) NFe(s) "   + ;
               "Para Finalizar o Processo. O Arquivo *.Xml, Foi " + ;
               "Baixado Com Sucesso."
	         ENDIF
	         IF lNovaDll3
            DO CASE
            CASE AT( 'versao="1.10"' , cArq ) # 0
               cArq = cArq + '<protNFe versao="1.10" xmlns="http://www.portalfiscal.inf.br/nfe">'
            CASE AT( 'versao="2.00"' , cArq ) # 0
               cArq = cArq + '<protNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">'
            CASE AT( 'versao="3.10"' , cArq ) # 0
               cArq = cArq + '<protNFe versao="3.10" xmlns="http://www.portalfiscal.inf.br/nfe">'
               OTHE
               cArq = cArq + '<protNFe versao="4.00" xmlns="http://www.portalfiscal.inf.br/nfe">'  // alterado em 11/02/2018
            ENDCASE
         ELSE
            cArq = cArq + '<protNFe versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">'
         ENDIF
	         cArq = cArq + '<infProt>'
         cArq = cArq + '<tpAmb>1</tpAmb>'
         cArq = cArq + '<verAplic>SP_NFE_PL_005e</verAplic>'
         cArq = cArq + '<chNFe>' + WCHAVEACES + '</chNFe>'
         cArq = cArq + '<dhRecbto>' + WPROTODATA + '</dhRecbto>'
         cArq = cArq + '<nProt>' + WPROTOCOLO + '</nProt>'
         cArq = cArq + '<digVal>' + WDIGVAL + '</digVal>'
         cArq = cArq + '<cStat>' + WSTATUS + '</cStat>'
         cArq = cArq + '<xMotivo>' + WMOTIVO + '</xMotivo>'
         cArq = cArq + '</infProt>'
         cArq = cArq + '</protNFe>'
         cArq = cArq + '</nfeProc>'
	         wArq := FCREATE( cFileXmlProtocolo, 0 )
	         cArq = TIRA_ACENTUACAO( cArq )
    
         wtam := len( cArq )
    
         FWRITE( wArq , cArq , wtam )
         FCLOSE( wArq )
	         IF CADNFE->STATUS # "CAN" .AND. ;
               ( nRet = 101 .OR. nRet = 151 .OR. nRet = 420  .OR. nRet = 135 .OR. nRet = 155  )
	            RLOCK()
            REPL STATUS WITH "CAN"
            REPL PROTOCOLO WITH subs( wProtocolo, 1, 15 )
            REPL PROTODATA WITH CTOD( SUBS( WPROTODATA,9,2 ) + "/" + SUBS( WPROTODATA,6,2 ) + "/" + SUBS( WPROTODATA,1,4 ) )
	            COMMIT
            UNLOCK
	         ELSE
	            RLOCK()
	            IF ( STATUS = "   " .OR. STATUS = "GER" .OR. STATUS = "ENV" )
               REPL STATUS WITH "APR"
            ENDIF
	            REPL PROTOCOLO WITH subs( wProtocolo, 1, 15 )   // alterado em 28/10/2015 - Paulo
            REPL PROTODATA WITH CTOD( SUBS( WPROTODATA,9,2 ) + "/" + SUBS( WPROTODATA,6,2 ) + "/" + SUBS( WPROTODATA,1,4 ) )
	            COMMIT
            UNLOCK
	            lConsulta := .F.
	            oBmp4:Disable()
            oBmp4:Refresh()
	         ENDIF
	      ELSE // Mudei em: 28/10/2015 Se nao existir o .XML em \remessa\enviadas volta pra gerar
	         MsgInfo( OemToAnsi( "ARQUIVO *.XML COM FORMATO INVµLIDO EM:   " ) + CRLF + ;
                  OemToAnsi( cDirPleno + "\REMESSA\ENVIADAS\           " ) + CRLF + ;
                  OemToAnsi( "OU ARQUIVO: *.XML INEXISTENTE NA PASTA:  " ) + CRLF + ;
                  OemToAnsi( cDirPleno + "\REMESSA\ENVIADAS\           " ) + CRLF + ;
                  OemToAnsi( "IMPOSSÖVEL FAZER A MANUTEN€ÇO DESTA NF-e." ) + CRLF + ;
                  OemToAnsi( "NF-E GERADA NA SEFAZ? OU NO SVC-AN?      " ) + CRLF + ;
                  OemToAnsi( "INFORME ESTE PROBLEMA AO SUPORTE, PARA SE" ) + CRLF + ;
                  OemToAnsi( "TENTAR ACHAR UMA SOLU€ÇO PARA O PROBLEMA." ) + CRLF + ;
                  OemToAnsi( "TECLE <ENTER> PARA CONTINUAR...          " ),      ;
                  OemToAnsi( "ARQUIVO .XML COM PROBLEMAS NO FORMATO... " ) )
	         nRet := oNfeUtil:ConsultaNf( cChaveAcesso, cFileXmlAssinado, .F. )   // alterado em 12/03/2015 - Paulo
	         // Gerou erro: 5102 - SEFAZ MINAS - ERRO DURANTE O PROCESSAMENTO FICA BLOQUEADO NA SEFAZ.
	         IF nRet = 5014 .OR. nRet = 5102 .OR. nRet = 6214
	            WMOTIVO := "FAZER O DOWNLOAD DA NOTA FISCAL ELETRONICA NO PORTAL DA SEFAZ NACIONAL. ENVIE O .XML PARA O SUPORTE BOTAO: <Portal da Nf-e> OCORREU UM ERRO DURANTE O PROCESSAMENTO. Erro: 5102?"
	         ELSE  // NAO ACHOU O ARQUIVO .XML EM: \PLENO\REMESSA\ENVIADAS
	            WMOTIVO := "FAVOR GERAR A NOTA NOVAMENTE PARA CRIAR O ARQUIVO .XML DA NOTA FISCAL NA PASTA DO PLENO, PARA SE PODER CONSULTAR O LOTE NORMALMENTE."
	            RLOCK()
	            REPL STATUS WITH "   "  // VOLTA PARA GERAR DE NOVO - Joao
	            COMMIT
            UNLOCK
	         ENDIF
	      ENDIF
      
      SKIP
	      oText:SetText( "Atualizando Registro:  "        +             ;
         Alltrim( STR( wContador, 6, 0 ) ) + "  de:  " + ;
         Alltrim( STR( Recc(), 6, 0 ) )  + ", Aguarde..." )
	      oMeter:Set( RecNo() )
	   ENDDO
	   IF ! EMPTY( WMOTIVO )
	      MsgInfo( WMOTIVO, WMOTIVO )
	   ENDIF
	RETURN NIL

Link to comment
Share on other sites

 

Rochinha, grato pela atenção. 

 

Os meus também fazem isso, mas reclamam de ter que entrar no site da sefaz, copiar o protocolo e colar

 

Rochinha, grato pela atenção. 

 

Os meus também fazem isso, mas reclamam de ter que entrar no site da sefaz, copiar o protocolo e colar

Mas vc tem a chave e o arquivo? pq na consulta pelo ACBR, ele é gravado no xml. Espero em breve postar algumas pesquisas e testes com as DLL's do ACBR, e isso irá facilitar esta consulta sem a necessidade de ter instalado o monitor.

Link to comment
Share on other sites

Obrigado a todos, os colegas, pelas respostas, mas o que preciso é só pegar o protocolo de autorização da sefaz, com uma rotina de dentro do sistema, sem entrar manualmente no site da sefaz, digitar uma chace, dizer que não sou robô, continuar, clicar sobre o protocolo e copiar e depois colar no meu sistema.

Busco uma forma de com a chave da nota pegar automaticamente o protocolo e copiar no meu arquivo tudo automaticamente

Link to comment
Share on other sites

/******************************************************************************/
METHOD ConsultaNFe( cAmb, cChave ) CLASS hbNFe
/*****************************************************************************/

    LOCAL aRETORNO            := HASH()
    LOCAL cServ               := 'CONSULTAR'
    LOCAL cVersao             := ::Ini_versaoSistema
    LOCAL cStatus             := "" 
    LOCAL cMotivo             := "" 
    LOCAL cProt               := ""
    LOCAL cDataHoraAutorizada := "" 

    aRETORNO['STATUS']    := .F.
    aRETORNO['MSG']       := ''
    aRETORNO['PROTOCOLO'] := ''
    aRetorno['RETORNO'  ] := ''
    aRetorno['DATAAUTO' ] := ''

    IF EMPTY(cChave)
        aRETORNO['MSG'] := 'Favor informar a Chave'
        RETURN aRETORNO
    ENDIF

    IF EMPTY(cAmb)
        aRETORNO['MSG'] := 'Favor informar o Ambiente'
        RETURN aRETORNO
    ENDIF

    ::Ide_nNfe:= cChave

    ::cXML := ''
    ::cXML += '<consSitNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="' + cVersao + '">'
    ::cXML +=      '<tpAmb>'  + cAmb    + '</tpAmb>'
    ::cXML +=   '<xServ>'  + cServ   + '</xServ>'
    ::cXML +=   '<chNFe>'  + cChave  + '</chNFe>'
    ::cXML += '</consSitNFe>'

   MEMOWRIT( ::Ini_pastaXML +"\Consultas\Envio" + '\NFe_Cons' + cChave +'.xml' , ::cXML , .F.)

   aRETORNO := ::ComunicaWebService( 2 )

    IF ! aRETORNO['STATUS']
        RETURN(aRETORNO)
    ENDIF

    cStatus:= cMotivo:= cProt:= ""

    * le o arquivo de retorno
    ::XML_GetNode(aRETORNO['XML'], "cStat"  , @cStatus )
    ::XML_GetNode(aRETORNO['XML'], "xMotivo", @cMotivo )
    ::XML_GetNode(aRETORNO['XML'], "nProt"  , @cProt )
    ::XML_GetNode(aRETORNO['XML'], "dhRecbto", @cDataHoraAutorizada )


    IF Empty(cStatus) .OR. Empty(cMotivo)
        aRETORNO['MSG']   := "Erro ao obter retorno do Web Service"
        RETURN(aRETORNO)
    ENDIF

    * Possiveis erros:
    * O processamento do pedido de consulta de status de NF-e pode resultar em uma
    * mensagem de erro ou retornar a situação atual da NF-e consultada.
    * No caso de localização da NF-e retornar o cStat com os valores “100-Autorizado o Uso”,
    * “101-Cancelamento de NF-e Homologado” ou “110-Uso Denegado”.

    IF cStatus == "100" // 100-Autorizado o Uso
        aRETORNO['STATUS']   := .T.
    ELSE
        aRETORNO['STATUS']   := .F.
    ENDIF

   aRETORNO['PROTOCOLO']:= cProt
   aRETORNO['RETORNO'  ]:= cStatus
   aRETORNO['MSG']      := cStatus +" - "+ cMotivo
   aRetorno['DATAAUTO' ]:= cDataHoraAutorizada

RETURN(aRETORNO)
 

Link to comment
Share on other sites

 

Obrigado a todos, os colegas, pelas respostas, mas o que preciso é só pegar o protocolo de autorização da sefaz, com uma rotina de dentro do sistema, sem entrar manualmente no site da sefaz, digitar uma chace, dizer que não sou robô, continuar, clicar sobre o protocolo e copiar e depois colar no meu sistema.

Busco uma forma de com a chave da nota pegar automaticamente o protocolo e copiar no meu arquivo tudo automaticamente

Crisvam, boa noite. Todas alternativas foram automáticas, ou seja, vc de posse da chave no seu sistema e melhor ainda do xml, vc consegue estas informações. Exceto se vc não armazena a chave de acesso e  o xml, para poder reaver estas informações.

[]s,

 

[]s,

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...