Eis abaixo, a rotina que não precisa do captcha para baixar o nfe da receita, peguei aqui no forum:
* 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"
******* https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3d
#include "fivewin.ch"
#include "image.ch"
#include "directry.ch"
#include "fileio.ch"
#include "tip.ch"
#define URL_CONSULTA "https://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
#define URL_CONSULTA_COMPLETA "https://www.nfe.fazenda.gov.br/portal/consultaRecaptcha.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
*#define URL_CONSULTA "https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
*#define URL_CONSULTA_COMPLETA "https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
// ---------------------------------------- //
// Download XML //
/******************************************************************************/
function DownloadNFe( cChave, cPasta )
public s_cVersao := "", s_cTpAmb := "", s_cVerAplic := "", s_cDhRecbto := "", s_cnProt := "", s_cDigVal := ""
public s_cinfCpl := "", s_cInfAdFisco := "", s_cDiscAdicional := "", s_cxMotivo := "", s_ccStat := ""
public s_aIde := {}, s_aEmit := {}, s_aDest := {}, s_aDet := {}, s_aICMS := {}, s_aIPI := {}
public s_aTransp := {}, s_aCobr := {}, s_aMedicamentos := {}, s_aTotais := {}, s_aPIS := {}, s_aCOFINS := {}
public s_cViewState, s_cViewStateGenerator, s_cHiddenToken, s_cEventValidation, s_cStringCookie, s_cHiddenSom,oDialog, oIcone, oFonte, hInput //** := HB_Hash()
cCaptcha := Space( 6 )
lSemParametros := .f.
if len(alltrim(cpasta))=0
cpasta:=CurDrive() + ":\" + GetCurDir()
cpasta:=cpasta+"\xmls"
IF !LISDIR(cpasta)
LMKDIR(cpasta)
ENDIF
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(v=vs.85).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
*
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, "ó", "ó" )
cTexto := StrTran( cTexto, "á", "á" )
cTexto := StrTran( cTexto, "é", "é" )
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 // --------- Download XML NFe --------- //