Jump to content
Fivewin Brasil

Baixar Xml do Portal NF-e


aferra

Recommended Posts

Pessoal, boa tarde!

A Sefaz manteve a consulta antiga para fins de acessibilidade, para que a rotina funcione, bastar alterar as variáveis de URL conforme abaixo:

   PRIVATE cUrl := "http://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
   PRIVATE cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
   PRIVATE cUrl2:= "http://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3d"

Espero ter ajudado.

Abraços 

Att,

Fernando Alves
Skype: fernando.advpl

Link to comment
Share on other sites

ATENÇÃO PESSOAL Q USA A FSIST OU PENSA EM ADQUIRIR... ELA FOI DESCONTINUADA CONFORME TRECHO ABAIXO DO CRIADOR.

A ultima versão disponibilizada pelo mesmo contempla as mudanças, PORÉM ele não dara mais continuidade e passou algumas informações importantes.

Não estou mais trabalhando com desenvolvimento ou DLLs, mais tenho a última versão da DLL que ainda funciona.

Estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:

  • Não é possível prever por quanto tempo a página https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8= continuará funcionando do jeito que está, por isso não é possível prever por quanto tempo a DLL continuará funcionando.
  • 100% de certeza que um dia o portal da fazenda irá mudar, então leve em consideração que a DLL depende completamente do portal da fazenda.
  • Caso não seja desenvolvedor, mude assim que possível para uma aplicação que utilize o webservice oficial da fazenda como (trecho removido não nos interessa)
  • Caso seja desenvolver, mude seu software para utilizar o webservice da fazenda, a lista de webservice e a documentação oficial está emhttps://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=  https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=33ol5hhSYZk=
  • Não terei como dá nenhum tipo de suporte seja ele gratuito ou pago.
  • Não forneço e não vendo código fonte.
  • Não forneço e não vendo nenhum tipo de passo a passo ou tutorial de como programar DLLs, fazer integrações, etc...
  • Como a integração com o portal da fazenda é um trabalho interminável, talvez você ache justo pagar por um serviço que faz esse trabalho por você si possível. O serviço do qual mim refiro é do Roveri http://www.roveri.inf.br/site/ eu já testei a algum tempo atrás e funcionou, além de ter outras opções de consultas. A solução do Roveri é permitir a integração com outros softwares em algumas linguagens de programação como PHP, VB.NET, java mais parece fácil integrar com outras linguagens também (Não tenho vínculo e também não estou ganhando nenhum tipo de comissão por está informando sobre o roveri)
Link to comment
Share on other sites

 

ATENÇÃO PESSOAL Q USA A FSIST OU PENSA EM ADQUIRIR... ELA FOI DESCONTINUADA CONFORME TRECHO ABAIXO DO CRIADOR.

A ultima versão disponibilizada pelo mesmo contempla as mudanças, PORÉM ele não dara mais continuidade e passou algumas informações importantes.

Não estou mais trabalhando com desenvolvimento ou DLLs, mais tenho a última versão da DLL que ainda funciona.

Estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:

  • Não é possível prever por quanto tempo a página https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8= continuará funcionando do jeito que está, por isso não é possível prever por quanto tempo a DLL continuará funcionando.
  • 100% de certeza que um dia o portal da fazenda irá mudar, então leve em consideração que a DLL depende completamente do portal da fazenda.
  • Caso não seja desenvolvedor, mude assim que possível para uma aplicação que utilize o webservice oficial da fazenda como (trecho removido não nos interessa)
  • Caso seja desenvolver, mude seu software para utilizar o webservice da fazenda, a lista de webservice e a documentação oficial está emhttps://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=  https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=33ol5hhSYZk=
  • Não terei como dá nenhum tipo de suporte seja ele gratuito ou pago.
  • Não forneço e não vendo código fonte.
  • Não forneço e não vendo nenhum tipo de passo a passo ou tutorial de como programar DLLs, fazer integrações, etc...
  • Como a integração com o portal da fazenda é um trabalho interminável, talvez você ache justo pagar por um serviço que faz esse trabalho por você si possível. O serviço do qual mim refiro é do Roveri http://www.roveri.inf.br/site/ eu já testei a algum tempo atrás e funcionou, além de ter outras opções de consultas. A solução do Roveri é permitir a integração com outros softwares em algumas linguagens de programação como PHP, VB.NET, java mais parece fácil integrar com outras linguagens também (Não tenho vínculo e também não estou ganhando nenhum tipo de comissão por está informando sobre o roveri)

Puts, que coragem em ser verdadeiro, outros deixariam o barco afundar e nem avisaria. As vezes uma solução caseira é melhor que contratar serviços de terceiros, acredito que, dos serviços de terceiros, a FLEXDOC (Embora não use), seja uma das mais confiáveis.

O ACBR, embora não seja um serviço de terceiro, na verdade aberto, tem esta opção, não deixa de ser uma alternativa para quem não tem nada.

 

Obrigado por divulgar tal informação Fladimir.

[]s, 

 

Link to comment
Share on other sites

 

Uso o ACBr para emitir NF-e e CT-e, acho um excelente produto, mas com o ACBr não se consegue recuperar os arquivos XML, nem próprio, nem dos fornecedores.

Oscar, vc tentou usar os comandos abaixo em conjunto:

NFe.ConsultaNFeDest(cCNPJ,nIndicadorNFe,nIndicadorEmissor,nUltNSU)

NFe.DistribuicaoDFe(cUF,cCNPJ,nUltNSU,nNSU,aChNFe)

NFe.DistribuicaoDFePorChaveNFe(cUF, cCNPJ, aChNFe)

NFe.DistribuicaoDFePorNSU(cUF, cCNPJ, nNSU)

NFe.DistribuicaoDFePorUltNSU(cUF, cCNPJ, nUltNSU)

NFe.DownloadNFe(cCNPJ,cChaves)

Embora o serviço de download não está funcionando nem no aplicativo manifestador gratuito.

Mudando um pouco o assunto, embora seja pertinente.

Eu tenho uma maneira de pensar que muitas vezes fui questionado por tal. Penso que, se o fisco nos obriga (Contribuinte) manter os arquivos xml's ou notas fiscais de outros modelos por 5 anos e determina que só podemos baixar e consultar até 180 dias, então somos completos idiotas por aceitar, pois quem criou este tipo de meio de fiscalização foi o fisco, então,  ele que mantenham os mesmos recursos iguais as obrigações. Da última vez que falei isso, alguém me respondeu que, pra isso o fisco teria que ter um armazenamento monstro, mas isso não é problema nosso, foi o fisco que criou nfe, nfce, sat, sped's e etc, então que se vire.

Se um fiscal for em algum cliente seu a primeira coisa que ele vai exigir são os xml's, mas e a contra partida? Não deveria ele apresentar os erros através dos xml's recebidos pelo fisco?

Acho que está na hora da gente se juntar, desenvolvedores, contabilidades,analistas fiscais e tributários e começar a cobrar do fisco a paridade entre recursos e obrigações, ou seja, se ele cobra 5 anos de guarda dos documentos, então que possibilite o acesso no mesmo período, isso seria o começo.

 

 

[]s,

 

 

Link to comment
Share on other sites

 

ATENÇÃO PESSOAL Q USA A FSIST OU PENSA EM ADQUIRIR... ELA FOI DESCONTINUADA CONFORME TRECHO ABAIXO DO CRIADOR.

A ultima versão disponibilizada pelo mesmo contempla as mudanças, PORÉM ele não dara mais continuidade e passou algumas informações importantes.

Não estou mais trabalhando com desenvolvimento ou DLLs, mais tenho a última versão da DLL que ainda funciona.

Estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:

  • Não é possível prever por quanto tempo a página https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8= continuará funcionando do jeito que está, por isso não é possível prever por quanto tempo a DLL continuará funcionando.
  • 100% de certeza que um dia o portal da fazenda irá mudar, então leve em consideração que a DLL depende completamente do portal da fazenda.
  • Caso não seja desenvolvedor, mude assim que possível para uma aplicação que utilize o webservice oficial da fazenda como (trecho removido não nos interessa)
  • Caso seja desenvolver, mude seu software para utilizar o webservice da fazenda, a lista de webservice e a documentação oficial está emhttps://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=  https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=33ol5hhSYZk=
  • Não terei como dá nenhum tipo de suporte seja ele gratuito ou pago.
  • Não forneço e não vendo código fonte.
  • Não forneço e não vendo nenhum tipo de passo a passo ou tutorial de como programar DLLs, fazer integrações, etc...
  • Como a integração com o portal da fazenda é um trabalho interminável, talvez você ache justo pagar por um serviço que faz esse trabalho por você si possível. O serviço do qual mim refiro é do Roveri http://www.roveri.inf.br/site/ eu já testei a algum tempo atrás e funcionou, além de ter outras opções de consultas. A solução do Roveri é permitir a integração com outros softwares em algumas linguagens de programação como PHP, VB.NET, java mais parece fácil integrar com outras linguagens também (Não tenho vínculo e também não estou ganhando nenhum tipo de comissão por está informando sobre o roveri)

carai.... amanha irei ver essa possibilidade => http://www.flexdocs.com.br/guiaNFe/WS.downloadNFWS.html

Link to comment
Share on other sites

 

ATENÇÃO PESSOAL Q USA A FSIST OU PENSA EM ADQUIRIR... ELA FOI DESCONTINUADA CONFORME TRECHO ABAIXO DO CRIADOR.

A ultima versão disponibilizada pelo mesmo contempla as mudanças, PORÉM ele não dara mais continuidade e passou algumas informações importantes.

Não estou mais trabalhando com desenvolvimento ou DLLs, mais tenho a última versão da DLL que ainda funciona.

Estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:

  • Não é possível prever por quanto tempo a página https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8= continuará funcionando do jeito que está, por isso não é possível prever por quanto tempo a DLL continuará funcionando.
  • 100% de certeza que um dia o portal da fazenda irá mudar, então leve em consideração que a DLL depende completamente do portal da fazenda.
  • Caso não seja desenvolvedor, mude assim que possível para uma aplicação que utilize o webservice oficial da fazenda como (trecho removido não nos interessa)
  • Caso seja desenvolver, mude seu software para utilizar o webservice da fazenda, a lista de webservice e a documentação oficial está emhttps://www.nfe.fazenda.gov.br/portal/webServices.aspx?tipoConteudo=Wak0FwB7dKs=  https://www.nfe.fazenda.gov.br/portal/listaConteudo.aspx?tipoConteudo=33ol5hhSYZk=
  • Não terei como dá nenhum tipo de suporte seja ele gratuito ou pago.
  • Não forneço e não vendo código fonte.
  • Não forneço e não vendo nenhum tipo de passo a passo ou tutorial de como programar DLLs, fazer integrações, etc...
  • Como a integração com o portal da fazenda é um trabalho interminável, talvez você ache justo pagar por um serviço que faz esse trabalho por você si possível. O serviço do qual mim refiro é do Roveri http://www.roveri.inf.br/site/ eu já testei a algum tempo atrás e funcionou, além de ter outras opções de consultas. A solução do Roveri é permitir a integração com outros softwares em algumas linguagens de programação como PHP, VB.NET, java mais parece fácil integrar com outras linguagens também (Não tenho vínculo e também não estou ganhando nenhum tipo de comissão por está informando sobre o roveri)

 

Quando ele diz: "estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:"

Onde a consigo para implementá-la ?
Alguém aqui tem esta DLL, pois a que utilizava anteriormente parou de funcionar esta semana.

Link to comment
Share on other sites

 

 

Quando ele diz: "estou lhe fornecendo essa última DLL sem custo, com as seguintes condições:"

Onde a consigo para implementá-la ?
Alguém aqui tem esta DLL, pois a que utilizava anteriormente parou de funcionar esta semana.

A minha tb parou, mas ai vc manda o e-mail pra ele como eu fiz q ele te manda a q funciona provavelmente com o texto acima avisando da descontinuidade.

Link to comment
Share on other sites

Ainda usamos na empresa a da FSIST porem enquanto ele não avisava do comunicado, corri e ressuscitei  uma rotina antiga que tinha achado por aqui no forum e no pctoledo.

Fiz uma adaptações para o xHarbour e esta funcional.

Funcionamento: a URL atual do novo captcha não esta validando o click do usuário, caso acessem e digitem a chave e clique em continuar vai direto para area de visualização e download, me usei desse recurso para não solicitar nada ao usuário é só passar a chave e ser feliz

 

Segue código abaixo

 

// --------- Download XML NFe --------- //
#include "fivewin.ch"
#include "image.ch"
#include "directry.ch"
#include "fileio.ch"
#include "tip.ch"

#define URL_CONSULTA          "http://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
#define URL_CONSULTA_COMPLETA "http://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="

Static s_cVersao := "", s_cTpAmb      := "", s_cVerAplic      := "", s_cDhRecbto := "", s_cnProt := "", s_cDigVal := ""
Static s_cinfCpl := "", s_cInfAdFisco := "", s_cDiscAdicional := "", s_cxMotivo  := "", s_ccStat := ""
Static s_aIde    := {}, s_aEmit       := {}, s_aDest          := {}, s_aDet      := {}, s_aICMS  := {}, s_aIPI    := {}
Static s_aTransp := {}, s_aCobr       := {}, s_aMedicamentos  := {}, s_aTotais   := {}, s_aPIS   := {}, s_aCOFINS := {}
Static s_cViewState, s_cViewStateGenerator, s_cHiddenToken, s_cEventValidation, s_cStringCookie, s_cHiddenSom
// ---------------------------------------- //
// Download XML //

/******************************************************************************/
procedure DownloadNFe( cChave, cPasta )
/*
*/
   local oDialog, oIcone, oFonte, hInput := HB_Hash()
   local cCaptcha       := Space( 6 )
   local lSemParametros := Empty( PCount() )

   if lSemParametros
      cChave := Space( 44 )
      cPasta := ''
   endif
   
   MsgRun( 'Aguarde! Realizando Download do XML...',, {|| BaixarXML(cChave, cCaptcha, hInput, nil, lSemParametros, cPasta)})

return

/***********************************************************************************/
static function BaixarXML( cChave, cCaptcha, hInput, oDialog, lSemParametros, cPasta )
/*
*/
   Local p, oInternet, cParm, cRetorno := '', cHtml := '', c_span := ''
   Local nIni, cPart, cParte, nFim, cFile, nTamTag, nTotPro

   // 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(s_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(s_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(s_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(s_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(s_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(s_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-

	// fazer o acesso
	nTentativas := 0
	REPEAT 
   && http://msdn.microsoft.com/en-us/library/aa752084%28v=vs.85%29.aspx
   oIE:=TOleAuto():New( "InternetExplorer.Application" )
	*
   oIE:ToolBar   := .T.
   oIE:StatusBar := .T.
   oIE:MenuBar   := .F.
   oIE:Visible   := .F.
   *
   oIE:Navigate2( "https://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=" )
   while oIE:Busy
      SysWait(.2)
   end
   *
	oActdo:=oIE:Document()
   oActdo:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value:=cChave
	SysWait()
	*
	oActdo:All:Item("ctl00$ContentPlaceHolder1$btnConsultar"):Click()
	SysWait()
	*
   GetWndDefault():Minimize()
	while oIE:Busy
      SysWait()
   end
   *
   cHtml:=oIE:Document():All(0):OuterHTML
	while oIE:Busy
      SysWait()
   end
   TRY
      oIE:Quit()
   catch
   end
   Release oIE                                                                    	
	*
   cHtml:=strtran(cHtml,'&')
   cHtml:=strtran(cHtml,'nbsp;')
	*
	nTentativas ++ 
   UNTIL At('Realizar consulta com captcha sonoro',  cHtml) == 0 .or. nTentativas > 4
   if At('Realizar consulta com captcha sonoro',  cHtml) > 0 .or. nTentativas > 4
		MsgAlert("Atenção tente novamente!","Atenção")
		return .f.
	endif
	*
	If !Empty(cHtml)
      nIni  := At('<html',  cHtml)
      cParte:= SubStr(cHtml, nIni)
      nIni  := At('<div class="divLarguraMaxima" 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(s_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(s_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(s_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(s_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(s_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(s_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 class="GeralXslt" id="Emitente"',cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //ide
     //? "ide", !Empty(cParte)
	  GeraTag("ide", cParte, cFile, cChave)

     nIni   := At('<div class="GeralXslt" id="Emitente"',cFile)
     cParte := SubStr(cFile, nIni)
     nIni   := At('</div>',cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //emit
	  //? "emit", !Empty(cParte)
     GeraTag("emit", cParte, cFile, cChave)

     *nIni   := At('<div id="DestRem"',cFile)
     nIni   := At('<div class="GeralXslt" id="DestRem"',cFile)
     cParte := SubStr(cFile, nIni)
     nIni   := At('</div>',cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //dest
	  *? "dest", !Empty(cParte)
     GeraTag("dest",cParte, cFile, cChave)

     *nIni   := At('<td class="fixo-prod-serv-numero"><span>', cFile)
     nIni   := At('<tr><td class="fixo-prod-serv-numero"><span>', cFile)
     cParte := SubStr(cFile, nIni)
	  *nIni   := At('</body></html>', cParte)
	  nIni   := At('<div class="nft" id="aba_nft_10">', cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //det
     //? "det", !Empty(cParte)
	  GeraTag("det", cParte, cFile, cChave)

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

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

     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
        *? "cobr",  !Empty(cParte)
		  GeraTag("cobr", cParte, cFile, cChave)
     endif

     GravaXML(cChave, hInput, oDialog, lSemParametros, cPasta)

   Else
      MsgInfo('Erro ao ler retorno da Consulta!', 'Atenção!')
      Return .f.
   EndIf

Return .t.

/***********************************************************/
static Function DigitoChave(cCodigoChave)
/*
*/
   Local cIndice := '4329876543298765432987654329876543298765432'
   Local nDigito, nContador, nSoma := 0

   For nContador := 1 to 43
       nSoma += (Val(SubStr(cCodigoChave, nContador, 1)) * Val(SubStr(cIndice, nContador, 1)))
   Next

   nDigito := (nSoma % 11)

   If nDigito == 0 .Or. nDigito == 1
      nDigito := 0
   Else
      nDigito := (11 - nDigito)
   EndIf

   If SubStr(cCodigoChave, 44, 1) != LTrim(Str(nDigito, 1))
     MsgStop('A chave informada é inválida!', 'Atenção!')
     Return .f.
   EndIf

Return .t.

/********************************************************************/
static Function Troca_Acento( cTexto )
/*
*/

   cTexto := StrTran( cTexto, "&#243;", "ó" )
   cTexto := StrTran( cTexto, "&#225;", "á" )
   cTexto := StrTran( cTexto, "&#233;", "é" )

Return cTexto

/*******************************************************************/
static Function GeraTag( _tag, cParte, cFile, cChave )
/*
*/
   Local i, cPar_, c_Tag, nTamTag, nIni, c_span, cPar1_, nFim

   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)
         s_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)
      s_cxMotivo := Alltrim(SubStr(c_span,1,nIni-1))

      if "AUTORIZADA" $ s_cxMotivo
         s_ccStat   := "100"
         s_cxMotivo := "Autorizado o uso da NF-e"
      endif

      if "CANCELADA" $ s_cxMotivo
         s_ccStat   := "101"
         s_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
      s_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
      s_cDhRecbto := alltrim(SubStr(c_span,1,nTamTag))
      s_cDhRecbto := SubStr(s_cDhRecbto,7,4)+"-"+SubStr(s_cDhRecbto,4,2)+"-"+left(s_cDhRecbto,2)+"T"+Right(s_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
      s_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
      s_cVersao   := alltrim(SubStr(c_span,nIni,nTamTag))

      For i := 1 to Len(s_aIde[1])

          cPar_:= cParte

          if i == 12
             cPar_:= cFile
          endif

          if i == 13
             cPar_:= cFile
          endif

          nIni   := AT(s_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
             s_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 s_aIde[1,i,6]!=0
             if s_aIde[1,i,6]>0
                c_tag := left(c_tag,s_aIde[1,i,6])
             else
                c_tag := SubStr(c_tag,Abs(s_aIde[1,i,6])+1)
             endif
          endif

          s_aIde[1,i,1] := c_tag

      Next
   endif

   if _tag == "emit"

      For i := 1 to Len(s_aEmit[1])

          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          nIni  := AT(s_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 s_aEmit[1, i, 6] != 0
                if s_aEmit[1, i, 6] > 0
                   c_tag := left(c_tag,s_aEmit[1, i, 6])
                else
                   c_tag := alltrim(SubStr(c_tag, Abs(s_aEmit[1, i, 6]) + 1))
                   c_tag := alltrim(StrTran(c_tag, "-", ""))
                endif
             endif
             s_aEmit[1, i, 1] := c_tag
          endif
      Next

   endif

   if _tag == "dest"
      For i := 1 to Len(s_aDest[1])
          cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
          cPar_ := StrTran(cPar_, Chr(160), "")
          nIni  := AT(s_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 s_aDest[1, i, 6] != 0
                if s_aDest[1, i, 6] > 0
                   c_tag := left(c_tag, s_aDest[1, i, 6])
                else
                   c_tag := alltrim(SubStr(c_tag, Abs(s_aDest[1,i,6]) + 1))
                   c_tag := alltrim(StrTran(c_tag, "-", ""))
                endif
             endif
             s_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(s_aDet)
			 For i := 1 to Len(s_aDet[p])
				  nIni := At(s_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 s_aDet[p, i, 4] != 0
                    if s_aDet[p, i, 4] > 0
                       c_tag := left(c_tag, s_aDet[p, i, 4])
                    else
                       c_tag := alltrim(SubStr(c_tag, Abs(s_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
                 s_aDet[p, i, 1] := c_tag
              endif
          Next
			 
          For i := 1 To Len(s_aICMS[p])
              nIni := At(s_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 s_aICMS[p, i, 4] != 0
                    if s_aICMS[p, i, 4] > 0
                       c_tag := Left(c_tag, s_aICMS[p, i, 4])
                    else
                       c_tag := AllTrim(SubStr(c_tag, Abs(s_aICMS[p, i, 4]) + 1))
                       c_tag := AllTrim(StrTran(c_tag, "-", ""))
                    endif
                 endif
                 c_tag            := StrTran(c_tag, ".", "")
                 c_tag            := StrTran(c_tag, ",", ".")
                 s_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(s_aIPI[p])
                 nIni := AT(s_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 s_aIPI[p, i, 4] != 0
                       if s_aIPI[p, i, 4] > 0
                          c_tag := Left(c_tag, s_aIPI[p, i, 4])
                       else
                          c_tag := Alltrim(SubStr(c_tag, Abs(s_aIPI[p, i, 4]) + 1))
                          c_tag := Alltrim(StrTran(c_tag, "-", ""))
                       endif
                    endif
                    c_tag           := StrTran(c_tag, ".", "")
                    c_tag           := StrTran(c_tag, ",", ".")
                    s_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(s_aPIS[p])
	  		     	  IF P == Len(s_aPIS)
					  	  nFim  := LEN(cPar_)
					  ELSE	  
	                 nFim  := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
	              ENDIF   
                 cPar1_:= SubStr(cPar_, 1, nFim)
                 nIni  := AT(s_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 s_aPIS[p,i,4] != 0
                       if s_aPIS[p,i,4] > 0
                          c_tag := Left(c_tag,s_aPIS[p,i,4])
                       else
                          c_tag := AllTrim(SubStr(c_tag, Abs(s_aPIS[p, i, 4]) + 1))
                          c_tag := AllTrim(StrTran(c_tag, "-", ""))
                       endif
                    endif
                    c_tag           := StrTran(c_tag, ".", "")
                    c_tag           := StrTran(c_tag, ",", ".")
                    s_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(s_aCOFINS[p])
	  		     	  IF P == Len(s_aCOFINS)
					  	  nFim  := LEN(cPar_)
					  ELSE	  
					  	  nFim  := At('<td class="fixo-prod-serv-numero">', cPar_)
					  ENDIF	
	  		    	  cPar1_:= SubStr(cPar_, 1, nFim)
					  nIni  := AT(s_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 s_aCOFINS[p, i, 4] != 0
                       if s_aCOFINS[p, i, 4] > 0
                          c_tag := left(c_tag, s_aCOFINS[p, i, 4])
                       else
                          c_tag := alltrim(SubStr(c_tag, Abs(s_aCOFINS[p, i, 4]) + 1))
                          c_tag := alltrim(StrTran(c_tag, "-", ""))
                       endif
                    endif
                    c_tag              := StrTran(c_tag, ".", "")
                    c_tag              := StrTran(c_tag, ",", ".")
                    s_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(s_aMedicamentos[p])
                 nIni := AT(s_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 s_aMedicamentos[p,i,4] != 0
                       if s_aMedicamentos[p,i,4] > 0
                          c_tag := Left(c_tag,s_aMedicamentos[p,i,4])
                       else
                          c_tag := AllTrim(SubStr(c_tag, Abs(s_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
                    s_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(s_aTotais[1])
          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          nIni  := AT(s_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,",",".")
             s_aTotais[1,i,1] := c_tag
          endif
      Next
   endif

   if _tag=="transp"
      For i := 1 to Len(s_aTransp[1])
          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          nIni  := AT(s_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 s_aTransp[1,i,6] != 0
                if s_aTransp[1,i,6]>0
                   c_tag := left(c_tag,s_aTransp[1,i,6])
                else
                   c_tag := alltrim(SubStr(c_tag,Abs(s_aTransp[1,i,6])+1))
                   c_tag := alltrim(StrTran(c_tag,"-",""))
                endif
             endif
             s_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(s_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
             s_aCobr[1,i,1] := c_tag
          else
             Exit
          endif
      Next
   endif

return Nil

/**************************************************************************************************/
static function GravaXML(cChave, hInput, oDialog, lSemParametros, cPasta)
/*
*/
   Local i, p, lTemTag, cTagPai, nFimTagPai, nIni, cTag, nArqHandle, cArqXml, cTag_
   Local cXML :='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+s_cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+s_cVersao+'" Id="NFe'+cChave+'">'

   cTagPai    := ""
   nFimTagPai := 0

   For i := 1 to Len(s_aIde[1])
       if !Empt(s_aIde[1,i,3])
          nFimTagPai := s_aIde[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aIde[1,i,3]
          cXML       += '<'+s_aIde[1,i,3]+'>'
       endif
       if !Empty(s_aIde[1,i,1])
          cXML += '<'+s_aIde[1,i,2]+'>'+s_aIde[1,i,1]+'</'+s_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(s_aEmit[1])
       if !Empty(s_aEmit[1,i,3])
          nFimTagPai := s_aEmit[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aEmit[1,i,3]
          cXML       += '<'+s_aEmit[1,i,3]+'>'
       endif
       if !Empty(s_aEmit[1,i,1])
          cXML += '<'+s_aEmit[1,i,2]+'>'+s_aEmit[1,i,1]+'</'+s_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(s_aDest[1])
       if !Empt(s_aDest[1,i,3])
          nFimTagPai := s_aDest[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aDest[1,i,3]
          cXML       += '<'+s_aDest[1,i,3]+'>'
       endif
       if !Empt(s_aDest[1,i,1])
          cXML += '<'+s_aDest[1,i,2]+'>'+s_aDest[1,i,1]+'</'+s_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(s_aDet)
       cXML += '<det nItem="'+alltrim(Str(p))+'"><prod>'
       For i := 1 to Len(s_aDet[p])
           if !Empt(s_aDet[p,i,1])
              cXML += '<'+s_aDet[p,i,2]+'>'+s_aDet[p,i,1]+'</'+s_aDet[p,i,2]+'>'
           endif
       Next

       lTemTag := .F.
       For i := 1 to Len(s_aMedicamentos[p])
           if i == 1
              if !Empty(s_aMedicamentos[p,i,1])
                 cXML    += '<med><nLote>' + s_aMedicamentos[p,i,1] + '</nLote>'
                 lTemTag := .t.
              endif
           Else
              if !Empty(s_aMedicamentos[p,i,1])
                 If i == 6
                    s_cDiscAdicional := '<'+s_aMedicamentos[p,i,2]+'>'+ s_aMedicamentos[p,i,1] + '</'+s_aMedicamentos[p,i,2]+'>'
                 Else
                    cXML             += '<'+s_aMedicamentos[p,i,2]+'>'+ s_aMedicamentos[p,i,1] + '</'+s_aMedicamentos[p,i,2]+'>'
                 Endif
              endif
           EndIf
       Next

       if lTemTag
          cXML += '</med>'
       endif

       cXML  += '</prod><imposto><ICMS>'
       cTag_ := 'ICMS'

       For i := 1 to Len(s_aICMS[p])
           if i == 1
              if !Empty(s_aICMS[p, 2, 1])
                 cTag_ += s_aICMS[p, 2, 1]
              else
                 cTag_ += 'SN' + s_aICMS[p, 3, 1]
              endif
              cXML += '<' + cTag_ + '>'
           endif
           if !Empty(s_aICMS[p, i, 1])
              If s_aICMS[p, 2, 1] == '00'
                 If StrZero(i, 2) $ "-01-02-04-06-07-08"
                    cXML += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '10'
                 If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '20'
                 If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '30'
                 If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '40' .or. s_aICMS[p, 2, 1] == '41' .Or. s_aICMS[p, 2, 1] == '50'
                 If StrZero(i, 2) $ "-01-02-09-10"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '51'
                 If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '60'
                 If StrZero(i, 2) $ "-01-02-17-18"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_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 += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '90'
                 If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              Else
                 cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
              EndIf
           endif
       Next

       cXML    += '</'+cTag_+'></ICMS>'
       lTemTag := .F.

       For i := 1 to Len(s_aIPI[p])
           if i == 1
              if !Empty(s_aIPI[p,i,1])
                 cXML    += '<IPI><cEnq>' + s_aIPI[p,i,1] + '</cEnq><IPITrib>'
                 lTemTag := .T.
              endif
           Else
              if !Empty(s_aIPI[p,i,1])
                 cXML += '<'+s_aIPI[p,i,2]+'>'+ s_aIPI[p,i,1] + '</'+s_aIPI[p,i,2]+'>'
              endif
           EndIf
       Next

       if lTemTag
          cXML += '</IPITrib></IPI>'
       endif

       lTemTag := .F.

       For i:= 1 to Len(s_aPIS[p])
           if i == 1
              if !Empty(s_aPIS[p, i, 1])
                 If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                    cXML += '<PIS><PISAliq>'
                 ElseIf Val(s_aPIS[p, 1, 1]) == 3
                    cXML += '<PIS><PISQte>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                    cXML += '<PIS><PISNT>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                    cXML += '<PIS><PISOutr>'
                 EndIf
                 lTemTag := .T.
              endif
           endif
           if !Empty(s_aPIS[p, i, 1])
              cXML += '<' + s_aPIS[p,i,2] + '>' + s_aPIS[p,i,1] + '</' + s_aPIS[p,i,2] + '>'
           endif
       Next

       if lTemTag
          If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
             cXML += '</PISAliq></PIS>'
          ElseIf Val(s_aPIS[p, 1, 1]) == 3
             cXML += '</PISQte></PIS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
             cXML += '</PISNT></PIS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
             cXML+= '</PISOutr></PIS>'
          EndIf
       endif

       lTemTag := .F.

       For i := 1 to Len(s_aCOFINS[p])
           if i == 1
              if !Empty(s_aCOFINS[p,i,1])
                 If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                    cXML += '<COFINS><COFINSAliq>'
                 ElseIf Val(s_aPIS[p, 1, 1]) == 3
                    cXML += '<COFINS><COFINSQte>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                    cXML += '<COFINS><COFINSNT>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                    cXML += '<COFINS><COFINSOutr>'
                 EndIf
                 lTemTag := .T.
              endif
           endif
           if !Empty(s_aCOFINS[p,i,1])
              cXML += '<' + s_aCOFINS[p, i, 2] + '>' + s_aCOFINS[p, i, 1] + '</' + s_aCOFINS[p, i, 2] + '>'
           endif
       Next

       if lTemTag
          If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
             cXML += '</COFINSAliq></COFINS>'
          ElseIf Val(s_aPIS[p, 1, 1]) == 3
             cXML += '</COFINSQte></COFINS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
             cXML += '</COFINSNT></COFINS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
             cXML+= '</COFINSOutr></COFINS>'
          EndIf
       endif
       cXML += '</imposto>'
       If !Empty(s_cDiscAdicional)
          cXml += s_cDiscAdicional
       EndIf
       cXML += '</det>'
   Next

   cXML += '<total><ICMSTot>'

   For i := 1 to Len(s_aTotais[1])
       if !Empty(s_aTotais[1,i,1])
          cXML+='<'+s_aTotais[1,i,2]+'>'+s_aTotais[1,i,1]+'</'+s_aTotais[1,i,2]+'>'
       endif
   Next

   cXML += '</ICMSTot></total>'

   For i := 1 to Len(s_aTransp[1])
       if !Empty(s_aTransp[1,i,3])
          nFimTagPai := s_aTransp[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aTransp[1,i,3]
          cXML       += '<'+s_aTransp[1,i,3]+'>'
       endif
       if !Empty(s_aTransp[1,i,1])
          cXML += '<'+s_aTransp[1,i,2]+'>'+s_aTransp[1,i,1]+'</'+s_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 !Empty(s_aCobr[1,1,1])
      cXML += '<cobr>'
      For i := 1 to Len(s_aCobr[1])
          if !Empty(s_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 += '<'+s_aCobr[1,i,2]+'>'+s_aCobr[1,i,1]+'</'+s_aCobr[1,i,2]+'>'
          endif
      Next
      cXML += '</dup></cobr>'
   endif

   if !Empty(s_cinfCpl) .or. !Empty(s_cInfAdFisco)
//      cXML += '<infAdic>'
//      if !Empty(s_cInfAdFisco)
//         cXML += '<infAdFisco>'+s_cInfAdFisco+'</infAdFisco>'
//      endif
//      if !Empty(s_cinfCpl)
//         cXML += '<infCpl>'+s_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>'+s_cDigVal+'</DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></NFe>'
   cXML       += '<protNFe versao="'+s_cVersao+'"><infProt>'
   cXML       += '<tpAmb>'+s_cTpAmb+'</tpAmb><verAplic>'+s_cVerAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+s_cDhRecbto+'</dhRecbto>'
   cXML       += '<nProt>'+s_cnProt+'</nProt><digVal>'+s_cDigVal+'</digVal><cStat>'+s_ccStat+'</cStat><xMotivo>'+s_cxMotivo+'</xMotivo>'
   cXML       += '</infProt></protNFe></nfeProc>'

   cArqXml    := cPasta + '\' + cChave + '.xml'
   nArqHandle := FCreate(cArqXml, 0 )

   FWrite(nArqHandle,cXML)
   FClose(nArqHandle)

   *MsgInfo( 'Download realizado com sucesso! Arquivo gerado:' + CRLF + cArqXml, 'NF-e ')


return nil

 

Link to comment
Share on other sites

 

Ainda usamos na empresa a da FSIST porem enquanto ele não avisava do comunicado, corri e ressuscitei  uma rotina antiga que tinha achado por aqui no forum e no pctoledo.

Fiz uma adaptações para o xHarbour e esta funcional.

Funcionamento: a URL atual do novo captcha não esta validando o click do usuário, caso acessem e digitem a chave e clique em continuar vai direto para area de visualização e download, me usei desse recurso para não solicitar nada ao usuário é só passar a chave e ser feliz

 

Segue código abaixo

 


// --------- Download XML NFe --------- //
#include "fivewin.ch"
#include "image.ch"
#include "directry.ch"
#include "fileio.ch"
#include "tip.ch"

#define URL_CONSULTA          "http://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
#define URL_CONSULTA_COMPLETA "http://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="

Static s_cVersao := "", s_cTpAmb      := "", s_cVerAplic      := "", s_cDhRecbto := "", s_cnProt := "", s_cDigVal := ""
Static s_cinfCpl := "", s_cInfAdFisco := "", s_cDiscAdicional := "", s_cxMotivo  := "", s_ccStat := ""
Static s_aIde    := {}, s_aEmit       := {}, s_aDest          := {}, s_aDet      := {}, s_aICMS  := {}, s_aIPI    := {}
Static s_aTransp := {}, s_aCobr       := {}, s_aMedicamentos  := {}, s_aTotais   := {}, s_aPIS   := {}, s_aCOFINS := {}
Static s_cViewState, s_cViewStateGenerator, s_cHiddenToken, s_cEventValidation, s_cStringCookie, s_cHiddenSom
// ---------------------------------------- //
// Download XML //

/******************************************************************************/
procedure DownloadNFe( cChave, cPasta )
/*
*/
   local oDialog, oIcone, oFonte, hInput := HB_Hash()
   local cCaptcha       := Space( 6 )
   local lSemParametros := Empty( PCount() )

   if lSemParametros
      cChave := Space( 44 )
      cPasta := ''
   endif
   
   MsgRun( 'Aguarde! Realizando Download do XML...',, {|| BaixarXML(cChave, cCaptcha, hInput, nil, lSemParametros, cPasta)})

return

/***********************************************************************************/
static function BaixarXML( cChave, cCaptcha, hInput, oDialog, lSemParametros, cPasta )
/*
*/
   Local p, oInternet, cParm, cRetorno := '', cHtml := '', c_span := ''
   Local nIni, cPart, cParte, nFim, cFile, nTamTag, nTotPro

   // 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(s_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(s_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(s_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(s_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(s_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(s_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-

	// fazer o acesso
	nTentativas := 0
	REPEAT 
   && http://msdn.microsoft.com/en-us/library/aa752084%28v=vs.85%29.aspx
   oIE:=TOleAuto():New( "InternetExplorer.Application" )
	*
   oIE:ToolBar   := .T.
   oIE:StatusBar := .T.
   oIE:MenuBar   := .F.
   oIE:Visible   := .F.
   *
   oIE:Navigate2( "https://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=" )
   while oIE:Busy
      SysWait(.2)
   end
   *
	oActdo:=oIE:Document()
   oActdo:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value:=cChave
	SysWait()
	*
	oActdo:All:Item("ctl00$ContentPlaceHolder1$btnConsultar"):Click()
	SysWait()
	*
   GetWndDefault():Minimize()
	while oIE:Busy
      SysWait()
   end
   *
   cHtml:=oIE:Document():All(0):OuterHTML
	while oIE:Busy
      SysWait()
   end
   TRY
      oIE:Quit()
   catch
   end
   Release oIE                                                                    	
	*
   cHtml:=strtran(cHtml,'&')
   cHtml:=strtran(cHtml,'nbsp;')
	*
	nTentativas ++ 
   UNTIL At('Realizar consulta com captcha sonoro',  cHtml) == 0 .or. nTentativas > 4
   if At('Realizar consulta com captcha sonoro',  cHtml) > 0 .or. nTentativas > 4
		MsgAlert("Atenção tente novamente!","Atenção")
		return .f.
	endif
	*
	If !Empty(cHtml)
      nIni  := At('<html',  cHtml)
      cParte:= SubStr(cHtml, nIni)
      nIni  := At('<div class="divLarguraMaxima" 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(s_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(s_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(s_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(s_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(s_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(s_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 class="GeralXslt" id="Emitente"',cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //ide
     //? "ide", !Empty(cParte)
	  GeraTag("ide", cParte, cFile, cChave)

     nIni   := At('<div class="GeralXslt" id="Emitente"',cFile)
     cParte := SubStr(cFile, nIni)
     nIni   := At('</div>',cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //emit
	  //? "emit", !Empty(cParte)
     GeraTag("emit", cParte, cFile, cChave)

     *nIni   := At('<div id="DestRem"',cFile)
     nIni   := At('<div class="GeralXslt" id="DestRem"',cFile)
     cParte := SubStr(cFile, nIni)
     nIni   := At('</div>',cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //dest
	  *? "dest", !Empty(cParte)
     GeraTag("dest",cParte, cFile, cChave)

     *nIni   := At('<td class="fixo-prod-serv-numero"><span>', cFile)
     nIni   := At('<tr><td class="fixo-prod-serv-numero"><span>', cFile)
     cParte := SubStr(cFile, nIni)
	  *nIni   := At('</body></html>', cParte)
	  nIni   := At('<div class="nft" id="aba_nft_10">', cParte)
     cParte := SubStr(cParte, 1, nIni - 1) //det
     //? "det", !Empty(cParte)
	  GeraTag("det", cParte, cFile, cChave)

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

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

     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
        *? "cobr",  !Empty(cParte)
		  GeraTag("cobr", cParte, cFile, cChave)
     endif

     GravaXML(cChave, hInput, oDialog, lSemParametros, cPasta)

   Else
      MsgInfo('Erro ao ler retorno da Consulta!', 'Atenção!')
      Return .f.
   EndIf

Return .t.

/***********************************************************/
static Function DigitoChave(cCodigoChave)
/*
*/
   Local cIndice := '4329876543298765432987654329876543298765432'
   Local nDigito, nContador, nSoma := 0

   For nContador := 1 to 43
       nSoma += (Val(SubStr(cCodigoChave, nContador, 1)) * Val(SubStr(cIndice, nContador, 1)))
   Next

   nDigito := (nSoma % 11)

   If nDigito == 0 .Or. nDigito == 1
      nDigito := 0
   Else
      nDigito := (11 - nDigito)
   EndIf

   If SubStr(cCodigoChave, 44, 1) != LTrim(Str(nDigito, 1))
     MsgStop('A chave informada é inválida!', 'Atenção!')
     Return .f.
   EndIf

Return .t.

/********************************************************************/
static Function Troca_Acento( cTexto )
/*
*/

   cTexto := StrTran( cTexto, "&#243;", "ó" )
   cTexto := StrTran( cTexto, "&#225;", "á" )
   cTexto := StrTran( cTexto, "&#233;", "é" )

Return cTexto

/*******************************************************************/
static Function GeraTag( _tag, cParte, cFile, cChave )
/*
*/
   Local i, cPar_, c_Tag, nTamTag, nIni, c_span, cPar1_, nFim

   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)
         s_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)
      s_cxMotivo := Alltrim(SubStr(c_span,1,nIni-1))

      if "AUTORIZADA" $ s_cxMotivo
         s_ccStat   := "100"
         s_cxMotivo := "Autorizado o uso da NF-e"
      endif

      if "CANCELADA" $ s_cxMotivo
         s_ccStat   := "101"
         s_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
      s_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
      s_cDhRecbto := alltrim(SubStr(c_span,1,nTamTag))
      s_cDhRecbto := SubStr(s_cDhRecbto,7,4)+"-"+SubStr(s_cDhRecbto,4,2)+"-"+left(s_cDhRecbto,2)+"T"+Right(s_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
      s_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
      s_cVersao   := alltrim(SubStr(c_span,nIni,nTamTag))

      For i := 1 to Len(s_aIde[1])

          cPar_:= cParte

          if i == 12
             cPar_:= cFile
          endif

          if i == 13
             cPar_:= cFile
          endif

          nIni   := AT(s_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
             s_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 s_aIde[1,i,6]!=0
             if s_aIde[1,i,6]>0
                c_tag := left(c_tag,s_aIde[1,i,6])
             else
                c_tag := SubStr(c_tag,Abs(s_aIde[1,i,6])+1)
             endif
          endif

          s_aIde[1,i,1] := c_tag

      Next
   endif

   if _tag == "emit"

      For i := 1 to Len(s_aEmit[1])

          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          nIni  := AT(s_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 s_aEmit[1, i, 6] != 0
                if s_aEmit[1, i, 6] > 0
                   c_tag := left(c_tag,s_aEmit[1, i, 6])
                else
                   c_tag := alltrim(SubStr(c_tag, Abs(s_aEmit[1, i, 6]) + 1))
                   c_tag := alltrim(StrTran(c_tag, "-", ""))
                endif
             endif
             s_aEmit[1, i, 1] := c_tag
          endif
      Next

   endif

   if _tag == "dest"
      For i := 1 to Len(s_aDest[1])
          cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
          cPar_ := StrTran(cPar_, Chr(160), "")
          nIni  := AT(s_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 s_aDest[1, i, 6] != 0
                if s_aDest[1, i, 6] > 0
                   c_tag := left(c_tag, s_aDest[1, i, 6])
                else
                   c_tag := alltrim(SubStr(c_tag, Abs(s_aDest[1,i,6]) + 1))
                   c_tag := alltrim(StrTran(c_tag, "-", ""))
                endif
             endif
             s_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(s_aDet)
			 For i := 1 to Len(s_aDet[p])
				  nIni := At(s_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 s_aDet[p, i, 4] != 0
                    if s_aDet[p, i, 4] > 0
                       c_tag := left(c_tag, s_aDet[p, i, 4])
                    else
                       c_tag := alltrim(SubStr(c_tag, Abs(s_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
                 s_aDet[p, i, 1] := c_tag
              endif
          Next
			 
          For i := 1 To Len(s_aICMS[p])
              nIni := At(s_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 s_aICMS[p, i, 4] != 0
                    if s_aICMS[p, i, 4] > 0
                       c_tag := Left(c_tag, s_aICMS[p, i, 4])
                    else
                       c_tag := AllTrim(SubStr(c_tag, Abs(s_aICMS[p, i, 4]) + 1))
                       c_tag := AllTrim(StrTran(c_tag, "-", ""))
                    endif
                 endif
                 c_tag            := StrTran(c_tag, ".", "")
                 c_tag            := StrTran(c_tag, ",", ".")
                 s_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(s_aIPI[p])
                 nIni := AT(s_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 s_aIPI[p, i, 4] != 0
                       if s_aIPI[p, i, 4] > 0
                          c_tag := Left(c_tag, s_aIPI[p, i, 4])
                       else
                          c_tag := Alltrim(SubStr(c_tag, Abs(s_aIPI[p, i, 4]) + 1))
                          c_tag := Alltrim(StrTran(c_tag, "-", ""))
                       endif
                    endif
                    c_tag           := StrTran(c_tag, ".", "")
                    c_tag           := StrTran(c_tag, ",", ".")
                    s_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(s_aPIS[p])
	  		     	  IF P == Len(s_aPIS)
					  	  nFim  := LEN(cPar_)
					  ELSE	  
	                 nFim  := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
	              ENDIF   
                 cPar1_:= SubStr(cPar_, 1, nFim)
                 nIni  := AT(s_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 s_aPIS[p,i,4] != 0
                       if s_aPIS[p,i,4] > 0
                          c_tag := Left(c_tag,s_aPIS[p,i,4])
                       else
                          c_tag := AllTrim(SubStr(c_tag, Abs(s_aPIS[p, i, 4]) + 1))
                          c_tag := AllTrim(StrTran(c_tag, "-", ""))
                       endif
                    endif
                    c_tag           := StrTran(c_tag, ".", "")
                    c_tag           := StrTran(c_tag, ",", ".")
                    s_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(s_aCOFINS[p])
	  		     	  IF P == Len(s_aCOFINS)
					  	  nFim  := LEN(cPar_)
					  ELSE	  
					  	  nFim  := At('<td class="fixo-prod-serv-numero">', cPar_)
					  ENDIF	
	  		    	  cPar1_:= SubStr(cPar_, 1, nFim)
					  nIni  := AT(s_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 s_aCOFINS[p, i, 4] != 0
                       if s_aCOFINS[p, i, 4] > 0
                          c_tag := left(c_tag, s_aCOFINS[p, i, 4])
                       else
                          c_tag := alltrim(SubStr(c_tag, Abs(s_aCOFINS[p, i, 4]) + 1))
                          c_tag := alltrim(StrTran(c_tag, "-", ""))
                       endif
                    endif
                    c_tag              := StrTran(c_tag, ".", "")
                    c_tag              := StrTran(c_tag, ",", ".")
                    s_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(s_aMedicamentos[p])
                 nIni := AT(s_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 s_aMedicamentos[p,i,4] != 0
                       if s_aMedicamentos[p,i,4] > 0
                          c_tag := Left(c_tag,s_aMedicamentos[p,i,4])
                       else
                          c_tag := AllTrim(SubStr(c_tag, Abs(s_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
                    s_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(s_aTotais[1])
          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          nIni  := AT(s_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,",",".")
             s_aTotais[1,i,1] := c_tag
          endif
      Next
   endif

   if _tag=="transp"
      For i := 1 to Len(s_aTransp[1])
          cPar_ := StrTran(cParte,Chr(13)+Chr(10),"")
          cPar_ := StrTran(cPar_,Chr(160),"")
          nIni  := AT(s_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 s_aTransp[1,i,6] != 0
                if s_aTransp[1,i,6]>0
                   c_tag := left(c_tag,s_aTransp[1,i,6])
                else
                   c_tag := alltrim(SubStr(c_tag,Abs(s_aTransp[1,i,6])+1))
                   c_tag := alltrim(StrTran(c_tag,"-",""))
                endif
             endif
             s_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(s_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
             s_aCobr[1,i,1] := c_tag
          else
             Exit
          endif
      Next
   endif

return Nil

/**************************************************************************************************/
static function GravaXML(cChave, hInput, oDialog, lSemParametros, cPasta)
/*
*/
   Local i, p, lTemTag, cTagPai, nFimTagPai, nIni, cTag, nArqHandle, cArqXml, cTag_
   Local cXML :='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+s_cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+s_cVersao+'" Id="NFe'+cChave+'">'

   cTagPai    := ""
   nFimTagPai := 0

   For i := 1 to Len(s_aIde[1])
       if !Empt(s_aIde[1,i,3])
          nFimTagPai := s_aIde[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aIde[1,i,3]
          cXML       += '<'+s_aIde[1,i,3]+'>'
       endif
       if !Empty(s_aIde[1,i,1])
          cXML += '<'+s_aIde[1,i,2]+'>'+s_aIde[1,i,1]+'</'+s_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(s_aEmit[1])
       if !Empty(s_aEmit[1,i,3])
          nFimTagPai := s_aEmit[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aEmit[1,i,3]
          cXML       += '<'+s_aEmit[1,i,3]+'>'
       endif
       if !Empty(s_aEmit[1,i,1])
          cXML += '<'+s_aEmit[1,i,2]+'>'+s_aEmit[1,i,1]+'</'+s_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(s_aDest[1])
       if !Empt(s_aDest[1,i,3])
          nFimTagPai := s_aDest[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aDest[1,i,3]
          cXML       += '<'+s_aDest[1,i,3]+'>'
       endif
       if !Empt(s_aDest[1,i,1])
          cXML += '<'+s_aDest[1,i,2]+'>'+s_aDest[1,i,1]+'</'+s_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(s_aDet)
       cXML += '<det nItem="'+alltrim(Str(p))+'"><prod>'
       For i := 1 to Len(s_aDet[p])
           if !Empt(s_aDet[p,i,1])
              cXML += '<'+s_aDet[p,i,2]+'>'+s_aDet[p,i,1]+'</'+s_aDet[p,i,2]+'>'
           endif
       Next

       lTemTag := .F.
       For i := 1 to Len(s_aMedicamentos[p])
           if i == 1
              if !Empty(s_aMedicamentos[p,i,1])
                 cXML    += '<med><nLote>' + s_aMedicamentos[p,i,1] + '</nLote>'
                 lTemTag := .t.
              endif
           Else
              if !Empty(s_aMedicamentos[p,i,1])
                 If i == 6
                    s_cDiscAdicional := '<'+s_aMedicamentos[p,i,2]+'>'+ s_aMedicamentos[p,i,1] + '</'+s_aMedicamentos[p,i,2]+'>'
                 Else
                    cXML             += '<'+s_aMedicamentos[p,i,2]+'>'+ s_aMedicamentos[p,i,1] + '</'+s_aMedicamentos[p,i,2]+'>'
                 Endif
              endif
           EndIf
       Next

       if lTemTag
          cXML += '</med>'
       endif

       cXML  += '</prod><imposto><ICMS>'
       cTag_ := 'ICMS'

       For i := 1 to Len(s_aICMS[p])
           if i == 1
              if !Empty(s_aICMS[p, 2, 1])
                 cTag_ += s_aICMS[p, 2, 1]
              else
                 cTag_ += 'SN' + s_aICMS[p, 3, 1]
              endif
              cXML += '<' + cTag_ + '>'
           endif
           if !Empty(s_aICMS[p, i, 1])
              If s_aICMS[p, 2, 1] == '00'
                 If StrZero(i, 2) $ "-01-02-04-06-07-08"
                    cXML += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '10'
                 If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '20'
                 If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '30'
                 If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '40' .or. s_aICMS[p, 2, 1] == '41' .Or. s_aICMS[p, 2, 1] == '50'
                 If StrZero(i, 2) $ "-01-02-09-10"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '51'
                 If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '60'
                 If StrZero(i, 2) $ "-01-02-17-18"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_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 += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              ElseIf s_aICMS[p, 2, 1] == '90'
                 If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
                    cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
                 EndIf
              Else
                 cXml += '<' + s_aICMS[p, i, 2] + '>' + s_aICMS[p, i, 1] + '</' + s_aICMS[p, i, 2] + '>'
              EndIf
           endif
       Next

       cXML    += '</'+cTag_+'></ICMS>'
       lTemTag := .F.

       For i := 1 to Len(s_aIPI[p])
           if i == 1
              if !Empty(s_aIPI[p,i,1])
                 cXML    += '<IPI><cEnq>' + s_aIPI[p,i,1] + '</cEnq><IPITrib>'
                 lTemTag := .T.
              endif
           Else
              if !Empty(s_aIPI[p,i,1])
                 cXML += '<'+s_aIPI[p,i,2]+'>'+ s_aIPI[p,i,1] + '</'+s_aIPI[p,i,2]+'>'
              endif
           EndIf
       Next

       if lTemTag
          cXML += '</IPITrib></IPI>'
       endif

       lTemTag := .F.

       For i:= 1 to Len(s_aPIS[p])
           if i == 1
              if !Empty(s_aPIS[p, i, 1])
                 If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                    cXML += '<PIS><PISAliq>'
                 ElseIf Val(s_aPIS[p, 1, 1]) == 3
                    cXML += '<PIS><PISQte>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                    cXML += '<PIS><PISNT>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                    cXML += '<PIS><PISOutr>'
                 EndIf
                 lTemTag := .T.
              endif
           endif
           if !Empty(s_aPIS[p, i, 1])
              cXML += '<' + s_aPIS[p,i,2] + '>' + s_aPIS[p,i,1] + '</' + s_aPIS[p,i,2] + '>'
           endif
       Next

       if lTemTag
          If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
             cXML += '</PISAliq></PIS>'
          ElseIf Val(s_aPIS[p, 1, 1]) == 3
             cXML += '</PISQte></PIS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
             cXML += '</PISNT></PIS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
             cXML+= '</PISOutr></PIS>'
          EndIf
       endif

       lTemTag := .F.

       For i := 1 to Len(s_aCOFINS[p])
           if i == 1
              if !Empty(s_aCOFINS[p,i,1])
                 If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
                    cXML += '<COFINS><COFINSAliq>'
                 ElseIf Val(s_aPIS[p, 1, 1]) == 3
                    cXML += '<COFINS><COFINSQte>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
                    cXML += '<COFINS><COFINSNT>'
                 ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
                    cXML += '<COFINS><COFINSOutr>'
                 EndIf
                 lTemTag := .T.
              endif
           endif
           if !Empty(s_aCOFINS[p,i,1])
              cXML += '<' + s_aCOFINS[p, i, 2] + '>' + s_aCOFINS[p, i, 1] + '</' + s_aCOFINS[p, i, 2] + '>'
           endif
       Next

       if lTemTag
          If Val(s_aPIS[p, 1, 1]) >= 1 .And. Val(s_aPIS[p, 1, 1]) <= 2
             cXML += '</COFINSAliq></COFINS>'
          ElseIf Val(s_aPIS[p, 1, 1]) == 3
             cXML += '</COFINSQte></COFINS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 4 .And. Val(s_aPIS[p, 1, 1]) <= 9
             cXML += '</COFINSNT></COFINS>'
          ElseIf Val(s_aPIS[p, 1, 1]) >= 49 .And. Val(s_aPIS[p, 1, 1]) <= 99
             cXML+= '</COFINSOutr></COFINS>'
          EndIf
       endif
       cXML += '</imposto>'
       If !Empty(s_cDiscAdicional)
          cXml += s_cDiscAdicional
       EndIf
       cXML += '</det>'
   Next

   cXML += '<total><ICMSTot>'

   For i := 1 to Len(s_aTotais[1])
       if !Empty(s_aTotais[1,i,1])
          cXML+='<'+s_aTotais[1,i,2]+'>'+s_aTotais[1,i,1]+'</'+s_aTotais[1,i,2]+'>'
       endif
   Next

   cXML += '</ICMSTot></total>'

   For i := 1 to Len(s_aTransp[1])
       if !Empty(s_aTransp[1,i,3])
          nFimTagPai := s_aTransp[1,i,4]
          cTagPai    += "|"+StrZero(nFimTagPai,2)+s_aTransp[1,i,3]
          cXML       += '<'+s_aTransp[1,i,3]+'>'
       endif
       if !Empty(s_aTransp[1,i,1])
          cXML += '<'+s_aTransp[1,i,2]+'>'+s_aTransp[1,i,1]+'</'+s_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 !Empty(s_aCobr[1,1,1])
      cXML += '<cobr>'
      For i := 1 to Len(s_aCobr[1])
          if !Empty(s_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 += '<'+s_aCobr[1,i,2]+'>'+s_aCobr[1,i,1]+'</'+s_aCobr[1,i,2]+'>'
          endif
      Next
      cXML += '</dup></cobr>'
   endif

   if !Empty(s_cinfCpl) .or. !Empty(s_cInfAdFisco)
//      cXML += '<infAdic>'
//      if !Empty(s_cInfAdFisco)
//         cXML += '<infAdFisco>'+s_cInfAdFisco+'</infAdFisco>'
//      endif
//      if !Empty(s_cinfCpl)
//         cXML += '<infCpl>'+s_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>'+s_cDigVal+'</DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></NFe>'
   cXML       += '<protNFe versao="'+s_cVersao+'"><infProt>'
   cXML       += '<tpAmb>'+s_cTpAmb+'</tpAmb><verAplic>'+s_cVerAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+s_cDhRecbto+'</dhRecbto>'
   cXML       += '<nProt>'+s_cnProt+'</nProt><digVal>'+s_cDigVal+'</digVal><cStat>'+s_ccStat+'</cStat><xMotivo>'+s_cxMotivo+'</xMotivo>'
   cXML       += '</infProt></protNFe></nfeProc>'

   cArqXml    := cPasta + '\' + cChave + '.xml'
   nArqHandle := FCreate(cArqXml, 0 )

   FWrite(nArqHandle,cXML)
   FClose(nArqHandle)

   *MsgInfo( 'Download realizado com sucesso! Arquivo gerado:' + CRLF + cArqXml, 'NF-e ')


return nil

 

 

 

Certo amigo te agradeço, vou dar uma analisada aqui no código, qq dúvida te chamo.

 

Link to comment
Share on other sites

 

Pessoal, boa tarde!

A Sefaz manteve a consulta antiga para fins de acessibilidade, para que a rotina funcione, bastar alterar as variáveis de URL conforme abaixo:


   PRIVATE cUrl := "http://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
   PRIVATE cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
   PRIVATE cUrl2:= "http://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3d"

Espero ter ajudado.

Abraços 

Att,

Fernando Alves
Skype: fernando.advpl

 

Fernando vc é o da FSIST ???

Se for poderia me enviar da última versão da DLL por email ???

amadorjosequeiroz@gmail.com

 

Link to comment
Share on other sites

Olá...

Segue e-mail do Fernando: fernando-mm@hotmail.com

Ao mandar o e-mail pro Fernando solicitando a ultima Dll compatível informe a chave de compra da q vc comprou dele, ai ele manda o link abaixo pra baixar onde pede a chave da sua Dll q comprou dele na época.

Segue link pra baixar a DLL (MAS ATENÇÃO VC PRECISA INFORMAR A CHAVE DA Q VC COMPROU, SE NÃO NÃO BAIXA)

Link to comment
Share on other sites

 

Olá...

Segue e-mail do Fernando: fernando-mm@hotmail.com

Ao mandar o e-mail pro Fernando solicitando a ultima Dll compatível informe a chave de compra da q vc comprou dele, ai ele manda o link abaixo pra baixar onde pede a chave da sua Dll q comprou dele na época.

Segue link pra baixar a DLL (MAS ATENÇÃO VC PRECISA INFORMAR A CHAVE DA Q VC COMPROU, SE NÃO NÃO BAIXA)

Entendi meu amigo te agradeço.

Link to comment
Share on other sites

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

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

×   Your previous content has been restored.   Clear editor

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

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