Jump to content
Fivewin Brasil

Método ultNSU (NfeDistribuicaoDFe) para download das NF-e contra o CNPJ


Wellington Vieira

Recommended Posts

Boa noite,

Alguém teria uma solução para a utilização do método (NfeDistribuicaoDFe) de pegar o ultNSU e utilizá-lo para pesquisar as NF-e emitidas contra o CNPJ. O meu problema é que mais de um software utiliza este método ( NfeDistribuicaoDFe) ou seja o meu ERP e de CONTADORES, e sempre me retorna ou "656-USO INDEVIDO". Este método está no MOC - Manual de Orientação ao Contribuinte - MOC - versão 7.0 - NF-e e NFC-e que começa na página 90

Já sei que o problema é que o meus software utiliza este método e os software de contadores também utilizam, sendo assim o meu último ultNSU, nunca será igual ao da contabilidade, fazendo assim que sempre retorne "656- USO INDEVIDO". ( Se alguém tiver uma solução para este problema)

Agradeço qualquer ajuda.

Meu código detalhado abaixo e com as descrições dos passos.
 

function consulta_nfe_contra(objconsultatipo)

		 wonfeNormalConsumidor = "N"
		 
		 
		 // 1º - Aqui ele abre um select para pegar as configurações da NF-e para gerar o arquivo
		 // CNPj-dist-dfe.xml
		 
		 if zsequencianotafiscal = .f.
		    cwQuery := "select * from adloja where seqloja = " + alltrim(str(zseqloja))
		 else
		    cwQuery := "select * from adloja where seqloja = 1"
		 endif
         cwQuery += " order by seqloja asc;"
         owQuery := oServer:Query(cwQuery)
         xfatambiemtedanotafiscaleletronica = owquery:Fieldget(owquery:Fieldpos('fatambiemtedanotafiscaleletronica'))
         if wonfeNormalConsumidor = "N"
		    xfattipodeemissaonotafiscaleletronica = owquery:Fieldget(owquery:Fieldpos('fattipodeemissaonotafiscaleletronica'))
		 elseif wonfeNormalConsumidor = "C"
		    xfattipodeemissaonotafiscaleletronica = owquery:Fieldget(owquery:Fieldpos('fattipodeemissaonotafiscaleletronicanfce'))
			if xfattipodeemissaonotafiscaleletronica = 8
			   xfattipodeemissaonotafiscaleletronica = 9
			endif
		 endif
         if xfattipodeemissaonotafiscaleletronica = 1
            ntitle = "Normal | " + "SEFAZ | " + zuf
         elseif xfattipodeemissaonotafiscaleletronica = 2
           ntitle = "FS-IA | Contigencia com impressao do DANFE em formulario de seguranca"
         elseif xfattipodeemissaonotafiscaleletronica = 3
           ntitle = "SCAN | Sistema de contigencia em ambiente Nacional"
         elseif xfattipodeemissaonotafiscaleletronica = 4
           ntitle = "DPEC | Declaracao previa da emissao em contigencia"
         elseif xfattipodeemissaonotafiscaleletronica = 5
           ntitle = "FS-DA | Contigencia com impressao do DANFE em formulario de seguranca"
         elseif xfattipodeemissaonotafiscaleletronica = 6
           ntitle = "SVC-AN | Sefaz virtual de contigencia do AN"
         elseif xfattipodeemissaonotafiscaleletronica = 7
           ntitle = "SVC-RS | Sefaz virtual de contigencia do RS"
         elseif xfattipodeemissaonotafiscaleletronica = 9
           ntitle = "Contigencia off-line da NFC-e"
         endif
         otitlegerencianfe = otitlegerencianfe + ntitle

         if wonfeNormalConsumidor = "N"
		    xfatversaodoxmldanotafiscal    = owquery:Fieldget(owquery:Fieldpos('fatversaodoxmldanotafiscal'))
            xfatmodelonotafiscalnormal     = owquery:Fieldget(owquery:Fieldpos('fatmodelonotafiscalnormal'))
            xfatserienotafiscalnormal      = owquery:Fieldget(owquery:Fieldpos('fatserienotafiscalnormal'))
            xfatserienotafiscalcontigencia = owquery:Fieldget(owquery:Fieldpos('fatserienotafiscalcontigencia'))
            xfatdatahoraentradacontigencia = owquery:Fieldget(owquery:Fieldpos('fatdatahoraentradacontigencia'))
            xfatmotivodacontigencia        = owquery:Fieldget(owquery:Fieldpos('fatmotivodacontigencia'))
         elseif wonfeNormalConsumidor = "C"
		    xfatversaodoxmldanotafiscal    = owquery:Fieldget(owquery:Fieldpos('fatversaodoxmldanotafiscalnfce'))
            xfatmodelonotafiscalnormal     = owquery:Fieldget(owquery:Fieldpos('fatmodelonotafiscalnormalnfce'))
            xfatserienotafiscalnormal      = owquery:Fieldget(owquery:Fieldpos('fatserienotafiscalnormalnfce'))
            xfatserienotafiscalcontigencia = owquery:Fieldget(owquery:Fieldpos('fatserienotafiscalcontigencia'))
            xfatdatahoraentradacontigencia = owquery:Fieldget(owquery:Fieldpos('fatdatahoraentradacontigencianfce'))
            xfatmotivodacontigencia        = owquery:Fieldget(owquery:Fieldpos('fatmotivodacontigencianfce'))
		 endif
         
		 znfesincrono  = owquery:Fieldget(owquery:Fieldpos('fatnfesincrono'))
         znfcesincrono = owquery:Fieldget(owquery:Fieldpos('fatnfcesincrono'))
		 
		 xfatpastaxmlenviadosindidualmente = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmlenviadosindidualmente')))
         xfatpastaxmlenviadoslotes         = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmlenviadoslotes')))
         xfatpastaxmlretornodowebservice   = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmlretornodowebservice')))
         xfatpastaxmlautorizados           = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmlautorizados')))
         xfatpastaxmltemporarios           = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmltemporarios')))
         xfatpastaxmlbackup                = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmlbackup')))
         xfatpastaxmlavalidar              = reverso(owquery:Fieldget(owquery:Fieldpos('fatpastaxmlavalidar')))
         owQuery:destroy()
		 // 1º - Termina o selct.
		 
		 // 2º - A variável cDirXML_cons, direciona para qual pasta será criado o arquivo CNPJ-con-dist-dfe.xml
		 cDirXML_cons = reverso(alltrim(xfatpastaxmlenviadosindidualmente)) + "\" + alltrim(znumerodocumentonacional) + "-con-dist-dfe.xml"
		 // 3º - A variável B02_CUF, pega o estado para o arquivo CNPJ-con-dist-dfe.xml
		 B02_cUF = ver_estado(zuf)
		 
		 
		 // 4º - Neste select ele pega o ultNSU a ser pesquisado e compara com maxNSU,
		 // para ver se igualou o ultNSU com maxNSU, se sim aguarda 1h e 30mm
		 // para começar a pesquisa novamento
		 if zsequencianotafiscal = .f.
		    cwQuery := "select * from adloja where seqloja = " + alltrim(str(zseqloja))
		 else
		    cwQuery := "select * from adloja where seqloja = 1"
		 endif
         cwQuery += " order by seqloja asc;"
         owQuery := oServer:Query(cwQuery)
		 xfatnumeronsu    = owquery:Fieldget(owquery:Fieldpos('fatnumeronsu'))
		 if empty(xfatnumeronsu)
		    xfatnumeronsu = 0
		 endif
		 xfatnumeronsumax = owquery:Fieldget(owquery:Fieldpos('fatnumeronsumax'))
		 if empty(xfatnumeronsumax)
		    xfatnumeronsu = 0
		 endif
         owQuery:destroy()
		 // 4º - Termina..........
		 
		 // 5º - Verifica se o ultNSU alcançou o NSUmax e aguarda até 1 hora e meia para prosseguir novas consultas......
		 if xfatnumeronsu > 0
		    if xfatnumeronsumax > 0
			   if xfatnumeronsu >= xfatnumeronsumax
			      msgwsiscom("Colocar aqui msg de espera.","Atenção")
			      return nil
			   endif
			endif
		 endif
		 
		 // 6º - Se o ultNSU ESTIVER ELE COMEÇA ZERADO, SE NÃO É O ultNSU GUARDADO NA BASE
		 // QUE SERÁ PESQUISAO.
		 if empty(xfatnumeronsu)
		    xfatnumeronsu = "000000000000000"
	     else
		    xfatnumeronsu =  replicate("0",15 - len(alltrim(str(xfatnumeronsu)))) + alltrim(str(xfatnumeronsu))
		 endif
		 
		 // 7º - Ele irá criar o o xml CNPj-dist-dfe.xml com os dados acima
		 // que será enviado a SEFAZ/MG para ser pesquisado.
		 lh := 00
         oPrn := TDosPrn():New(cDirXML_cons)
         oPrn:StartPage()
         oPrn:lZeraBuffer:=.T.
		 
		 mlinha = '<?xml version="1.0" encoding="utf-8"?>'
         oPrn:Say(lh,000,mlinha)
         ++lh
         mlinha = '<distDFeInt xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.35">'
         oPrn:Say(lh,000,mlinha)
         ++lh
            mlinha = '<tpAmb>'+alltrim(str(xfatambiemtedanotafiscaleletronica))+'</tpAmb>'
            oPrn:Say(lh,000,mlinha)
            ++lh
            mlinha = '<cUFAutor>'+B02_cUF+'</cUFAutor>'
            oPrn:Say(lh,000,mlinha)
            ++lh
            mlinha = '<CNPJ>'+alltrim(znumerodocumentonacional)+'</CNPJ>'
            oPrn:Say(lh,000,mlinha)
            ++lh
		    
		    if objconsultatipo = "geral"
			   mlinha = '<distNSU>'
               oPrn:Say(lh,000,mlinha)
               ++lh
                  mlinha = '<ultNSU>'+xfatnumeronsu+'</ultNSU>'
                  oPrn:Say(lh,000,mlinha)
                  ++lh
				  
				  
				  //msginfo(xfatnumeronsu)
				  
				  
		       mlinha = '</distNSU>'
               oPrn:Say(lh,000,mlinha)
               ++lh
			endif
		 
		 mlinha = '</distDFeInt>'
         oPrn:Say(lh,000,mlinha)
         ++lh
		 
         oPrn:EndPage()
         oPrn:End()
		 
		 //msginfo(cDirXML_cons)
		 

         // 8º - Pega o CNPJ-dist-dfe.xml, que voltou da SEFAZ em uma pasta para ser analisado..
		 cDirXML = reverso(alltrim(xfatpastaxmlretornodowebservice)) + "\" + alltrim(znumerodocumentonacional) + "-dist-dfe.xml"
         cDirXME = reverso(alltrim(xfatpastaxmlretornodowebservice)) + "\" + alltrim(znumerodocumentonacional) + "-con-dist-dfe.err"
         msn = "N"
         nqte = 0
		 do while nqte < 200000000
            if file(cDirXML)
               msn = "S"
               exit
            endif
            if file(cDirXME)
               if file(cDirXML)
                  msn = "S"
                  exit
               endif
               msn = "N"
               exit
            endif
            ++nqte
         enddo
		 
         _ultNSU  =  "000000000000000"
         _maxNSU  =  "000000000000000"
		 _nmotivo = ""
		 _cStat   = ""
		 _processa_xml = "S"
         if msn = "N"
            if file(cDirXME)
               cInfo = ""
               csource = cDirXME
               nsource:=fopen("&csource",0)
               if ( nsource ) # -1
                  lEof:=.F.
                  nn = 1
                  do while !lEof
                     c :=p_readln_1(nSource,linebuff)
                     if !lEof .and. c#chr(26)
                        if nn = 1
                           cInfo := c
                           ++nn
                        else
                           cInfo+=CRLF+c
                        endif
                     endif
                  enddo
               endif
               fclose(nsource)
		       //msgstop(cInfo,"Atencao")
               ferase(cDirXME)
			   _processa_xml = "N"
            endif
            //return nil
         elseif msn = "S"
		    nmotivo =  abrir_xml(cDirXML,"xMotivo")
            _ultNSU =  abrir_xml(cDirXML,"ultNSU")
            _maxNSU =  abrir_xml(cDirXML,"maxNSU")
			_cStat   = abrir_xml(cDirXML,"cStat")
         endif
		 // 9º - Termina a analise CNPJ-dist-dfe.xml
		 
		 // 10º - Se houve mudanças no maxNSU ele grava na base de dados
		 if val(_maxNSU) > 0
		    cwQuery := "Update adloja set fatnumeronsu = " + alltrim(str(val(_ultNSU)))
		    cwQuery += ",fatnumeronsuMax = " + alltrim(str(val(_maxNSU)))
		    cwQuery += ",datanumeronsu = "   + "'" + substr(dtos(ldate),1,4)+"-"+substr(dtos(ldate),5,2)+"-"+substr(dtos(ldate),7,2) + "'"
		    cwQuery += ",timenumeronsu = "   + "'" + time() + "'"
            if zsequencianotafiscal = .f.
		       cwQuery += " where " + " seqloja = " + alltrim(str(zseqloja))
		    else
		       cwQuery += " where " + " seqloja = 1"
		    endif
		    owQuery := oServer:Query(cwQuery)
            if owQuery:neterr()
               msgStop("Erro na gravação do NSU.","ATENÇÂO")
            endif
            owQuery:destroy()
            oServer:Commit()
		 
		 // 10º - Se houve mudanças no ultNSU ele grava na base de dados
		 elseif val(_ultNSU) > 0
		    cwQuery := "Update adloja set fatnumeronsu = " + alltrim(str(val(_ultNSU)))
		    cwQuery += ",datanumeronsu = "   + "'" + substr(dtos(ldate),1,4)+"-"+substr(dtos(ldate),5,2)+"-"+substr(dtos(ldate),7,2) + "'"
		    cwQuery += ",timenumeronsu = "   + "'" + time() + "'"
            if zsequencianotafiscal = .f.
		       cwQuery += " where " + " seqloja = " + alltrim(str(zseqloja))
		    else
		       cwQuery += " where " + " seqloja = 1"
		    endif
		    owQuery := oServer:Query(cwQuery)
            if owQuery:neterr()
               msgStop("Erro na gravação do NSU.","ATENÇÂO")
            endif
            owQuery:destroy()
            oServer:Commit()
		 endif
		 
		 //msginfo(_cStat)
		 
		 
		 //11º - Verifica o cStat retornado no arquivo CNPJ-dist-dfe.xml
		 
		 // AQUI ENCONTRA-SE O PROBLEMA, ELE SEMPRE RETORNA 656-CONSUMO INDEVIDO..................................
		 // 
		 if alltrim(_cStat) = "138"  // Documento localizado
		    _processa_xml = "S"
		 else
		    if !empty(nmotivo)
		       msgstop(nmotivo)
			endif
            _processa_xml = "N"
		 endif
		 
		 /*
		 if _processa_xml = "S"
             hFile := FOpen( cDirXML  )
             xmlDoc := TXmlDocument():New( hFile )
             if xmlDoc:nStatus != HBXML_STATUS_OK
                 msgstop("Falha no arquivo XML ","ERRO Arquivo XML")
                 return nil
             endif
             xmlIter := TXmlIterator():New( xmlDoc:oRoot )
             xmlNode := xmlIter:Find()
             do while xmlNode != NIL
                cName := xmlNode:cName
                cData := xmlNode:cData
                
				if empty(cName)
                   xmlNode := xmlIter:Next()
                   loop
                endif
				
				msginfo("cName: " + cName )
				if !empty(cData)
				   msginfo("cData: " + cData )
				endif
		 
                xmlNode := xmlIter:Next()
             enddo
             fclose(hFile)
		 endif
		 */
		 
		 
		 //12º - Irá fazer a leitura para apresentar as NF-e emitidas contra o CNPJ.............................
		 cDirlocalretornoxml = reverso(alltrim(xfatpastaxmlretornodowebservice)) + "\dfe\" 
		 
		 asamplzNOTA = {}
		 
         j = 0
         j = adir(cDirlocalretornoxml + "*.xml")
         declare marquivo[j]
         adir(cDirlocalretornoxml + "*.xml", marquivo)
         if j <= 0
            msgwsiscom("Não há arquivos xml emitidos contra.","ATENCAO")
            return nil
         endif
         
		 fwait("  ...Aguarde processando...")
		 
		 for ttqq = 1 to len(marquivo)
		     
             hFile := FOpen( cDirlocalretornoxml + marquivo[ttqq]  )
             xmlDoc := TXmlDocument():New( hFile )
             if xmlDoc:nStatus != HBXML_STATUS_OK
                 msgstop("Falha no arquivo XML ","ERRO Arquivo XML")
                 return nil
             endif
             xmlIter := TXmlIterator():New( xmlDoc:oRoot )
             xmlNode := xmlIter:Find()
		     
             nfe_notafiscalsimounao = "N"
             nfe_cabecalho = ""
             nfe_serie         = space(03) // serie do documento fiscal
             nfe_numero        = space(09) // numero do documento fiscal
             nfe_emissao       = space(10) // data de emissÆo
             nfe_e_cnpj        = space(14) // CNPJ
             nfe_e_cpf         = space(11) // CPF
             nfe_e_razaonome   = space(60) // nome ou razao social
             nfe_e_estado      = space(02) // estado
             nfe_t_valornota   = space(15) // 15,2 valor total da nota fiscal
             nfe_chave         = space(100) // chave da nota fiscal
		     
             do while xmlNode != NIL
                cName := xmlNode:cName
                cData := xmlNode:cData
		     
                if empty(cName)
                   xmlNode := xmlIter:Next()
                   loop
                endif
		     
                if cName = "infNFe"
                   nfe_notafiscalsimounao = "S"
                endif
		     
                if upper(cName) = "IDE"        .or.;  // dados da nota fiscal
                   upper(cName) = "NFREF"      .or.;  // referenciada
                   upper(cName) = "REFNF"      .or.;  // referenciada
                   upper(cName) = "REFNP"      .or.;  // referenciada
                   upper(cName) = "REFECF"     .or.;  // referenciada
                   upper(cName) = "EMIT"       .or.;  // emitente
                   upper(cName) = "AVULSA"     .or.;  // emitente avulsa pelo fisco
                   upper(cName) = "DEST"       .or.;  // destinatario
                   upper(cName) = "RETIRADA"   .or.;  // destinatario
                   upper(cName) = "ENTREGA"    .or.;  // destinatario
                   upper(cName) = "DET"        .or.;  // cabecalho de produtos..
                   upper(cName) = "PROD"       .or.;  // produtos
                   upper(cName) = "IMPOSTO"    .or.;  // icms
                   upper(cName) = "ICMS"       .or.;  // icms
                   upper(cName) = "IPI"        .or.;  // ipi
                   upper(cName) = "IPITRIB"    .or.;  // ipi
                   upper(cName) = "IPINT"      .or.;  // ipi
                   upper(cName) = "PIS"        .or.;  // pis
                   upper(cName) = "PISALIQ"    .or.;  // pis
                   upper(cName) = "PISQTDE"    .or.;  // pis
                   upper(cName) = "PISNT"      .or.;  // pis
                   upper(cName) = "PISOUTR"    .or.;  // pis
                   upper(cName) = "PISST"      .or.;  // pis
                   upper(cName) = "COFINS"     .or.;  // cofins
                   upper(cName) = "COFINSALIQ" .or.;  // cofins
                   upper(cName) = "COFINSQTDE" .or.;  // cofins
                   upper(cName) = "COFINSNT"   .or.;  // cofins
                   upper(cName) = "COFINSOUTR" .or.;  // cofins
                   upper(cName) = "COFINSST"   .or.;  // cofins
                   upper(cName) = "ISSQN"      .or.;  // issqn
                   upper(cName) = "TOTAL"      .or.;  // total
                   upper(cName) = "ICMSTOT"    .or.;  // total icms
                   upper(cName) = "ISSQNTOT"   .or.;  // issqn
                   upper(cName) = "RETTRIB"    .or.;  // restitui‡Æo tribu
                   upper(cName) = "TRANSP"     .or.;  // transportador
                   upper(cName) = "RETTRANSP"  .or.;  // transportador
                   upper(cName) = "VEICTRANSP" .or.;  // transportador
                   upper(cName) = "VOL"        .or.;  // volumes
                   upper(cName) = "COBR"       .or.;  // cobran‡a
                   upper(cName) = "FAT"        .or.;  // Fatura
                   upper(cName) = "DUP"        .or.;  // duplicata
                   upper(cName) = "INFADIC"    .or.;  // informa‡äes adicionais
                   upper(cName) = "INFPROT"
		     
                   nfe_cabecalho = upper(cName)
		     
                   if upper(cName) = "DET"
                   endif
		     
                endif
				
                if nfe_cabecalho = "IDE"
                   if !empty(cData)
                      nfe_serie         = iif(cName = "serie"  ,cData,retorna_volta(nfe_serie         ))
                      nfe_numero        = iif(cName = "nNF"    ,cData,retorna_volta(nfe_numero        ))
                      nfe_emissao       = iif(cName = "dEmi"   ,cData,retorna_volta(nfe_emissao       ))
                      if empty(nfe_emissao)
                         nfe_emissao    = iif(cName = "dhEmi"  ,cData,retorna_volta(nfe_emissao       ))
                         nfe_emissao    = substr(nfe_emissao,1,10)
                      endif
                   endif
                endif
                if nfe_cabecalho = "EMIT"
                   if !empty(cData)
                      nfe_e_cnpj          = iif(cName = "CNPJ"   ,cData,retorna_volta(nfe_e_cnpj          ))
                      nfe_e_cpf           = iif(cName = "CPF"    ,cData,retorna_volta(nfe_e_cpf           ))
                      nfe_e_razaonome     = iif(cName = "xNome"  ,upper(cData),retorna_volta(nfe_e_razaonome     ))
                      nfe_e_estado        = iif(cName = "UF"     ,upper(cData),retorna_volta(nfe_e_estado        ))
                   endif
                endif
                
                if nfe_cabecalho = "ICMSTOT"
                   if !empty(cData)
                      nfe_t_valornota   = iif(cName = "vNF"        ,cData,retorna_volta(nfe_t_valornota   ))
                   endif
                endif
				
                if nfe_cabecalho = "INFPROT"
                   if !empty(cData)
                      nfe_chave        = iif(cName = "chNFe"       ,cData,retorna_volta(nfe_chave        ))
                   endif
                endif
				
                xmlNode := xmlIter:Next()
             enddo
             fclose(hFile)
			 
			 if nfe_notafiscalsimounao = "S"
				nfe_emissao = substr(nfe_emissao,9,2) + "-" + substr(nfe_emissao,6,2) + "-" + substr(nfe_emissao,1,4)
				aadd(asamplzNOTA,{"",;
			                      nfe_serie,;
			    				  nfe_numero,;
			    				  nfe_emissao,;
			    				  nfe_e_razaonome,;
			    				  iif(!empty(nfe_e_cnpj),nfe_e_cnpj,nfe_e_cpf),;
			    				  nfe_e_estado,;
			    				  nfe_t_valornota,;
			    				  nfe_chave})
			 endif
		 
		 next
		 
         odlgwait:end()
		 
         if empty(asamplzNOTA)
            asamplzNOTA = {""}
         else
		    asamplzNOTA := asort(asamplzNOTA,,,{|x,y| (x[4] > y[4])})
		 endif
         obrzNOTA:SetArray(asamplzNOTA)
         obrzNOTA:refresh()
return nil

 

Edited by Wellington Vieira
RESOLVIDO
Link to comment
Share on other sites

Bom dia, veja se ajuda ahi:

// USOINDEV.PRG - MODIFICADO POR: Joao Santos - kapiabafwh@gmail.com 21/12/2022
	https:// www.oobj.com.br/bc/article/rejei%C3%A7%C3%A3o-656-consumo-indevido-como-resolver-4.html
	FUNCTION consulta_nfe_contra( objconsultatipo )
	   HB_GCALL( .F. )
	   wonfeNormalConsumidor = "N"
	   // 1º - Aqui ele abre um select para pegar as configurações da NF-e para gerar o arquivo
   // CNPj-dist-dfe.xml
	   IF zsequencianotafiscal = .F.
      cwQuery := "select * from adloja where seqloja = " + AllTrim( Str( zseqloja ) )
   ELSE
      cwQuery := "select * from adloja where seqloja = 1"
   ENDIF
	   cwQuery += " order by seqloja asc;"
   owQuery := oServer:Query( cwQuery )
	   xfatambiemtedanotafiscaleletronica = owquery:FieldGet( owquery:FieldPos( 'fatambiemtedanotafiscaleletronica' ) )
	   IF wonfeNormalConsumidor = "N"
      xfattipodeemissaonotafiscaleletronica = owquery:FieldGet( owquery:FieldPos( 'fattipodeemissaonotafiscaleletronica' ) )
   ELSEIF wonfeNormalConsumidor = "C"
      xfattipodeemissaonotafiscaleletronica = owquery:FieldGet( owquery:FieldPos( 'fattipodeemissaonotafiscaleletronicanfce' ) )
      IF xfattipodeemissaonotafiscaleletronica = 8
         xfattipodeemissaonotafiscaleletronica = 9
      ENDIF
   ENDIF
	   IF xfattipodeemissaonotafiscaleletronica = 1
      ntitle = "Normal | " + "SEFAZ | " + zuf
   ELSEIF xfattipodeemissaonotafiscaleletronica = 2
      ntitle = "FS-IA | Contigencia com impressao do DANFE em formulario de seguranca"
   ELSEIF xfattipodeemissaonotafiscaleletronica = 3
      ntitle = "SCAN | Sistema de contigencia em ambiente Nacional"
   ELSEIF xfattipodeemissaonotafiscaleletronica = 4
      ntitle = "DPEC | Declaracao previa da emissao em contigencia"
   ELSEIF xfattipodeemissaonotafiscaleletronica = 5
      ntitle = "FS-DA | Contigencia com impressao do DANFE em formulario de seguranca"
   ELSEIF xfattipodeemissaonotafiscaleletronica = 6
      ntitle = "SVC-AN | Sefaz virtual de contigencia do AN"
   ELSEIF xfattipodeemissaonotafiscaleletronica = 7
      ntitle = "SVC-RS | Sefaz virtual de contigencia do RS"
   ELSEIF xfattipodeemissaonotafiscaleletronica = 9
      ntitle = "Contigencia off-line da NFC-e"
   ENDIF
	   otitlegerencianfe = otitlegerencianfe + ntitle
	   IF wonfeNormalConsumidor = "N"
	      xfatversaodoxmldanotafiscal    = owquery:FieldGet( owquery:FieldPos( 'fatversaodoxmldanotafiscal' ) )
      xfatmodelonotafiscalnormal     = owquery:FieldGet( owquery:FieldPos( 'fatmodelonotafiscalnormal' ) )
      xfatserienotafiscalnormal      = owquery:FieldGet( owquery:FieldPos( 'fatserienotafiscalnormal' ) )
      xfatserienotafiscalcontigencia = owquery:FieldGet( owquery:FieldPos( 'fatserienotafiscalcontigencia' ) )
      xfatdatahoraentradacontigencia = owquery:FieldGet( owquery:FieldPos( 'fatdatahoraentradacontigencia' ) )
      xfatmotivodacontigencia        = owquery:FieldGet( owquery:FieldPos( 'fatmotivodacontigencia' ) )
	   ELSEIF wonfeNormalConsumidor = "C"
	      xfatversaodoxmldanotafiscal    = owquery:FieldGet( owquery:FieldPos( 'fatversaodoxmldanotafiscalnfce' ) )
      xfatmodelonotafiscalnormal     = owquery:FieldGet( owquery:FieldPos( 'fatmodelonotafiscalnormalnfce' ) )
      xfatserienotafiscalnormal      = owquery:FieldGet( owquery:FieldPos( 'fatserienotafiscalnormalnfce' ) )
      xfatserienotafiscalcontigencia = owquery:FieldGet( owquery:FieldPos( 'fatserienotafiscalcontigencia' ) )
      xfatdatahoraentradacontigencia = owquery:FieldGet( owquery:FieldPos( 'fatdatahoraentradacontigencianfce' ) )
      xfatmotivodacontigencia        = owquery:FieldGet( owquery:FieldPos( 'fatmotivodacontigencianfce' ) )
	   ENDIF
	   znfesincrono  = owquery:FieldGet( owquery:FieldPos( 'fatnfesincrono' ) )
   znfcesincrono = owquery:FieldGet( owquery:FieldPos( 'fatnfcesincrono' ) )
	   xfatpastaxmlenviadosindidualmente = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmlenviadosindidualmente' ) ) )
   xfatpastaxmlenviadoslotes         = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmlenviadoslotes' ) ) )
   xfatpastaxmlretornodowebservice   = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmlretornodowebservice' ) ) )
   xfatpastaxmlautorizados           = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmlautorizados' ) ) )
   xfatpastaxmltemporarios           = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmltemporarios' ) ) )
   xfatpastaxmlbackup                = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmlbackup' ) ) )
   xfatpastaxmlavalidar              = reverso( owquery:FieldGet( owquery:FieldPos( 'fatpastaxmlavalidar' ) ) )
	   owQuery:destroy()
	   // 1º - Termina o selct.
	   // 2º - A variável cDirXML_cons, direciona para qual pasta será criado o arquivo CNPJ-con-dist-dfe.xml
   cDirXML_cons = reverso( AllTrim( xfatpastaxmlenviadosindidualmente ) ) + "\" + AllTrim( znumerodocumentonacional ) + "-con-dist-dfe.xml"
	   // 3º - A variável B02_CUF, pega o estado para o arquivo CNPJ-con-dist-dfe.xml
   B02_cUF = ver_estado( zuf )
	   // 4º - Neste select ele pega o ultNSU a ser pesquisado e compara com maxNSU,
   // para ver se igualou o ultNSU com maxNSU, se sim aguarda 1h e 30mm
   // para começar a pesquisa novamento
   IF zsequencianotafiscal = .F.
      cwQuery := "select * from adloja where seqloja = " + AllTrim( Str( zseqloja ) )
   ELSE
      cwQuery := "select * from adloja where seqloja = 1"
   ENDIF
	   cwQuery += " order by seqloja asc;"
   owQuery := oServer:Query( cwQuery )
   xfatnumeronsu    = owquery:FieldGet( owquery:FieldPos( 'fatnumeronsu' ) )
	   IF Empty( xfatnumeronsu )
      xfatnumeronsu = 0
   ENDIF
	   xfatnumeronsumax = owquery:FieldGet( owquery:FieldPos( 'fatnumeronsumax' ) )
	   IF Empty( xfatnumeronsumax )
      xfatnumeronsu = 0
   ENDIF
	   owQuery:destroy()
	   // 4º - Termina..........
	   // 5º - Verifica se o ultNSU alcançou o NSUmax e aguarda até 1 hora e meia para prosseguir novas consultas......
   IF xfatnumeronsu > 0
	      IF xfatnumeronsumax > 0
         IF xfatnumeronsu >= xfatnumeronsumax
            msgwsiscom( "Colocar aqui msg de espera.", "Atenção" )
            RETURN NIL
         ENDIF
      ENDIF
	   ENDIF
	   // 6º - Se o ultNSU ESTIVER ELE COMEÇA ZERADO, SE NÃO É O ultNSU GUARDADO NA BASE
   // QUE SERÁ PESQUISAO.
   IF Empty( xfatnumeronsu )
      xfatnumeronsu = "000000000000000"
   ELSE
      xfatnumeronsu =  Replicate( "0", 15 - Len( AllTrim( Str( xfatnumeronsu ) ) ) ) + AllTrim( Str( xfatnumeronsu ) )
   ENDIF
	   // 7º - Ele irá criar o o xml CNPj-dist-dfe.xml com os dados acima
   // que será enviado a SEFAZ/MG para ser pesquisado.
   lh := 00
   oPrn := TDosPrn():New( cDirXML_cons )
   oPrn:StartPage()
   oPrn:lZeraBuffer := .T.
	   mlinha = '<?xml version="1.0" encoding="utf-8"?>'
   oPrn:Say( lh, 000, mlinha )
   ++lh
   mlinha = '<distDFeInt xmlns="http://www.portalfiscal.inf.br/nfe" versao="1.35">'
   oPrn:Say( lh, 000, mlinha )
   ++lh
   mlinha = '<tpAmb>' + AllTrim( Str( xfatambiemtedanotafiscaleletronica ) ) + '</tpAmb>'
   oPrn:Say( lh, 000, mlinha )
   ++lh
   mlinha = '<cUFAutor>' + B02_cUF + '</cUFAutor>'
   oPrn:Say( lh, 000, mlinha )
   ++lh
   mlinha = '<CNPJ>' + AllTrim( znumerodocumentonacional ) + '</CNPJ>'
   oPrn:Say( lh, 000, mlinha )
   ++lh
	   IF objconsultatipo = "geral"
	      mlinha = '<distNSU>'
      oPrn:Say( lh, 000, mlinha )
      ++lh
      mlinha = '<ultNSU>' + xfatnumeronsu + '</ultNSU>'
      oPrn:Say( lh, 000, mlinha )
      ++lh
	      // msginfo(xfatnumeronsu)
	      mlinha = '</distNSU>'
      oPrn:Say( lh, 000, mlinha )
      ++lh
	   ENDIF
	   mlinha = '</distDFeInt>'
   oPrn:Say( lh, 000, mlinha )
   ++lh
	   oPrn:EndPage()
   oPrn:End()
	   // msginfo(cDirXML_cons)
	   // 8º - Pega o CNPJ-dist-dfe.xml, que voltou da SEFAZ em uma pasta para ser analisado..
   cDirXML = reverso( AllTrim( xfatpastaxmlretornodowebservice ) ) + "\" + AllTrim( znumerodocumentonacional ) + "-dist-dfe.xml"
   cDirXME = reverso( AllTrim( xfatpastaxmlretornodowebservice ) ) + "\" + AllTrim( znumerodocumentonacional ) + "-con-dist-dfe.err"
	   msn = "N"
   nqte = 0
	   // PONHA UM DELAY AQUI PARA ATRASAR A CONSULTA E NAO DAR 656.
   WHILE nqte < 200000000
	      SYSREFRESH() // REFRESQUE O LOOPING
	      // SYSWAIT( 6.5 ) // AQUI DELAY
	      // OU:
	      MsgWait( "AGUARDE, CONSULTANDO AS NOTA FISCAIS...", ;
               "AGUARDE UM MOMENTO POR FAVOR. DEMORA...", 6.5 )
	      IF File( cDirXML )
         msn = "S"
         EXIT
      ENDIF
	      IF File( cDirXME )
         IF File( cDirXML )
            msn = "S"
            EXIT
         ENDIF
         msn = "N"
         EXIT
      ENDIF
	      ++nqte
	   ENDDO
	   _ultNSU  =  "000000000000000"
   _maxNSU  =  "000000000000000"
   _nmotivo = ""
   _cStat   = ""
   _processa_xml = "S"
	   IF msn = "N"
	      IF File( cDirXME )
	         cInfo = ""
         csource = cDirXME
         nsource := FOpen( "&csource", 0 )
	         IF ( nsource ) # -1
            lEof := .F.
            nn = 1
	            WHILE !lEof
	               SYSREFRESH() // REFRESQUE O LOOPING
	               SYSWAIT( .5 ) // AQUI DELAY
	               c := p_readln_1( nSource, linebuff )
               IF !lEof .AND. c # Chr( 26 )
                  IF nn = 1
                     cInfo := c
                     ++nn
                  ELSE
                     cInfo += CRLF + c
                  ENDIF
               ENDIF
	            ENDDO
	         ENDIF
	         FClose( nsource )
         // msgstop(cInfo,"Atencao")
         FErase( cDirXME )
         _processa_xml = "N"
	      ENDIF
      // return nil
   ELSEIF msn := "S"
	      nmotivo :=  abrir_xml( cDirXML, "xMotivo" )
      _ultNSU :=  abrir_xml( cDirXML, "ultNSU" )
      _maxNSU :=  abrir_xml( cDirXML, "maxNSU" )
      _cStat  := abrir_xml( cDirXML, "cStat" )
	   ENDIF
	   // 9º - Termina a analise CNPJ-dist-dfe.xml
	   // 10º - Se houve mudanças no maxNSU ele grava na base de dados
   IF Val( _maxNSU ) > 0
	      cwQuery := "Update adloja set fatnumeronsu = " + AllTrim( Str( Val( _ultNSU ) ) )
      cwQuery += ",fatnumeronsuMax = " + AllTrim( Str( Val( _maxNSU ) ) )
      cwQuery += ",datanumeronsu = "   + "'" + SubStr( DToS( ldate ), 1, 4 ) + "-" + SubStr( DToS( ldate ), 5, 2 ) + "-" + SubStr( DToS( ldate ), 7, 2 ) + "'"
      cwQuery += ",timenumeronsu = "   + "'" + Time() + "'"
	      IF zsequencianotafiscal = .F.
         cwQuery += " where " + " seqloja = " + AllTrim( Str( zseqloja ) )
      ELSE
         cwQuery += " where " + " seqloja = 1"
      ENDIF
	      owQuery := oServer:Query( cwQuery )
	      IF owQuery:NetErr()
         msgStop( "Erro na gravação do NSU.", "ATENÇÂO" )
      ENDIF
	      owQuery:destroy()
      oServer:Commit()
	   // 10º - Se houve mudanças no ultNSU ele grava na base de dados
   ELSEIF Val( _ultNSU ) > 0
	      cwQuery := "Update adloja set fatnumeronsu = " + AllTrim( Str( Val( _ultNSU ) ) )
      cwQuery += ",datanumeronsu = "   + "'" + SubStr( DToS( ldate ), 1, 4 ) + "-" + SubStr( DToS( ldate ), 5, 2 ) + "-" + SubStr( DToS( ldate ), 7, 2 ) + "'"
      cwQuery += ",timenumeronsu = "   + "'" + Time() + "'"
	      IF zsequencianotafiscal = .F.
         cwQuery += " where " + " seqloja = " + AllTrim( Str( zseqloja ) )
      ELSE
         cwQuery += " where " + " seqloja = 1"
      ENDIF
	      owQuery := oServer:Query( cwQuery )
	      IF owQuery:NetErr()
         msgStop( "Erro na gravação do NSU.", "ATENÇÂO" )
      ENDIF
	      owQuery:destroy()
      oServer:Commit()
	   ENDIF
	   // msginfo(_cStat)
	   // 11º - Verifica o cStat retornado no arquivo CNPJ-dist-dfe.xml
	   // AQUI ENCONTRA-SE O PROBLEMA, ELE SEMPRE RETORNA 656-CONSUMO INDEVIDO..................................
   //
   IF AllTrim( _cStat ) = "138"  // Documento localizado
      _processa_xml = "S"
   ELSE
      IF !Empty( nmotivo )
         msgstop( nmotivo )
      ENDIF
      _processa_xml = "N"
   ENDIF
	   // 12º - Irá fazer a leitura para apresentar as NF-e emitidas contra o CNPJ.............................
   cDirlocalretornoxml = reverso( AllTrim( xfatpastaxmlretornodowebservice ) ) + "\dfe\"
	   asamplzNOTA := {}
	   j := 0
   j := ADir( cDirlocalretornoxml + "*.xml" )
	   DECLARE marquivo[ j ]
	   ADir( cDirlocalretornoxml + "*.xml", marquivo )
	   IF j <= 0
      msgwsiscom( "Não há arquivos xml emitidos contra.", "ATENCAO" )
      RETURN NIL
   ENDIF
	   fwait( "  ...Aguarde processando..." )
	   FOR ttqq = 1 TO Len( marquivo )
	      SYSREFRESH() // REFRESQUE O LOOPING
	      hFile  := FOpen( cDirlocalretornoxml + marquivo[ ttqq ]  )
      xmlDoc := TXmlDocument():New( hFile )
	      IF xmlDoc:nStatus != HBXML_STATUS_OK
         msgstop( "Falha no arquivo XML ", "ERRO Arquivo XML" )
         RETURN NIL
      ENDIF
	      xmlIter := TXmlIterator():New( xmlDoc:oRoot )
      xmlNode := xmlIter:Find()
	      nfe_notafiscalsimounao := "N"
      nfe_cabecalho    := ""
      nfe_serie        := Space( 03 ) // serie do documento fiscal
      nfe_numero       := Space( 09 ) // numero do documento fiscal
      nfe_emissao      := Space( 10 ) // data de emissÆo
      nfe_e_cnpj       := Space( 14 ) // CNPJ
      nfe_e_cpf        := Space( 11 ) // CPF
      nfe_e_razaonome  := Space( 60 ) // nome ou razao social
      nfe_e_estado     := Space( 02 ) // estado
      nfe_t_valornota  := Space( 15 ) // 15,2 valor total da nota fiscal
      nfe_chave        := Space( 100 ) // chave da nota fiscal
	      WHILE xmlNode != NIL
	         SYSREFRESH() // REFRESQUE O LOOPING
	         SYSWAIT( .5 ) // DELAY OU A GOSTO
	         cName := xmlNode:cName
         cData := xmlNode:cData
	         IF Empty( cName )
            xmlNode := xmlIter:Next()
            LOOP
         ENDIF
	         IF cName = "infNFe"
            nfe_notafiscalsimounao = "S"
         ENDIF
	         IF Upper( cName ) = "IDE"        .OR. ;  // dados da nota fiscal
            Upper( cName ) = "NFREF"      .OR. ;  // referenciada
            Upper( cName ) = "REFNF"      .OR. ;  // referenciada
            Upper( cName ) = "REFNP"      .OR. ;  // referenciada
            Upper( cName ) = "REFECF"     .OR. ;  // referenciada
            Upper( cName ) = "EMIT"       .OR. ;  // emitente
            Upper( cName ) = "AVULSA"     .OR. ;  // emitente avulsa pelo fisco
            Upper( cName ) = "DEST"       .OR. ;  // destinatario
            Upper( cName ) = "RETIRADA"   .OR. ;  // destinatario
            Upper( cName ) = "ENTREGA"    .OR. ;  // destinatario
            Upper( cName ) = "DET"        .OR. ;  // cabecalho de produtos..
            Upper( cName ) = "PROD"       .OR. ;  // produtos
            Upper( cName ) = "IMPOSTO"    .OR. ;  // icms
            Upper( cName ) = "ICMS"       .OR. ;  // icms
            Upper( cName ) = "IPI"        .OR. ;  // ipi
            Upper( cName ) = "IPITRIB"    .OR. ;  // ipi
            Upper( cName ) = "IPINT"      .OR. ;  // ipi
            Upper( cName ) = "PIS"        .OR. ;  // pis
            Upper( cName ) = "PISALIQ"    .OR. ;  // pis
            Upper( cName ) = "PISQTDE"    .OR. ;  // pis
            Upper( cName ) = "PISNT"      .OR. ;  // pis
            Upper( cName ) = "PISOUTR"    .OR. ;  // pis
            Upper( cName ) = "PISST"      .OR. ;  // pis
            Upper( cName ) = "COFINS"     .OR. ;  // cofins
            Upper( cName ) = "COFINSALIQ" .OR. ;  // cofins
            Upper( cName ) = "COFINSQTDE" .OR. ;  // cofins
            Upper( cName ) = "COFINSNT"   .OR. ;  // cofins
            Upper( cName ) = "COFINSOUTR" .OR. ;  // cofins
            Upper( cName ) = "COFINSST"   .OR. ;  // cofins
            Upper( cName ) = "ISSQN"      .OR. ;  // issqn
            Upper( cName ) = "TOTAL"      .OR. ;  // total
            Upper( cName ) = "ICMSTOT"    .OR. ;  // total icms
            Upper( cName ) = "ISSQNTOT"   .OR. ;  // issqn
            Upper( cName ) = "RETTRIB"    .OR. ;  // restitui‡Æo tribu
            Upper( cName ) = "TRANSP"     .OR. ;  // transportador
            Upper( cName ) = "RETTRANSP"  .OR. ;  // transportador
            Upper( cName ) = "VEICTRANSP" .OR. ;  // transportador
            Upper( cName ) = "VOL"        .OR. ;  // volumes
            Upper( cName ) = "COBR"       .OR. ;  // cobran‡a
            Upper( cName ) = "FAT"        .OR. ;  // Fatura
            Upper( cName ) = "DUP"        .OR. ;  // duplicata
            Upper( cName ) = "INFADIC"    .OR. ;  // informa‡äes adicionais
            Upper( cName ) = "INFPROT"
	            nfe_cabecalho = Upper( cName )
	            IF Upper( cName ) = "DET"
            ENDIF
	         ENDIF
	         IF nfe_cabecalho = "IDE"
	            IF !Empty( cData )
               nfe_serie         = iif( cName = "serie", cData, retorna_volta( nfe_serie         ) )
               nfe_numero        = iif( cName = "nNF", cData, retorna_volta( nfe_numero        ) )
               nfe_emissao       = iif( cName = "dEmi", cData, retorna_volta( nfe_emissao       ) )
               IF Empty( nfe_emissao )
                  nfe_emissao    = iif( cName = "dhEmi", cData, retorna_volta( nfe_emissao       ) )
                  nfe_emissao    = SubStr( nfe_emissao, 1, 10 )
               ENDIF
            ENDIF
	         ENDIF
	         IF nfe_cabecalho = "EMIT"
	            IF !Empty( cData )
               nfe_e_cnpj          = iif( cName = "CNPJ", cData, retorna_volta( nfe_e_cnpj          ) )
               nfe_e_cpf           = iif( cName = "CPF", cData, retorna_volta( nfe_e_cpf           ) )
               nfe_e_razaonome     = iif( cName = "xNome", Upper( cData ), retorna_volta( nfe_e_razaonome     ) )
               nfe_e_estado        = iif( cName = "UF", Upper( cData ), retorna_volta( nfe_e_estado        ) )
            ENDIF
	         ENDIF
	         IF nfe_cabecalho = "ICMSTOT"
	            IF !Empty( cData )
               nfe_t_valornota   = iif( cName = "vNF", cData, retorna_volta( nfe_t_valornota   ) )
            ENDIF
	         ENDIF
	         IF nfe_cabecalho = "INFPROT"
            IF !Empty( cData )
               nfe_chave        = iif( cName = "chNFe", cData, retorna_volta( nfe_chave        ) )
            ENDIF
         ENDIF
	         xmlNode := xmlIter:Next()
	      ENDDO
	      FClose( hFile )
	      IF nfe_notafiscalsimounao = "S"
	         nfe_emissao = SubStr( nfe_emissao, 9, 2 ) + "-" + SubStr( nfe_emissao, 6, 2 ) + "-" + SubStr( nfe_emissao, 1, 4 )
	         AAdd( asamplzNOTA, { "", ;
                       nfe_serie, ;
                      nfe_numero, ;
                     nfe_emissao, ;
                 nfe_e_razaonome, ;
            iif( !Empty( nfe_e_cnpj ), nfe_e_cnpj, nfe_e_cpf ), ;
                    nfe_e_estado, ;
                 nfe_t_valornota, ;
                 nfe_chave } )
	      ENDIF
	   NEXT
	   odlgwait:end()
	   IF Empty( asamplzNOTA )
      asamplzNOTA = { "" }
   ELSE
      asamplzNOTA := ASort( asamplzNOTA,,, {| x, y | ( x[ 4 ] > y[ 4 ] ) } )
   ENDIF
	   obrzNOTA:SetArray( asamplzNOTA )
   obrzNOTA:refresh()
	   HB_GCALL( .T. )
	RETURN NIL
// Rejeição Nfe: 656-Rejeição: Consumo indevido
FUNCTION CONSUMO_INDEVIDO_ERRO_656()
	   LOCAL cUsoIndev := ( "http://www.flexdocs.com.br/guiaNFe/WS.consultaStatus2G.html" )
	   MsgStop( "Rejeição Nfe: 656-Rejeição: Consumo indevido do Web Service. "+CRLF+ ;
            "Este problema é causado quando ocorre um grande volume       "+CRLF+ ;
            "de consultas no servidor da SEFAZ em um período muito curto. "+CRLF+ ;
            "Neste momento a SEFAZ bloqueia as consultas, retornando a    "+CRLF+ ;
            "Rejeição 656. Na NT 2012.003 (páginas 8 e 9), existem        "+CRLF+ ;
            "informações sobre esta rejeição. Para a sua solução, basta   "+CRLF+ ;
            "aguardar a liberação pela SEFAZ para a autorização das notas."+CRLF+ ;
            "Recomenda-se aguardar pelo menos 1 hora para a nova consulta."+CRLF+ ;
            "Se ainda assim retornar a mesma rejeição, será necessário    "+CRLF+ ;
            "entrar em contato com a SEFAZ.                               "+CRLF+ ;
            "Verifique se a SEFAZ está operacional. Está Fora do AR?      "+CRLF+ ;
            "Na tela principal da NFe, <Click> no Botão: <Portal da NFe>  "+CRLF+ ;
            "Botão: <Testar a Conexão com o Web Service da Sefaz>         "+CRLF+ ;
            "Se aparecer mensagem em VERMELHO, sefaz está com problemas.  "+CRLF+ ;
            "Espere no minimo 01(uma) hora antes de tentar de novo.       ",      ;
            "Rejeição Nfe: 656-Rejeição: Consumo indevido do Web Service. " )
	   ShellExecute(GetActiveWindow(),"open",'"'+cUsoIndev+'"')
	RETURN NIL
	// FIN / END - kapiabafwh@gmail.com

Regards, saludos.

Link to comment
Share on other sites

Em 21/12/2022 at 20:02, lucimauromelo disse:

Esse caso de consumo indevido só resolve se a contabilidade remover o soft dela desta distribuição , não tem outra saída pelo que conheço.

Exatamente. Da forma como esse recurso foi implementado pela Receita Federal, é Impossível funcionar com 2 softwares acessando ao mesmo tempo. Um deles sempre vai está recebendo essa mensagem de "consumo indevido". No meu caso, resolvemos impedindo os contadores de fazer o download. O download é feito exclusivamente no nosso sistema e exportamos os arquivos baixados para os contadores.

Link to comment
Share on other sites

  • 4 weeks later...

RESOLVI ASSIM.

Fiz a abertura do site de MANIFESTAÇÃO DO DESTINATÁRIO DA SEFAZ/NACIONAL em uma dialog a partir do ACTIVEX e a partir desta tela eu salvo o  HTML, para que eu possa localizar as NF-e pelo sua chave neste HTML e as recolho guardando em um ARRAY.
 

consulta_nf_2.fw.png

 

Depois faço uma busca ao invés do ULTNSU, mas sim por CHAVE que havia recolhido e guardado no ARRAY.  Sendo assim não necessito do ULTNSU, pois a consulta que faço é por chave da NF-e. ( ISSO me dá até 20 documentos a cada hora de consulta.), sendo que se alguém (contabilidade) faz a busca por NSU (ULTIMO), não atrapalha a minha consulta.

Ele retorna.

consulta_nf_3.fw.png

 

Leio o retorno e localizo o "doczip", assim utilizo os comandos... "hb_ZUncompress(HB_base64Decode())", para ter o XML e pode processar o mesmo na ENTRADA DA NF.

Esta funcionando bem.

 

 

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...