Página 7 de 24

Consulta optante do simples online

Enviado: 08 Nov 2016 12:55
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

Consulta optante do simples online

Enviado: 08 Nov 2016 14:09
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

Consulta optante do simples online

Enviado: 08 Nov 2016 17:50
por Daniel
Ola
Aqui esta ele melhorado um pouco, pois o Toledo fez um otimo trabalho
arrumado o decimal, colocado o ipi

Consulta optante do simples online

Enviado: 08 Nov 2016 18:22
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

Consulta optante do simples online

Enviado: 09 Nov 2016 21:04
por Wanderlei
Rubens ou Daniel, tem como vocês colocarem ai para pegar o lote dos produtos.

Consulta optante do simples online

Enviado: 09 Nov 2016 22:08
por fladimir
Tem que ter uma chave na qual referencie 1Xml que tenha lotes como modelo para ser importados

Consulta optante do simples online

Enviado: 11 Nov 2016 13:29
por Wanderlei
Chave com produtos que tem lotes: 31150201206820000369550030033360011033360018

Consulta optante do simples online

Enviado: 13 Nov 2016 17:32
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

Consulta optante do simples online

Enviado: 14 Nov 2016 01:06
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?

Consulta optante do simples online

Enviado: 14 Nov 2016 11:01
por Wanderlei
eu parei de usar a pesquisa por CPF desde que o site mudou.

Consulta optante do simples online

Enviado: 14 Nov 2016 13:51
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")

Consulta optante do simples online

Enviado: 14 Nov 2016 16:19
por fladimir
Show de Bola, o CPF deu certo.

Vlw

Consulta optante do simples online

Enviado: 16 Nov 2016 23:26
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


Consulta optante do simples online

Enviado: 17 Nov 2016 00:41
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.

Consulta optante do simples online

Enviado: 17 Nov 2016 08:07
por Daniel
Aqui no meu teste deu correto