Consulta optante do simples online

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Consulta optante do simples online

Mensagem por rubens »

Daniel...

Será que podia dar uma olhadinha também no valor...?
Quando o valor ultrapassa 1000 ele tá gerando a mascara errado:
Tipo assim: 1000 - deveria gerar no xml 1000,00 e tá gerando 1.000.00 aí o sistema de importação interpreta como 1.00, posso aqui no sistema de importação mas acho que se corrigisse na hora de gerar o xml ficaria melhor...
Veja na linha 09 vProd, deveria ter gerado 3600.00 e gerou 3.600.00

Código: Selecionar todos

<cProd>0034.0009</cProd>
<xProd>TELHA GALVALUME OND/TRAP.(0.43MM) ML</xProd>
<NCM>73089090</NCM>
<EXTIPI>01</EXTIPI>
<CFOP>5401</CFOP>
<uCom>ML</uCom>
<qCom>200.0000</qCom>
<vUnCom>18.0000000000</vUnCom>
<vProd>3.600.00</vProd>
<uTrib>ML</uTrib>
<qTrib>200.0000</qTrib>
<vUnTrib>18.0000000000</vUnTrib>
<indTot>1</indTot>
Obg...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Consulta optante do simples online

Mensagem por rubens »

Achei uma solução parcial,

Código: Selecionar todos

if _tag=="det"

  cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
  cPar_:=StrTran(cPar_,Chr(160),"")
  
  For p_=1 to Len(aDet)
  
    For i=1 to Len(aDet[p_])
    
      nIni:=AT(aDet[p_,i,3],cPar_)
      
      if nIni>0
        c_span:=SubStr(cPar_, nIni)
        nIni:=AT('<span>',c_span)+6
        nTamTag:=AT('</span>',c_span)-nIni
        c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
        
        if aDet[p_,i,4]!=0
          if aDet[p_,i,4]>0
            c_tag:=left(c_tag,aDet[p_,i,4])
          else
            c_tag:=alltrim(SubStr(c_tag,Abs(aDet[p_,i,4])+1))
            c_tag:=alltrim(StrTran(c_tag,"-",""))
          endif
        endif

          ****************************************************************************************		  
	 * Acrescentado
	 If i=12 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0 
        	c_tag := StrTran( c_tag, '.','' )
   	 EndIf
          ****************************************************************************************
   	  
        aDet[p_,i,1]:=StrTran(c_tag,",",".")
        
      endif
      
    Next
    
    For i=1 to Len(aICMS[p_])
      nIni:=AT(aICMS[p_,i,3],cPar_)
      if nIni>0
        c_span:=SubStr(cPar_, nIni)
        nIni:=AT('<span>',c_span)+6
        nTamTag:=AT('</span>',c_span)-nIni
        c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
        if aICMS[p_,i,4]!=0
          if aICMS[p_,i,4]>0
            c_tag:=left(c_tag,aICMS[p_,i,4])
          else
            c_tag:=alltrim(SubStr(c_tag,Abs(aICMS[p_,i,4])+1))
            c_tag:=alltrim(StrTran(c_tag,"-",""))
          endif
        endif
        
        ****************************************************************************************
        * Acrescentado
  		  If i=13 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0 
        	c_tag := StrTran( c_tag, '.','' )
   	  EndIf
        ****************************************************************************************
        
        aICMS[p_,i,1]:=StrTran(c_tag,",",".")
      endif
    Next
    
    nIni:=AT('<legend class="toggle">PIS</legend>',cPar_)
    if nIni>0
      cPar_:=SubStr(cPar_,nIni)
      For i=1 to Len(aPIS[p_])
        nIni:=AT(aPIS[p_,i,3],cPar_)
        if nIni>0
          c_span:=SubStr(cPar_, nIni)
          nIni:=AT('<span>',c_span)+6
          nTamTag:=AT('</span>',c_span)-nIni
          c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
          if aPIS[p_,i,4]!=0
            if aPIS[p_,i,4]>0
              c_tag:=left(c_tag,aPIS[p_,i,4])
            else
              c_tag:=alltrim(SubStr(c_tag,Abs(aPIS[p_,i,4])+1))
              c_tag:=alltrim(StrTran(c_tag,"-",""))
            endif
          endif
          
          ****************************************************************************************
          * Acrescentado
          If i=4 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0 
        		c_tag := StrTran( c_tag, '.','' )
 	  EndIf
          ****************************************************************************************
          
          aPIS[p_,i,1]:=StrTran(c_tag,",",".")
        endif
      Next
    endif
    
    nIni:=AT('<legend class="toggle">COFINS</legend>',cPar_)
    if nIni>0
      cPar_:=SubStr(cPar_,nIni)
      For i=1 to Len(aCOFINS[p_])
        nIni:=AT(aCOFINS[p_,i,3],cPar_)
        if nIni>0
          c_span:=SubStr(cPar_, nIni)
          nIni:=AT('<span>',c_span)+6
          nTamTag:=AT('</span>',c_span)-nIni
          c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
          if aCOFINS[p_,i,4]!=0
            if aCOFINS[p_,i,4]>0
              c_tag:=left(c_tag,aCOFINS[p_,i,4])
            else
              c_tag:=alltrim(SubStr(c_tag,Abs(aCOFINS[p_,i,4])+1))
              c_tag:=alltrim(StrTran(c_tag,"-",""))
            endif
          endif

          ****************************************************************************************
          * Acrescentado
          If i=4 .and. At( '.', c_Tag ) > 0 .and. At( ',', c_Tag ) > 0 
        		c_tag := StrTran( c_tag, '.','' )
	 EndIf          
          ****************************************************************************************          

          aCOFINS[p_,i,1]:=StrTran(c_tag,",",".")
         
        endif
      Next
    endif
    nIni:=AT('<td class="fixo-prod-serv-numero"><span>',cPar_)
    cPar_:=SubStr(cPar_,nIni+35)
  Next
endif
Dentro de <Det> faz uma verificação com a posição dentro do vetor e se a tag tem '.' e ',' se tiver remove o '.'
Não consegui verificar o PIsoutr e Cofinsoutr.

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Consulta optante do simples online

Mensagem por Daniel »

Ola
Aqui esta ele melhorado um pouco, pois o Toledo fez um otimo trabalho
arrumado o decimal, colocado o ipi
Anexos
impnfe.prg
Com a tag Ipi
(39.72 KiB) Baixado 214 vezes
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
rubens
Colaborador
Colaborador
Mensagens: 1520
Registrado em: 16 Ago 2003 09:05
Localização: Nova Xavantina - MT

Consulta optante do simples online

Mensagem por rubens »

Daniel...

Beleza... resolveu sim o problema dos decimais no pis e cofins também...
Ficou um porém que eu já tinha percebido.. No Grupo Det se você usar o StrTran em todos os elementos do vetor, ele vai pegar também a descrição do produto, dessa forma acho que pode descaracterizar alguma descrição de produto, por isso eu tinha usado o StrTran somente no elemento 12 que é o vProd. Se isso não for problema para o usuário, tá perfeito. No meu caso foi o usuário que percebeu e reclamou que o produto que veio na nota/danfe como "TELHA GALVALUME OND/TRAP.(0,43MM) ML" se transformou em "TELHA GALVALUME OND/TRAP(0.43MM) ML". Como falei, se isso não fizer diferença para o cliente, fica do jeito que você fez mesmo, é só um alerta... Agora se fizer, do jeito que fiz no post anterior resolve. Na realidade mesclei as alterações que você fez com a minha e para mim tá jóia...
Valeu, obrigado...

Rubens
"Eu e minha casa servimos ao Senhor e você ???"
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Consulta optante do simples online

Mensagem por Wanderlei »

Rubens ou Daniel, tem como vocês colocarem ai para pegar o lote dos produtos.
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Consulta optante do simples online

Mensagem por fladimir »

Tem que ter uma chave na qual referencie 1Xml que tenha lotes como modelo para ser importados
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Consulta optante do simples online

Mensagem por Wanderlei »

Chave com produtos que tem lotes: 31150201206820000369550030033360011033360018
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Consulta optante do simples online

Mensagem por fladimir »

Analisando essa chave e comparando baixando com a Dll q tenho e a rotina q peguei aki com os colegas faltaria a parte q o Wanderei mencionou q não parece ser complicado da pra basear na parte q pega a cobrança e títulos/valores

Fora isto notei q via Dll nos produtos criam as tags (vou me referir ao item 1 da chave passada)

Código: Selecionar todos

<nItemPed> // acredito q é o nr do item no pedido junto ao fabricante/fornecedor
251046
<med>  // Parte q o Wanderlei mencionou dos lotes, então 1 item da nota pode ter N Lotes pelo q entendi.
   <nLote>
      BKGSK94
   <qLote>
       1.0000
   <dFab>
      2014-05-01
   <dVal>
      2017-05-31
    <vPMC>
       14.11
...
<imposto>
...

Agora fora isto notei algumas questões... exemplo

TAG Emitente

na consulta era R PE JOAO PIO 155, 120 L01/14, 0

Ai veio:

Código: Selecionar todos

<xLgr>
  R. PE JOAO PIO 155
<nro>
   Q20
<xCpl>
   L01/14
TAG Destinatário
faltou <cPais>

Os itens acima ok entendi e podemos resolver mais tranquilamente, agora o q não entendo muito é a parte abaixo sobre impostos exemplo no item 01 da chave em questão tem as seguintes diferenças q identifiquei para Impostos ICMS/PIS/COFINS

veio na tag Imposto, informações abaixo ok coincidentes.

Código: Selecionar todos

<ICMS>
  <ICMS60>
     <orig>
         2
      <CST>
         60
Agora as demais não localizei nem na consulta nem no xml baixado via Dll

Código: Selecionar todos

<modBC>3
<vBC>30,61
<pICMS>18.0000
<vICMS>5.51
<vBCST>13.69
<vICMSST>0.61
Somente as abaixo: ( via Dll )

Código: Selecionar todos

<vBCSTRet>13.69
<vICMSSTRet>0.61
PIS e COFINS estão trazendo valores de vBC pPIS vPIS pCOFINS vCOFINS e via Dll vem somente conforme abaixo:

Código: Selecionar todos

<PIS>
  <PISNT>
    <CST>
        04
<COFINS>
   <COFINSNT>
      <CST>
         04
Via Consulta Portal Governo tem a tag

Código: Selecionar todos

<infAdProd> 
NEGAT MONIT PZ 28 D DESC 3,00% r$ 0,32 PF 10.61 BCST 13,69 ST 0.61 PMC 14.11
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Consulta optante do simples online

Mensagem por fladimir »

Com relação a consultar de CPF as de vcs estão funcionando?

A minha de CNPJ esta Ok... a de CPF mudou a URL para https mas mesmo mudando não esta abrindo a pagina, alguém poderia postar um exemplo para eu comparar?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Consulta optante do simples online

Mensagem por Wanderlei »

eu parei de usar a pesquisa por CPF desde que o site mudou.
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Consulta optante do simples online

Mensagem por Daniel »

Ola
Consulta do Cpf arrumado, o site da receita esta meio lento

Código: Selecionar todos

//=========================================================================
//
// Arquivo.....: Cpf.prg
// Criado em...: 27/04/2016 as 13:27:12
//
// Projeto.....: Consulta Simples
//
// Programador.: Daniel Denobie - denobie@hotmail.com
//
//=========================================================================

#include "minigui.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "tip.ch"
#include "xhb.ch"
**********************************************
FUNCTION Main()

   Public cUrl := 'https://cedente.sicoobpr.com.br/archa-server-cobranca/jsp/login.jsf'
   Public cUrlC:= "https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/CPF/captcha/gerarCaptcha.asp"
   Public cUrl1:= "https://www.receita.fazenda.gov.br/Aplicacoes/SSL/ATCTA/cpf/ConsultaPublicaExibir.asp"
   Public cCaptcha, cCnpj, cStringCookie, cDataN

	Set Navigation Extended
	Set Date British
	Set Epoch to 2000
	Set Century On

   LOAD WINDOW F_Cpf

   If ! Consulta()
   	Quit
   EndIf

   F_Cpf.Center
   F_Cpf.Activate
	Return Nil

***********************************************
Function Consulta()


	Try
 	  oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
 	Catch
 		MsgInfo("Serviço não mapeado")
 		Return Nil
 	End Try
 	oServer:setOption('2', '13056')
 	try
   	oServer:Open( "GET", cUrl, .f. )
   Catch
   	MsgInfo('Erro na Conexão')
   End
   oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" )
   oServer:SetRequestHeader("Connection", "keep-alive" )
   oServer:Send()
   oServer:WaitForResponse( 150000 )
   c:=oServer:getResponseHeader("Set-Cookie")
   cStringCookie:= Substr(c, 1, At(';', c) -1)
   cHtml:= oServer:ResponseBody
	memowrit('Site.txt', cHtml)


   If ! Captcha()
      Return .F.
   EndIf

   Return .t.

***************************************
Function Captcha()

	Try
 	  oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
 	Catch
 		MsgInfo("Serviço não mapeado")
 		Return Nil
 	End Try
 	oServer:setOption('2', '13056')
 	try
   	oServer:Open( "GET", cUrlc, .t. )
   Catch
   	MsgInfo('Erro na Conexão')
   End
   oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded" )
   oServer:SetRequestHeader("Connection", "keep-alive" )
   oServer:Send()
   oServer:WaitForResponse( 150000 )
   c:=oServer:getResponseHeader("Set-Cookie")
   cStringCookie:= Substr(c, 1, At(';', c) -1)
   cHtml:= oServer:ResponseBody
	memowrit('Captcha.png', cHtml)
   SetProperty ('F_Cpf', 'image_1', 'Picture', 'Captcha.png')
   Return .T.

*******************************************************
Function Consulta1(cCnpj, cCaptcha, cDataN)
Local oUrl, oInternet
Local cData, cRet:= ''

   cParm:= "txtTexto_captcha_serpro_gov_br=" + cCaptcha + ;
           "&tempTxtCPF=" + cCNPJ + ;
           "&tempTxtNascimento=" + StrTran(DToC(cDataN), '/', '%2F') + ;
           "&temptxtToken_captcha_serpro_gov_br=" + '' + ;
           "&temptxtTexto_captcha_serpro_gov_br=" + cCaptcha

	Try
 	  oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
 	Catch
 		MsgInfo("Serviço não mapeado")
 		Return Nil
 	End
 	Try
  		oServer:Open( "POST", cUrl1, .f. )
   Catch
   	MsgInfo('Erro na Conexão')
   End
   oServer:SetRequestHeader("Content-Type", "application/x-www-form-urlencoded")
   oServer:SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
   oServer:SetRequestHeader("Cookie", cStringCookie)
   oServer:Send(cParm)
   oServer:WaitForResponse( 10000 )
   cRet:= oServer:ResponseBody
   nIni  := At('<form id', cRet)
   nFim  := At('</form>', cRet) + 7
   cTexto:= '<!DOCTYPE html>' + Chr(10) + chr(13)
   cTexto+=	'<html lang="pt-br">' + chr(10) + Chr(13)
   cTexto+= SubStr(cRet, nIni, nFim) + '</html>'
	memowrit('resulta.htm', ctexto)
	oObject := F_Cpf.Test.Object
	oObject:Navigate(GetStartUpFolder() + "\resulta.htm")
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Consulta optante do simples online

Mensagem por fladimir »

Show de Bola, o CPF deu certo.

Vlw
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Consulta optante do simples online

Mensagem por Daniel »

Colocado a tag dos lotes e arrumado pis confins icms

Código: Selecionar todos

****************************************************
* Desenvolvido com base no projeto criado por Daniel Denobie - denobie@hotmail.com
* https://pctoledo.org/forum/viewtopic.php?f=4&t=16972
****************************************************

#include <minigui.ch>
#include <hbcompat.ch>

DECLARE WINDOW principal

Procedure Main()
   Public cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
   Public cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
   Public cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'

   Public cCaptcha, cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenToken, cCodigo, cViewStateGenerator
   Public cHiddenSom, cChave

   SET NAVIGATION EXTENDED
   SET LANGUAGE TO PORTUGUESE

   Load Window principal

   principal.Button_1.Enabled:=.F.
   AtualizaImagem()

   On Key escape Of principal Action Sair()

   Center Window principal
   Activate Window principal
Return

***************************************************
Function AtualizaImagem()

   Try
      oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 10000 )
   Catch
      MsgInfo('Erro na Conexão com o Site')
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   cStringCookie:= oServer:getResponseHeader("Set-Cookie")

   nInie   := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">',  cHtml) + 47
   If nInie > 47
      cHtml1  := SubStr( cHtml, nInie)
      nFime   := At('</span>', cHtml1) - 1
      cMsgErro:= SubStr(cHtml, nInie, nFime)
      If ! Empty(cMsgErro)
         MsgInfo(cMsgErro, 'Erro no Site ' + cUrl)
         Return .f.
      EndIf
   EndIf
   nIni  := At('id="__VIEWSTATE" value=',  cHtml) + 24
   cHtml1:= SubStr( cHtml, nIni)
   nFim  := At('" />', cHtml1) - 1
   cViewState:= SubStr(cHtml, nIni, nFim)

   nIni1 := At('id="__EVENTVALIDATION" value="',  cHtml) + 30
   cHtml1:= SubStr( cHtml, nIni1)
   nFim1 := At('" />', cHtml1) - 1
   cEeventValidation:= SubStr(cHtml, nIni1, nFim1)

   nIni2 := At('id="__VIEWSTATEGENERATOR" value="',  cHtml) + 33
   cHtml1:= SubStr( cHtml, nIni2)
   nFim2 := At('" />', cHtml1) - 1
   cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)

   nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="',  cHtml) + 44
   cHtml1:= SubStr( cHtml, nIni3)
   nFim3 := At('" />', cHtml1) - 1
   cHiddenToken:= SubStr(cHtml, nIni3, nFim3)

   nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="',  cHtml) + 49
   cHtml1:= SubStr( cHtml, nIni4)
   nFim4 := At('" />', cHtml1) - 1
   cHiddenSom:= SubStr(cHtml, nIni4, nFim4)

   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" style="border-width:0px;" />', cHtml1) - 2
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
      Return .f.
   EndIf

   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      MsgInfo("Erro de criacao do arquivo de imagem")
      Return .f.
   EndIf
   cFile:= hb_base64Decode(cFile, cCodigo)
   FWrite(txt_file, cFile)
   FClose(txt_file)
   SetProperty ('principal', 'oImg_captcha', 'Picture', 'Captcha.png')
   principal.Button_1.Enabled:=.T.

Return .t.

***************************************************
Function Continuar()
Local oInternet, cParm, cRet:= cHtml:= '', cCaptcha:=principal.oTxt_captcha.Value
Private cChave:=principal.oChaveNFe.Value, cVersao:="", ctpAmb:="", cverAplic:="", cdhRecbto:="", cnProt:="", cdigVal:="", ccStat:="", cxMotivo:=""
Private cinfCpl:="", cinfAdFisco:="", cDiscAdicional:=""
Private aIde:={}, aEmit:={}, aDest:={}, aDet:={}, aICMS:={}, aIPI:={}, aPIS:={}, aCOFINS:={}, aTotais:={}, aTransp:={}, aCobr:={}
Private aMedicamentos:= {}

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
* TAM_LABEL se ZERO pega tudo, se MAIOR que ZERO pega o tamanho no início e se MENOR que ZERO exclui o tamanho no início e pega o restante

   AADD(aIde,{{"","cUF","ide",21,"Chave de Acesso",2},; //1- tratamento especial
              {"","cNF","",0,"Número",0},; //2- tratamento especial
              {"","natOp","",0,"Natureza da Operação",0},; //3-
              {"","indPag","",0,"Forma de Pagamento",1},; //4-
              {"","mod","",0,"Modelo",0},; //5-
              {"","serie","",0,"Série",0},; //6-
              {"","nNF","",0,"Número",0},; //7-
              {"","dhEmi","",0,"Data de Emissão",0},; //8- tratamento especial
              {"","dhSaiEnt","",0,"Entrada",0},; //9- tratamento especial
              {"","tpNF","",0,"Tipo da Operação",1},; //10-
              {"","idDest","",0,"Destino da operação",1},; //11-
              {"","cMunFG","",0,"Município da Ocorrência do Fato Gerador do ICMS",0},; //12-
              {"","tpImp","",0,"Formato de Impressão DANFE",1},; //13- tratamento especial
              {"","tpEmis","",0,"Tipo de Emissão",1},; //14-
              {"","cDV","",0,"Chave de Acesso",0},; //15- tratamento especial
              {"","tpAmb","",0,"Ambiente de autorização:",0},; //16- tratamento especial
              {"","finNFe","",0,"Finalidade",1},; //17-
              {"","indFinal","",0,"Consumidor final",1},; //18-
              {"","indPres","",0,"Presença do Comprador",1},; //19-
              {"","procEmi","",0,"Processo",1},; //20-
              {"","verProc","",0,"Versão do Processo",0}}) //21-

   AADD(aEmit,{{"","CNPJ","emit",20,"CNPJ",0},; //1- tratamento especial
              {"","CPF","",0,"CPF",0},; //2-
              {"","xNome","",0,"Nome / Razão Social",0},; //3-
              {"","xFant","",0,"Nome Fantasia",0},; //4-
              {"","xLgr","enderEmit",15,"Endereço",0},; //5- tratamento especial
              {"","nro","",0,"Endereço",0},; //6- tratamento especial
              {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
              {"","xBairro","",0,"Bairro / Distrito",0},; //8-
              {"","cMun","",0,"Município",7},; //9-
              {"","xMun","",0,"Município",-10},; //10-
              {"","UF","",0,"UF",0},; //11-
              {"","CEP","",0,"CEP",0},; //12- tratamento especial
              {"","cPais","",0,"País",4},; //13-
              {"","xPais","",0,"País",-7},; //14-
              {"","fone","",0,"Telefone",0},; //15- tratamento especial
              {"","IE","",0,"Inscrição Estadual",0},; //16-
              {"","IEST","",0,"Inscrição Estadual do Substituto Tributário",0},; //17-
              {"","IM","",0,"Inscrição Municipal",0},; //18-
              {"","CNAE","",0,"CNAE Fiscal",0},; //19-
              {"","CRT","",0,"Código de Regime Tributário",1}}) //20-

   AADD(aDest,{{"","CNPJ","dest",20,"CNPJ",0},; //1-
              {"","CPF","",0,"CPF",0},; //2-
              {"","idEstrangeiro","",0,"",0},; //3-
              {"","xNome","",0,"Nome / Razão Social",0},; //4-
              {"","xLgr","enderDest",15,"Endereço",0},; //5- tratamento especial
              {"","nro","",0,"Endereço",0},; //6- tratamento especial
              {"","xCpl","",0,"Endereço",0},; //7- tratamento especial
              {"","xBairro","",0,"Bairro / Distrito",0},; //8-
              {"","cMun","",0,"Município",7},; //9-
              {"","xMun","",0,"Município",-10},; //10-
              {"","UF","",0,"UF",0},; //11-
              {"","CEP","",0,"CEP",0},; //12- tratamento especial
              {"","cPais","",0,"País",4},; //13-
              {"","xPais","",0,"País",-7},; //14-
              {"","fone","",0,"Telefone",0},; //15- tratamento especial
              {"","indIEDest","",0,"Indicador IE",2},; //16- tratamento especial
              {"","IE","",0,"Inscrição Estadual",0},; //17-
              {"","ISUF","",0,"Inscrição SUFRAMA",0},; //18-
              {"","IM","",0,"IM",0},; //19-
              {"","email","",0,"E-mail",0}}) //20-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML}

   AADD(aTotais,{{"0.00","vBC","Base de Cálculo ICMS"},; //1-
                 {"0.00","vICMS","Valor do ICMS"},; //2-
                 {"0.00","vICMSDeson","Valor do ICMS Desonerado"},; //3-
                 {"0.00","vFCPUFDest","Valor Total ICMS FCP"},; //4-
                 {"0.00","vBCST","Base de Cálculo ICMS ST"},; //5-
                 {"0.00","vST","Valor ICMS Substituição"},; //6-
                 {"0.00","vProd","Valor Total dos Produtos"},; //7-
                 {"0.00","vFrete","Valor do Frete"},; //8-
                 {"0.00","vSeg","Valor do Seguro"},; //9-
                 {"0.00","vDesc","Valor Total dos Descontos"},; //10-
                 {"0.00","vII","Valor Total do II"},; //11-
                 {"0.00","vIPI","Valor Total do IPI"},; //12-
                 {"0.00","vPIS","Valor do PIS"},; //13-
                 {"0.00","vCOFINS","Valor da COFINS"},; //14-
                 {"0.00","vOutro","Outras Despesas Acessórias"},; //15-
                 {"0.00","vNF","Valor Total da NFe"}}) //16-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}

   AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
                 {"","CNPJ","transporta",8,"CNPJ",0},; //2-
                 {"","CPF","",0,"CPF",0},; //3-
                 {"","xNome","",0,"Razão Social / Nome",0},; //4-
                 {"","IE","",0,"Inscrição Estadual",0},; //5-
                 {"","xEnder","",0,"Endereço Completo",0},; //6-
                 {"","xMun","",0,"Município",0},; //7-
                 {"","UF","",0,"UF",0},; //8-
                 {"",'placa','veicTransp',11,'Placa',0},; //9-
                 {"","UF","",0,"UF",0},; //10-
                 {"","RNTC","",0,"RNTC",0},; //11-
                 {"","qVol","vol",17,"Quantidade",0},; //12-
                 {"","esp","",0,"Espécie",0},; //13-
                 {"","marca","",0,"Marca dos Volumes",0},; //14-
                 {"","nVol","",0,"Volume",0},; //15-
                 {"","pesoL","",0,"Peso Líquido",0},; //16-
                 {"","pesoB","",0,"Peso Bruto",0}}) //17-

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG}

   AADD(aCobr,{{"","nDup"},; //1-
               {"","dVenc"},; //2-
               {"","vDup"},; //3-
               {"","nDup"},; //4-
               {"","dVenc"},; //5-
               {"","vDup"},; //6-
               {"","nDup"},; //7-
               {"","dVenc"},; //8-
               {"","vDup"},; //9-
               {"","nDup"},; //10-
               {"","dVenc"},; //11-
               {"","vDup"},; //12-
               {"","nDup"},; //13-
               {"","dVenc"},; //14-
               {"","vDup"},; //15-
               {"","nDup"},; //16-
               {"","dVenc"},; //17-
               {"","vDup"},; //18-
               {"","nDup"},; //19-
               {"","dVenc"},; //20-
               {"","vDup"},; //21-
               {"","nDup"},; //22-
               {"","dVenc"},; //23-
               {"","vDup"},; //24-
               {"","nDup"},; //25-
               {"","dVenc"},; //26-
               {"","vDup"},; //27-
               {"","nDup"},; //28-
               {"","dVenc"},; //29-
               {"","vDup"}}) //30-

   If ! DigitoChave(cChave)
      Return Nil
   EndIf

   cParm:= { { "__EVENTARGUMENT", "" },;
             { "__EVENTTARGET", "" },;
             { "__EVENTVALIDATION", cEeventValidation },;
             { "__VIEWSTATE", cviewState },;
             { "__VIEWSTATEGENERATOR", cViewStateGenerator },;
             { "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
             { "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
             { "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
             { "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
             { "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
             { "ctl00$txtPalavraChave", "" },;
             { "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}

   Try
      oInternet:= TIPClientHTTP():New(cUrl, .f.)
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      If oInternet:POST(cParm)
         cRet:=oInternet:ReadAll()
      Else
         msgInfo('Erro no Post ' + cUrl, 'Aviso do Sistema')
         Return .F.
      EndIf
   Else
      msgInfo('Erro na Conexão')
      Return .f.
   EndIf
   oInternet:Close()

   If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
      cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
      cPart:= Substr(cPart, (At('<li>', cPart) + 4))
      MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))))
      Return .f.
   EndIf

   Try
      oInternet:= TIPClientHTTP():New(cUrl1, .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      cHtml:=oInternet:ReadAll()
      cStringCookie:= oInternet:GetCookies()
   Else
      msgInfo('Erro na Conexão')
      Return .f.
   EndIf
   oInternet:Close()

   If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
      cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
      MsgInfo(SubStr(cPart, 1, (At('</span>', cPart) - 1)))
      Return .f.
   EndIf

   If ! Empty(cHtml)
      nIni  := At('<html><link ',  cHtml)
      cParte:= SubStr(cHtml, nIni)
      nIni  := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
      cParte:= SubStr(cParte, 1, nIni - 1)
      nFim  := At('</form>', cParte)
      cFile := SubStr(cParte, nFim)
//memowrit('site.txt',cfile)
      nIni   := RAt('fixo-prod-serv-numero',cFile)
      c_span := SubStr(cFile, nIni)
      nIni   := AT('<span>',c_span)+6
      nTamTag:= AT('</span>',c_span)-nIni
      nTotPro:= Val(alltrim(SubStr(c_span,nIni,nTamTag)))

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
      For p_=1 to nTotPro
        AADD(aDet,{{"","cProd","Código do Produto",0},; //1-
              {"","cEAN","Código EAN Comercial",0},; //2-
              {"","xProd","fixo-prod-serv-descricao",0},; //3-
              {"","NCM","Código NCM",0},; //4-
              {"","NVE","",0},; //5-
              {"","CEST","Código CEST",0},; //6-
              {"","EXTIPI","Código EX da TIPI",0},; //7-
              {"","CFOP","CFOP",0},; //8-
              {"","uCom","Unidade Comercial",0},; //9-
              {"","qCom","Quantidade Comercial",0},; //10-
              {"","vUnCom","Valor unitário de comercialização",0},; //11-
              {"","vProd","fixo-prod-serv-vb",0},; //12-
              {"","cEANTrib","Código EAN Tributável",0},; //13-
              {"","uTrib","Unidade Tributável",0},; //14-
              {"","qTrib","Quantidade Tributável",0},; //15-
              {"","vUnTrib","Valor unitário de tributação",0},; //16-
              {"","vFrete","Valor Total do Frete",0},; //17-
              {"","vSeg","Valor do Seguro",0},; //18-
              {"","vDesc","Valor do Desconto",0},; //19-
              {"","vOutro","Outras Despesas Acessórias",0},; //20-
              {"","indTot","Indicador de Composição do Valor Total da NF-e",1},; //21-
              {"","nItemPed","Item do pedido de compra",0}}) //22-

		  AADD(aMedicamentos, {{"","Lote",'Nro. do Lote', 0},; //1-
        							  {"","qLote",'Quantidade de produtos no lote', 0},; //2-
                             {"","dFab",'Data de fabricaçã', 0},; //3-
                             {"","dVal",'Data de validade', 0},;  //4-
                             {"","vPMC",'Preço Máximo Consumido', 0},; //5-
                             {"","infAdProd",'Descrição', 0}}) //6-


        AADD(aICMS,{{"","orig","Origem da Mercadoria",1},; //1- ICMS Normal e  ST
               {"","CST","Tributação do ICMS",2},; //2-
               {"","CSOSN","Código de Situação da Operação",3},; //3-
               {"","modBC","Modalidade Definição da BC do ICMS",1},; //4-
               {"","pRedBC","Percentual Redução de BC do ICMS",0},; //5-
               {"","vBC","Base de Cálculo",0},; //6-
               {"","pICMS","Alíquota",0},; //7-
               {"","vICMS","Valor",0},; //8-
               {"","vICMSDeson","",0},; //9-
               {"","motDesICMS","",0},; //10-
               {"","modBCST","Modalidade de determinação da BC do ICMS ST",1},; //11-
               {"","pMVAST","Percentual Margem Valor Adicionado do ICMS ST",0},; //12-
               {"","pRedBCST","Percentual da Redução de BC do ICMS ST",0},; //13-
               {"","vBCST","Valor da BC do ICMS ST",0},; //14-
               {"","pICMSST","Alíquota do imposto do ICMS ST",0},; //15-
               {"","vICMSST","Valor do ICMS ST",0},; //16-
               {"","vBCSTRet","Valor da BC do ICMS ST retido",0},; //17-
               {"","vICMSSTRet","Valor do ICMS ST retido",0},; //18-
               {"","vICMSOp","",0},; //19-
               {"","pDif","",0},; //20-
               {"","vICMSDif","",0},; //21-
               {"","pCredSN","Alíquota aplicável de cálculo do crédito",0},; //22-
               {"","vCredICMSSN","Valor crédito do ICMS",0}}) //23-

        AADD(aIPI,{{"","cEnq","Código de Enquadramento", 3},;
        		  {"","CST","CST", 2},; //1-
              {"","vBC","Base de Cálculo", 0},; //2-
              {"","pIPI","Alíquota", 0},; //3-
              {"","vIPI","Valor IPI", 0},; //4-
              {"","qBCProd","", 0},; //5-
              {"","vAliqProd","", 0}}) //6-

        AADD(aPIS,{{"","CST","CST",2},; //1-
              {"","vBC","Base de Cálculo",0},; //2-
              {"","pPIS","Alíquota",0},; //3-
              {"","vPIS","Valor",0},; //4-
              {"","qBCProd","",0},; //5-
              {"","vAliqProd","",0}}) //6-

        AADD(aCOFINS,{{"","CST","CST",2},; //1-
                 {"","vBC","Base de Cálculo",0},; //2-vBC
                 {"","pCOFINS","Alíquota",0},; //3-
                 {"","vCOFINS","Valor",0},; //4-
                 {"","qBCProd","",0},; //5-
                 {"","vAliqProd","",0}}) //6-

      Next

      nIni   := At('<div class="GeralXslt"',cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('<div id="Emitente"',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //ide
      GeraTag("ide",cParte)

      nIni   := At('<div id="Emitente"',cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('</div>',cParte)
      cParte  := SubStr(cParte, 1, nIni - 1)  //emit
      GeraTag("emit",cParte)

      nIni   := At('<div id="DestRem"',cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('</div>',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //dest
      GeraTag("dest",cParte)

      nIni   := At('<td class="fixo-prod-serv-numero"><span>', cFile)
      cParte := SubStr(cFile, nIni)
      nIni   := At('</body></html>', cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //det
      GeraTag("det", cParte)

      nIni   := At('<legend class="titulo-aba">Totais</legend>',cFile)
      cParte := SubStr(cFile, nIni+42)
      nIni   := At('<div id="aba_nft_5"',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //totais
      GeraTag("totais",cParte)

      nIni   := At('Dados do Transporte</legend>',cFile)
      cParte := SubStr(cFile, nIni+29)
      nIni   := At('<div id="Cobranca"',cParte)
      cParte := SubStr(cParte, 1, nIni - 1)  //transp
      GeraTag("transp",cParte)

      nIni   := At('<legend>Duplicatas</legend><table',cFile)
      if nIni>0
        cParte := SubStr(cFile, nIni)
        nIni   := At('</table>',cParte)
        cParte := SubStr(cParte, 1, nIni - 1)  //cobr
        GeraTag("cobr",cParte)
      endif

      GravaXML()

   Else
      msgInfo('Erro ao ler retorno da Consulta')
      Return .f.
   EndIf


Return Nil

***************************************
Function DigitoChave(CodigoChave)
Local indice:= '4329876543298765432987654329876543298765432'
Local digito

   nSoma:= 0
   For contador:= 1 to 43
      nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
   Next

   digito:= (nSoma % 11)
   If digito == 0 .Or. digito == 1
      digito:= 0
   Else
      digito:= (11 - digito)
   EndIf
   If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
      MsgStop('Código da Chave Errado....', 'Aviso do Sistema')
      principal.oChaveNFe.SetFocus
      Return .f.
   EndIf
Return .t.

**************************************
Function Troca_Acento(cTexto)

   cTexto := StrTran( cTexto, "ó", "ó" )
   cTexto := StrTran( cTexto, "á", "á" )

Return cTexto

***************************************************
Function Limpar()
principal.oChaveNFe.Value:=SPACE(44)
principal.oTxt_captcha.Value:=SPACE(6)
principal.oChaveNFe.SetFocus
Return Nil

***************************************************
Function Sair()
principal.release
Return Nil

***************************************************
Function GeraTag(_tag, cParte)

if _tag=="ide"
  cPar_:= StrTran(cFile,Chr(13)+Chr(10),"")
  cPar_:= StrTran(cPar_,Chr(160),"")
  nIni := At('<legend>Informações Complementares de Interesse do Contribuinte</legend>', cPar_)
  if nIni>0
    c_span:=SubStr(cPar_, nIni+70)
    nIni:=AT('<div style="word-wrap: break-word">',c_span)
    c_span:=SubStr(c_span, nIni+35)
    nIni:=AT('</div></span>',c_span)
    cinfCpl:=alltrim(SubStr(c_span,1,nIni-1))
  endif

  cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
  cPar_:=StrTran(cPar_,Chr(160),"")

  nIni:=AT('Situação Atual:',cPar_)
  c_span:=SubStr(cPar_, nIni+15)
  nIni:=AT('(Ambiente de autorização:',c_span)
  cxMotivo:=alltrim(SubStr(c_span,1,nIni-1))
  if "AUTORIZADA" $ cxMotivo
    ccStat:="100"
    cxMotivo:="Autorizado o uso da NF-e"
  endif
  if "CANCELADA" $ cxMotivo
    ccStat:="101"
    cxMotivo:="Cancelamento de NF-e homologado"
  endif

  nIni:=AT('Data Inclusão AN</label></td></tr><tr><td><span>',cPar_)
  c_span:=SubStr(cPar_, nIni+50)
  nIni:=AT('<span>',c_span)+6
  nTamTag:=AT('<input',c_span)-nIni
  cnProt:=alltrim(SubStr(c_span,nIni,nTamTag))
  c_span:=SubStr(c_span, nIni+nTamTag)
  nIni:=AT('<span>',c_span)+6
  c_span:=SubStr(c_span,nIni)
  nTamTag:=AT('</span>',c_span)-1  //nIni
  cdhRecbto:=alltrim(SubStr(c_span,1,nTamTag))
  cdhRecbto:=SubStr(cdhRecbto,7,4)+"-"+SubStr(cdhRecbto,4,2)+"-"+left(cdhRecbto,2)+"T"+Right(cdhRecbto,14)
  nIni:=AT('<i>Digest</i> Value da NF-e',cPar_)
  c_span:=SubStr(cPar_, nIni+20)
  nIni:=AT('<span>',c_span)+6
  nTamTag:=AT('</span>',c_span)-nIni
  cdigVal:=alltrim(SubStr(c_span,nIni,nTamTag))

  nIni:=AT('Versão XML',cParte)
  c_span:=SubStr(cParte, nIni)
  nIni:=AT('<span>',c_span)+6
  nTamTag:=AT('</span>',c_span)-nIni
  cVersao:=alltrim(SubStr(c_span,nIni,nTamTag))
  For i:= 1 to Len(aIde[1])
    cPar_:= cParte
    if i == 12
      cPar_:= cFile
    endif
    if i == 13
      cPar_:= cFile
    endif
    nIni  := AT(aIde[1,i,5],cPar_)
    c_span:= SubStr(cPar_, nIni)
    if i != 16
      nIni   :=AT('<span>', c_span) + 6
      nTamTag:= AT('</span>', c_span) - nIni
      c_tag  := alltrim(SubStr(c_span, nIni, nTamTag))
    else
      nIni := AT('</legend>', c_span)
      c_tag:= alltrim(SubStr(c_span, 1, nIni - 1))
      if AT('produção', c_tag) > 0
        c_tag:= "1"
      else
        c_tag:= "2"
      endif
      ctpAmb:= c_tag
    endif
    if i==2
    	c_tag:= SubStr(cChave, 36, 8)
      //c_tag:= StrZero(Val(c_tag), 9)
    endif
    if i==8 .or. i==9
      if !Empt(c_tag)
        c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)+"T"+SubStr(c_tag,12)
      endif
    endif
    if i==15
      c_tag:=right(c_tag,1)
    endif
    if aIde[1,i,6]!=0
      if aIde[1,i,6]>0
        c_tag:=left(c_tag,aIde[1,i,6])
      else
        c_tag:=SubStr(c_tag,Abs(aIde[1,i,6])+1)
      endif
    endif
    aIde[1,i,1]:=c_tag
  Next
endif

if _tag == "emit"
  For i=1 to Len(aEmit[1])
    cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
    cPar_:=StrTran(cPar_,Chr(160),"")
    nIni:=AT(aEmit[1,i,5],cPar_)
    if nIni>0
      c_span:=SubStr(cPar_, nIni)
      nIni:=AT('<span>',c_span)+6
      nTamTag:=AT('</span>',c_span)-nIni
      c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
      if i>=1 .and. i<=2
        c_tag:=StrTran(c_tag,".","")
        c_tag:=StrTran(c_tag,"/","")
        c_tag:=StrTran(c_tag,"-","")
      endif
      if i>=5 .and. i<=7
        nIni:= AT(",",c_tag)
        if i == 5
          c_tag:= Left(c_tag,nIni-1)
        elseif i == 6
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni > 0
            c_tag:= Left(c_tag, nIni - 1)
          endif
        else
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni>0
            c_tag:= alltrim(SubStr(c_tag, nIni + 1))
          else
            c_tag:= ""
          endif
        endif
      endif
      if i==12
        c_tag:=StrTran(c_tag,"-","")
      endif
      if i==15
        c_tag:= StrTran(c_tag,"(","")
        c_tag:= StrTran(c_tag,")","")
        c_tag:= StrTran(c_tag,"-","")
      endif
      if aEmit[1, i, 6] != 0
        if aEmit[1, i, 6] > 0
          c_tag:= left(c_tag,aEmit[1, i, 6])
        else
          c_tag:= alltrim(SubStr(c_tag, Abs(aEmit[1, i, 6]) + 1))
          c_tag:= alltrim(StrTran(c_tag, "-", ""))
        endif
      endif
      aEmit[1, i, 1]:= c_tag
    endif
  Next
endif

if _tag == "dest"
  For i=1 to Len(aDest[1])
    cPar_:= StrTran(cParte, Chr(13) + Chr(10), "")
    cPar_:= StrTran(cPar_, Chr(160), "")
    nIni := AT(aDest[1, i, 5], cPar_)
    if nIni > 0
      c_span := SubStr(cPar_, nIni)
      nIni   := AT('<span>',c_span)+6
      nTamTag:= AT('</span>',c_span)-nIni
      c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
      if i >= 1 .and. i <= 2
        c_tag:= StrTran(c_tag, ".", "")
        c_tag:= StrTran(c_tag, "/", "")
        c_tag:= StrTran(c_tag, "-", "")
      endif
      If i >= 5 .and. i <= 7
        nIni:= AT(",", c_tag)
        if i == 5
          c_tag:= Left(c_tag,nIni-1)
        elseif i == 6
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni > 0
            c_tag:= Left(c_tag, nIni - 1)
          endif
        else
          c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
          nIni := AT(" ", c_tag)
          if nIni > 0
            c_tag:= alltrim(SubStr(c_tag, nIni + 1))
          else
            c_tag:= ""
          endif
        endif
      EndIf
      if i == 12
        c_tag:= StrTran(c_tag, "-", "")
      endif
      if i==15
        c_tag:= StrTran(c_tag, "(", "")
        c_tag:= StrTran(c_tag, ")", "")
        c_tag:= StrTran(c_tag, "-", "")
      endif
      if i==16
        c_tag:= alltrim(Str(Val(c_tag)))
      endif
      if aDest[1, i, 6] != 0
        if aDest[1, i, 6] > 0
          c_tag:= left(c_tag, aDest[1, i, 6])
        else
          c_tag:= alltrim(SubStr(c_tag, Abs(aDest[1,i,6]) + 1))
          c_tag:= alltrim(StrTran(c_tag, "-", ""))
        endif
      endif
      aDest[1, i, 1]:= c_tag
    endif
  Next
endif

if _tag == "det"
	cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
	cPar_ := StrTran(cPar_, Chr(160), "")
   For p_:= 1 to Len(aDet)
   	For i:= 1 to Len(aDet[p_])
      	nIni:= At(aDet[p_, i, 3], cPar_)
      	if nIni > 0
        		c_span := SubStr(cPar_, nIni)
        		nIni   := At('<span>',c_span)+6
        		nTamTag:= At('</span>',c_span)-nIni
        		c_tag  := AllTrim(SubStr(c_span,nIni,nTamTag))
        		if aDet[p_, i, 4] != 0
          		if aDet[p_, i, 4] > 0
            		c_tag:= left(c_tag, aDet[p_, i, 4])
          		else
            		c_tag:= alltrim(SubStr(c_tag, Abs(aDet[p_, i, 4]) + 1))
            		c_tag:= alltrim(StrTran(c_tag, "-", ""))
          		endif
        		endif
        		If i != 3
        	  		c_tag:= StrTran(c_tag, ".",  "")
           		c_tag:= StrTran(c_tag, ",", ".")
        		endIf
        		aDet[p_, i, 1]:= c_tag
      	endif
    	Next

 	   For i:= 1 To Len(aICMS[p_])
   	   nIni:= At(aICMS[p_, i, 3], cPar_)
      	if nIni > 0
		   	c_span := SubStr(cPar_, nIni)
      		nIni   := At('<span>', c_span) + 6
		      nTamTag:= At('</span>', c_span) - nIni
      		c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
        		If aICMS[p_, i, 4] != 0
          		if aICMS[p_, i, 4] > 0
						c_tag:= Left(c_tag, aICMS[p_, i, 4])
          		else
            		c_tag:= AllTrim(SubStr(c_tag, Abs(aICMS[p_, i, 4]) + 1))
            		c_tag:= AllTrim(StrTran(c_tag, "-", ""))
          		endif
        		endif
        		c_tag:= StrTran(c_tag, ".",  "")
        		c_tag:= StrTran(c_tag, ",", ".")
        		aICMS[p_, i, 1]:= c_tag
      	endif
    	Next

    nIni:= AT('<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_)
    if nIni > 0
      cPar_:= SubStr(cPar_, nIni)
      For i:= 1 To Len(aIPI[p_])
        nIni:= AT(aIPI[p_, i, 3], cPar_)
        if nIni > 0
          c_span := SubStr(cPar_, nIni)
          nIni   := AT('<span>', c_span) + 6
          nTamTag:= AT('</span>', c_span) - nIni
          c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
          if aIPI[p_, i, 4] != 0
            if aIPI[p_, i, 4] > 0
              c_tag:= Left(c_tag, aIPI[p_, i, 4])
            else
              c_tag:= Alltrim(SubStr(c_tag, Abs(aIPI[p_, i, 4]) + 1))
              c_tag:= Alltrim(StrTran(c_tag, "-", ""))
            endif
          endif
          c_tag:= StrTran(c_tag, ".", "")
          c_tag:= StrTran(c_tag, ",", ".")
          aIPI[p_, i, 1]:= c_tag
        endif
      Next
    endif

    nIni:= At('<legend class="toggle">PIS</legend>', cPar_)
    if nIni > 0
      cPar_:= SubStr(cPar_, nIni)
      For i:= 1 to Len(aPIS[p_])
        nFim:= At('<td class="fixo-prod-serv-numero"><span>', cPar_)
        cPar1_:= SubStr(cPar_, 1, nFim)
        nIni:= AT(aPIS[p_, i, 3], cPar1_)
        if nIni > 0
          c_span := SubStr(cPar1_, nIni)
          nIni   := At('<span>', c_span) + 6
          nTamTag:= At('</span>', c_span) - nIni
          c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
          if aPIS[p_,i,4] != 0
            if aPIS[p_,i,4] > 0
              c_tag:= Left(c_tag,aPIS[p_,i,4])
            else
              c_tag:= AllTrim(SubStr(c_tag, Abs(aPIS[p_, i, 4]) + 1))
              c_tag:= AllTrim(StrTran(c_tag, "-", ""))
            endif
          endif
          c_tag:= StrTran(c_tag, ".",  "")
          c_tag:= StrTran(c_tag, ",", ".")
          aPIS[p_, i, 1]:= c_tag
        endif
      Next
    endif

    nIni:= AT('<legend class="toggle">COFINS</legend>', cPar_)
    if nIni > 0
      cPar_:= SubStr(cPar_, nIni)
      For i:= 1 to Len(aCOFINS[p_])
      	nFim  := At('<td class="fixo-prod-serv-numero">', cPar_)
         cPar1_:= SubStr(cPar_, 1, nFim)
         nIni  := AT(aCOFINS[p_, i, 3], cPar1_)
        if nIni > 0
          c_span := SubStr(cPar1_, nIni)
          nIni   := AT('<span>', c_span) + 6
          nTamTag:= AT('</span>', c_span) - nIni
          c_tag:=alltrim(SubStr(c_span, nIni, nTamTag))
          if aCOFINS[p_, i, 4] != 0
            if aCOFINS[p_, i, 4] > 0
              c_tag:= left(c_tag, aCOFINS[p_, i, 4])
            else
              c_tag:= alltrim(SubStr(c_tag, Abs(aCOFINS[p_, i, 4]) + 1))
              c_tag:= alltrim(StrTran(c_tag, "-", ""))
            endif
          endif
          c_tag:= StrTran(c_tag, ".",  "")
          c_tag:= StrTran(c_tag, ",", ".")
          aCOFINS[p_, i, 1]:= c_tag
        endif
      Next
    endif

   nIni:= At('<legend>Detalhamento específico dos medicamentos</legend>', cPar_)
    if nIni > 0
      cPar_:=SubStr(cPar_, nIni)
      For i:= 1 to Len(aMedicamentos[p_])
        nIni:= AT(aMedicamentos[p_, i, 3], cPar_)
        if nIni > 0
          c_span := SubStr(cPar_, nIni)
          nIni   := At('<span>', c_span) + 6
          nTamTag:= At('</span>', c_span) - nIni
          c_tag  := AllTrim(SubStr(c_span, nIni, nTamTag))
          if aMedicamentos[p_,i,4] != 0
            if aMedicamentos[p_,i,4] > 0
              c_tag:= Left(c_tag,aMedicamentos[p_,i,4])
            else
              c_tag:= AllTrim(SubStr(c_tag, Abs(aMedicamentos[p_, i, 4]) + 1))
              c_tag:= AllTrim(StrTran(c_tag, "-", ""))
            endif
          endif
          If i != 6
          	c_tag:= StrTran(c_tag, ".",  "")
          	c_tag:= StrTran(c_tag, ",", ".")
          endif
          if StrZero(i, 2) $ "-03-04"
        		c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
          endif
          aMedicamentos[p_, i, 1]:= c_tag
        endif
      Next
    endif
    nIni  := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
    cPar_ := SubStr(cPar_, nIni)
  Next
endif

if _tag=="totais"
  For i=1 to Len(aTotais[1])
    cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
    cPar_:=StrTran(cPar_,Chr(160),"")
    nIni:=AT(aTotais[1,i,3],cPar_)
    if nIni>0
      c_span:=SubStr(cPar_, nIni)
      nIni:=AT('<span>',c_span)+6
      nTamTag:=AT('</span>',c_span)-nIni
      c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
      c_tag:=StrTran(c_tag,".","")
      c_tag:=StrTran(c_tag,",",".")
      aTotais[1,i,1]:=c_tag
    endif
  Next
endif

if _tag=="transp"
  For i=1 to Len(aTransp[1])
    cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
    cPar_:=StrTran(cPar_,Chr(160),"")
    nIni:=AT(aTransp[1,i,5],cPar_)
    if nIni>0
      c_span:=SubStr(cPar_, nIni)
      nIni:=AT('<span>',c_span)+6
      nTamTag:=AT('</span>',c_span)-nIni
      c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
      if i>=2 .and. i<=3
        c_tag:=StrTran(c_tag,".","")
        c_tag:=StrTran(c_tag,"/","")
        c_tag:=StrTran(c_tag,"-","")
      endif
      if aTransp[1,i,6]!=0
        if aTransp[1,i,6]>0
          c_tag:=left(c_tag,aTransp[1,i,6])
        else
          c_tag:=alltrim(SubStr(c_tag,Abs(aTransp[1,i,6])+1))
          c_tag:=alltrim(StrTran(c_tag,"-",""))
        endif
      endif
      aTransp[1,i,1]:=c_tag
    endif
  Next
endif

if _tag=="cobr"
  cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
  cPar_:=StrTran(cPar_,Chr(160),"")
  For i=1 to Len(aCobr[1])
    nIni:=AT('<span>',cPar_)
    if nIni>0
      cPar_:=SubStr(cPar_, nIni+6)
      nTamTag:=AT('</span>',cPar_)-1
      c_tag:=alltrim(SubStr(cPar_,1,nTamTag))
      c_tag:=StrTran(c_tag,".","")
      c_tag:=StrTran(c_tag,",",".")
      if StrZero(i,2) $ "-02-05-08-11-14-17-20-23-26-29"
        c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
      endif
      aCobr[1,i,1]:=c_tag
    else
      Exit
    endif
  Next
endif


return Nil

***************************************************
Function GravaXML()
Local cXML:='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+cVersao+'" Id="NFe'+cChave+'">'
cTagPai:=""
nFimTagPai:=0
For i=1 to Len(aIde[1])
  if !Empt(aIde[1,i,3])
    nFimTagPai:=aIde[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aIde[1,i,3]
    cXML+='<'+aIde[1,i,3]+'>'
  endif
  if !Empt(aIde[1,i,1])
    cXML+='<'+aIde[1,i,2]+'>'+aIde[1,i,1]+'</'+aIde[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
  endif
Next
For i=1 to Len(aEmit[1])
  if !Empt(aEmit[1,i,3])
    nFimTagPai:=aEmit[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aEmit[1,i,3]
    cXML+='<'+aEmit[1,i,3]+'>'
  endif
  if !Empt(aEmit[1,i,1])
    cXML+='<'+aEmit[1,i,2]+'>'+aEmit[1,i,1]+'</'+aEmit[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
  endif
Next
For i=1 to Len(aDest[1])
  if !Empt(aDest[1,i,3])
    nFimTagPai:=aDest[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aDest[1,i,3]
    cXML+='<'+aDest[1,i,3]+'>'
  endif
  if !Empt(aDest[1,i,1])
    cXML+='<'+aDest[1,i,2]+'>'+aDest[1,i,1]+'</'+aDest[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
  endif
Next

For p_=1 to Len(aDet)
  cXML+='<det nItem="'+alltrim(Str(p_))+'"><prod>'
  For i=1 to Len(aDet[p_])
    if !Empt(aDet[p_,i,1])
      cXML+='<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
    endif
  Next

  lpoemTag:= .F.
  For i:= 1 to Len(aMedicamentos[p_])
    if i == 1
      if ! Empty(aMedicamentos[p_,i,1])
        cXML+= '<med><nLote>' + aMedicamentos[p_,i,1] + '</nLote>'
        lpoemTag:=.T.
      endif
    Else
      if ! Empt(aMedicamentos[p_,i,1])
         If i == 6
             cDiscAdicional:= '<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
         Else
             cXML+='<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
         Endif
      endif
    EndIf
  Next
  if lpoemTag
    cXML+='</med>'
  endif
  cXML+= '</prod><imposto><ICMS>'
  cTag_:='ICMS'
  For i:= 1 to Len(aICMS[p_])
    if i == 1
      if ! Empty(aICMS[p_, 2, 1])
        cTag_+= aICMS[p_, 2, 1]
      else
        cTag_+= 'SN' + aICMS[p_, 3, 1]
      endif
      cXML+= '<' + cTag_ + '>'
    endif
    if !Empty(aICMS[p_, i, 1])
    	If aICMS[p_, 2, 1] == '00'
    		If StrZero(i, 2) $ "-01-02-04-06-07-08"
      		cXML+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '10'
      	If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '20'
      	If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '30'
      	If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '40' .Or. aICMS[p_, 2, 1] == '41' .Or. aICMS[p_, 2, 1] == '50'
      	If StrZero(i, 2) $ "-01-02-09-10"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '51'
      	If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '60'
      	If StrZero(i, 2) $ "-01-02-17-18"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '70'
      	If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10-11-12-13-14-15-16"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      ElseIf aICMS[p_, 2, 1] == '90'
      	If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
      		cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      	EndIf
      Else
      	cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
      EndIf
    endif
  Next
  cXML+='</'+cTag_+'></ICMS>'

  lpoemTag:= .F.
  For i:= 1 to Len(aIPI[p_])
    if i == 1
      if ! Empty(aIPI[p_,i,1])
        cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPITrib>'
        lpoemTag:=.T.
      endif
    Else
      if ! Empt(aIPI[p_,i,1])
        cXML+='<'+aIPI[p_,i,2]+'>'+ aIPI[p_,i,1] + '</'+aIPI[p_,i,2]+'>'
      endif
    EndIf
  Next
  if lpoemTag
    cXML+='</IPITrib></IPI>'
  endif

  lpoemTag:= .F.
  For i:= 1 to Len(aPIS[p_])
    if i == 1
      if ! Empty(aPIS[p_, i, 1])
        If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
        	 cXML+= '<PIS><PISAliq>'
        ElseIf Val(aPIS[p_, 1, 1]) == 3
        	 cXML+= '<PIS><PISQte>'
        ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
          cXML+= '<PIS><PISNT>'
        ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
 			 cXML+= '<PIS><PISOutr>'
 		  EndIf
        lpoemTag:= .T.
      endif
    endif
    if ! Empty(aPIS[p_, i, 1])
      cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
    endif
  Next
  if lpoemTag
     If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
     	 cXML+= '</PISAliq></PIS>'
     ElseIf Val(aPIS[p_, 1, 1]) == 3
     	 cXML+= '</PISQte></PIS>'
     ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
       cXML+= '</PISNT></PIS>'
     ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
    	 cXML+= '</PISOutr></PIS>'
 	  EndIf
  endif
  lpoemTag:=.F.
  For i=1 to Len(aCOFINS[p_])
    if i==1
      if !Empt(aCOFINS[p_,i,1])
      	If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
       	 cXML+= '<COFINS><COFINSAliq>'
         ElseIf Val(aPIS[p_, 1, 1]) == 3
     	    cXML+= '<COFINS><COFINSQte>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
          cXML+= '<COFINS><COFINSNT>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
    	    cXML+= '<COFINS><COFINSOutr>'
 	      EndIf
        lpoemTag:=.T.
      endif
    endif
    if !Empt(aCOFINS[p_,i,1])
      cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
    endif
  Next
  if lpoemTag
    If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
       	 cXML+= '</COFINSAliq></COFINS>'
         ElseIf Val(aPIS[p_, 1, 1]) == 3
     	    cXML+= '</COFINSQte></COFINS>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
          cXML+= '</COFINSNT></COFINS>'
         ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
    	    cXML+= '</COFINSOutr></COFINS>'
 	      EndIf
  endif
  cXML+= '</imposto>'
  If ! Empty(cDiscAdicional)
     cXml+= cDiscAdicional
  EndIf
  cXML+= '</det>'
Next
cXML+='<total><ICMSTot>'
For i=1 to Len(aTotais[1])
  if !Empt(aTotais[1,i,1])
    cXML+='<'+aTotais[1,i,2]+'>'+aTotais[1,i,1]+'</'+aTotais[1,i,2]+'>'
  endif
Next
cXML+='</ICMSTot></total>'
For i=1 to Len(aTransp[1])
  if !Empt(aTransp[1,i,3])
    nFimTagPai:=aTransp[1,i,4]
    cTagPai+="|"+StrZero(nFimTagPai,2)+aTransp[1,i,3]
    cXML+='<'+aTransp[1,i,3]+'>'
  endif
  if !Empt(aTransp[1,i,1])
    cXML+='<'+aTransp[1,i,2]+'>'+aTransp[1,i,1]+'</'+aTransp[1,i,2]+'>'
  endif
  if i==nFimTagPai
    nIni:=RAT("|",cTagPai)
    cTag:=Substr(cTagPai,nIni+1)
    cXML+='</'+SubStr(cTag,3)+'>'
    cTagPai:=SubStr(cTagPai,1,nIni-1)
    if nIni>1
      nIni:=RAT("|",cTagPai)
      nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
    else
      nFimTagPai:=0
    endif
    if SubStr(cTag,3)=="vol"
      cXML+='</transp>'
    endif
  endif
Next
if !Empt(aCobr[1,1,1])
  cXML+='<cobr>'
  For i=1 to Len(aCobr[1])
    if !Empt(aCobr[1,i,1])
      if StrZero(i,2) $ "-01-04-07-10-13-16-19-22-25-28"
        if i>2
          cXML+='</dup>'
        endif
        cXML+='<dup>'
      endif
      cXML+='<'+aCobr[1,i,2]+'>'+aCobr[1,i,1]+'</'+aCobr[1,i,2]+'>'
    endif
  Next
  cXML+='</dup></cobr>'
endif
if !Empt(cinfCpl) .or. !Empt(cinfAdFisco)
  cXML+='<infAdic>'
  if !Empt(cinfAdFisco)
    cXML+='<infAdFisco>'+cinfAdFisco+'</infAdFisco>'
  endif
  if !Empt(cinfCpl)
    cXML+='<infCpl>'+cinfCpl+'</infCpl>'
  endif
  cXML+='</infAdic>'
endif
cXML+='</infNFe>'
cXML+='<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />'
cXML+='<Reference URI="#NFe'+cChave+'">'
cXML+='<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />'
cXML+='<DigestValue>'+cdigVal+'</DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></NFe>'
cXML+='<protNFe versao="'+cVersao+'"><infProt>'
cXML+='<tpAmb>'+ctpAmb+'</tpAmb><verAplic>'+cverAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+cdhRecbto+'</dhRecbto>'
cXML+='<nProt>'+cnProt+'</nProt><digVal>'+cdigVal+'</digVal><cStat>'+ccStat+'</cStat><xMotivo>'+cxMotivo+'</xMotivo>'
cXML+='</infProt></protNFe></nfeProc>'

cArqXml:=cChave+"-nfe.xml"
cIniFolder:=DiskName()+":\"+CurDir()+"\"
cArqXml:=PutFile ( {{'Arquivos xML','*.xml'}} , "Gravar Arquivo xML" , cIniFolder ,, cArqXml )

nArqHandle := FCREATE(cArqXml, 0 )
FWRITE(nArqHandle,cXML)
FCLOSE(nArqHandle)
MsgInfo("xML criado com sucesso!")
return Nil

Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
fladimir
Colaborador
Colaborador
Mensagens: 2445
Registrado em: 15 Nov 2006 20:21

Consulta optante do simples online

Mensagem por fladimir »

Agradecemos Daniel,

A nível de testes, com a chave q o Wandereli disponibiliou, meus resultados foram os seguintes:

não vieram os lotes
não apareceu a Informação Adicional por Produto (InfAdProd)
PIS e o COFINS ok corrigidos
TAG Imposto parcialmente corrigida, faltou mostrar relativo a base e ICMS Retidos.

Código: Selecionar todos

<vBCSTRet>13.69
<vICMSSTRet>0.61
Abaixo figura do XML q baixo via Dll q estou usando de base para comparação.
Anexos
Imagem sem título.png
Imagem sem título.png (10.5 KiB) Exibido 9103 vezes
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:

“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”
.


Até 2017    Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL


Novos Projetos:

   Desktop Visual           Windev Desktop
   Celular Android/iOS   Windev Mobile
   WEB                            Windev Web


Sejamos gratos a Deus.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Consulta optante do simples online

Mensagem por Daniel »

Aqui no meu teste deu correto
Anexos
nfe.png
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Responder