Colocado a tag dos lotes e arrumado pis confins icms
****************************************************
* Desenvolvido com base no projeto criado por Daniel Denobie - denobie@hotmail.com
* http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16972
****************************************************
#include <minigui.ch>
#include <hbcompat.ch>
DECLARE WINDOW principal
Procedure Main()
Public cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
Public cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
Public cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'
Public cCaptcha, cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenToken, cCodigo, cViewStateGenerator
Public cHiddenSom, cChave
SET NAVIGATION EXTENDED
SET LANGUAGE TO PORTUGUESE
Load Window principal
principal.Button_1.Enabled:=.F.
AtualizaImagem()
On Key escape Of principal Action Sair()
Center Window principal
Activate Window principal
Return
***************************************************
Function AtualizaImagem()
Try
oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
Catch
MsgInfo('Erro na Criação do Serviço')
Return .f.
End
Try
oServer:Open( "GET", cUrl, .f. )
oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
oServer:SetRequestHeader( "Connection", "keep-alive" )
oServer:Send()
oServer:WaitForResponse( 10000 )
Catch
MsgInfo('Erro na Conexão com o Site')
Return .f.
End
cHtml:= oServer:ResponseBody
cStringCookie:= oServer:getResponseHeader("Set-Cookie")
nInie := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cHtml) + 47
If nInie > 47
cHtml1 := SubStr( cHtml, nInie)
nFime := At('</span>', cHtml1) - 1
cMsgErro:= SubStr(cHtml, nInie, nFime)
If ! Empty(cMsgErro)
MsgInfo(cMsgErro, 'Erro no Site ' + cUrl)
Return .f.
EndIf
EndIf
nIni := At('id="__VIEWSTATE" value=', cHtml) + 24
cHtml1:= SubStr( cHtml, nIni)
nFim := At('" />', cHtml1) - 1
cViewState:= SubStr(cHtml, nIni, nFim)
nIni1 := At('id="__EVENTVALIDATION" value="', cHtml) + 30
cHtml1:= SubStr( cHtml, nIni1)
nFim1 := At('" />', cHtml1) - 1
cEeventValidation:= SubStr(cHtml, nIni1, nFim1)
nIni2 := At('id="__VIEWSTATEGENERATOR" value="', cHtml) + 33
cHtml1:= SubStr( cHtml, nIni2)
nFim2 := At('" />', cHtml1) - 1
cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)
nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="', cHtml) + 44
cHtml1:= SubStr( cHtml, nIni3)
nFim3 := At('" />', cHtml1) - 1
cHiddenToken:= SubStr(cHtml, nIni3, nFim3)
nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="', cHtml) + 49
cHtml1:= SubStr( cHtml, nIni4)
nFim4 := At('" />', cHtml1) - 1
cHiddenSom:= SubStr(cHtml, nIni4, nFim4)
nIni := At('data:image/png;base64,', cHtml) + 22
cHtml1:= SubStr(cHtml, nIni)
nFim := At('" style="border-width:0px;" />', cHtml1) - 2
cFile:= SubStr(cHtml, nIni, nFim)
txt_file:=fcreate("captcha.png", 0)
If (!(ferror() = 0))
MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
Return .f.
EndIf
cCodigo:= SubStr(cHtml, nIni, nFim)
If Empty(cCodigo)
MsgInfo("Erro de criacao do arquivo de imagem")
Return .f.
EndIf
cFile:= hb_base64Decode(cFile, cCodigo)
FWrite(txt_file, cFile)
FClose(txt_file)
SetProperty ('principal', 'oImg_captcha', 'Picture', 'Captcha.png')
principal.Button_1.Enabled:=.T.
Return .t.
***************************************************
Function Continuar()
Local oInternet, cParm, cRet:= cHtml:= '', cCaptcha:=principal.oTxt_captcha.Value
Private cChave:=principal.oChaveNFe.Value, cVersao:="", ctpAmb:="", cverAplic:="", cdhRecbto:="", cnProt:="", cdigVal:="", ccStat:="", cxMotivo:=""
Private cinfCpl:="", cinfAdFisco:="", cDiscAdicional:=""
Private aIde:={}, aEmit:={}, aDest:={}, aDet:={}, aICMS:={}, aIPI:={}, aPIS:={}, aCOFINS:={}, aTotais:={}, aTransp:={}, aCobr:={}
Private aMedicamentos:= {}
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
* TAM_LABEL se ZERO pega tudo, se MAIOR que ZERO pega o tamanho no início e se MENOR que ZERO exclui o tamanho no início e pega o restante
AADD(aIde,{{"","cUF","ide",21,"Chave de Acesso",2},; //1- tratamento especial
{"","cNF","",0,"Número",0},; //2- tratamento especial
{"","natOp","",0,"Natureza da Operação",0},; //3-
{"","indPag","",0,"Forma de Pagamento",1},; //4-
{"","mod","",0,"Modelo",0},; //5-
{"","serie","",0,"Série",0},; //6-
{"","nNF","",0,"Número",0},; //7-
{"","dhEmi","",0,"Data de Emissão",0},; //8- tratamento especial
{"","dhSaiEnt","",0,"Entrada",0},; //9- tratamento especial
{"","tpNF","",0,"Tipo da Operação",1},; //10-
{"","idDest","",0,"Destino da operação",1},; //11-
{"","cMunFG","",0,"Município da Ocorrência do Fato Gerador do ICMS",0},; //12-
{"","tpImp","",0,"Formato de Impressão DANFE",1},; //13- tratamento especial
{"","tpEmis","",0,"Tipo de Emissão",1},; //14-
{"","cDV","",0,"Chave de Acesso",0},; //15- tratamento especial
{"","tpAmb","",0,"Ambiente de autorização:",0},; //16- tratamento especial
{"","finNFe","",0,"Finalidade",1},; //17-
{"","indFinal","",0,"Consumidor final",1},; //18-
{"","indPres","",0,"Presença do Comprador",1},; //19-
{"","procEmi","",0,"Processo",1},; //20-
{"","verProc","",0,"Versão do Processo",0}}) //21-
AADD(aEmit,{{"","CNPJ","emit",20,"CNPJ",0},; //1- tratamento especial
{"","CPF","",0,"CPF",0},; //2-
{"","xNome","",0,"Nome / Razão Social",0},; //3-
{"","xFant","",0,"Nome Fantasia",0},; //4-
{"","xLgr","enderEmit",15,"Endereço",0},; //5- tratamento especial
{"","nro","",0,"Endereço",0},; //6- tratamento especial
{"","xCpl","",0,"Endereço",0},; //7- tratamento especial
{"","xBairro","",0,"Bairro / Distrito",0},; //8-
{"","cMun","",0,"Município",7},; //9-
{"","xMun","",0,"Município",-10},; //10-
{"","UF","",0,"UF",0},; //11-
{"","CEP","",0,"CEP",0},; //12- tratamento especial
{"","cPais","",0,"País",4},; //13-
{"","xPais","",0,"País",-7},; //14-
{"","fone","",0,"Telefone",0},; //15- tratamento especial
{"","IE","",0,"Inscrição Estadual",0},; //16-
{"","IEST","",0,"Inscrição Estadual do Substituto Tributário",0},; //17-
{"","IM","",0,"Inscrição Municipal",0},; //18-
{"","CNAE","",0,"CNAE Fiscal",0},; //19-
{"","CRT","",0,"Código de Regime Tributário",1}}) //20-
AADD(aDest,{{"","CNPJ","dest",20,"CNPJ",0},; //1-
{"","CPF","",0,"CPF",0},; //2-
{"","idEstrangeiro","",0,"",0},; //3-
{"","xNome","",0,"Nome / Razão Social",0},; //4-
{"","xLgr","enderDest",15,"Endereço",0},; //5- tratamento especial
{"","nro","",0,"Endereço",0},; //6- tratamento especial
{"","xCpl","",0,"Endereço",0},; //7- tratamento especial
{"","xBairro","",0,"Bairro / Distrito",0},; //8-
{"","cMun","",0,"Município",7},; //9-
{"","xMun","",0,"Município",-10},; //10-
{"","UF","",0,"UF",0},; //11-
{"","CEP","",0,"CEP",0},; //12- tratamento especial
{"","cPais","",0,"País",4},; //13-
{"","xPais","",0,"País",-7},; //14-
{"","fone","",0,"Telefone",0},; //15- tratamento especial
{"","indIEDest","",0,"Indicador IE",2},; //16- tratamento especial
{"","IE","",0,"Inscrição Estadual",0},; //17-
{"","ISUF","",0,"Inscrição SUFRAMA",0},; //18-
{"","IM","",0,"IM",0},; //19-
{"","email","",0,"E-mail",0}}) //20-
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML}
AADD(aTotais,{{"0.00","vBC","Base de Cálculo ICMS"},; //1-
{"0.00","vICMS","Valor do ICMS"},; //2-
{"0.00","vICMSDeson","Valor do ICMS Desonerado"},; //3-
{"0.00","vFCPUFDest","Valor Total ICMS FCP"},; //4-
{"0.00","vBCST","Base de Cálculo ICMS ST"},; //5-
{"0.00","vST","Valor ICMS Substituição"},; //6-
{"0.00","vProd","Valor Total dos Produtos"},; //7-
{"0.00","vFrete","Valor do Frete"},; //8-
{"0.00","vSeg","Valor do Seguro"},; //9-
{"0.00","vDesc","Valor Total dos Descontos"},; //10-
{"0.00","vII","Valor Total do II"},; //11-
{"0.00","vIPI","Valor Total do IPI"},; //12-
{"0.00","vPIS","Valor do PIS"},; //13-
{"0.00","vCOFINS","Valor da COFINS"},; //14-
{"0.00","vOutro","Outras Despesas Acessórias"},; //15-
{"0.00","vNF","Valor Total da NFe"}}) //16-
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
{"","CNPJ","transporta",8,"CNPJ",0},; //2-
{"","CPF","",0,"CPF",0},; //3-
{"","xNome","",0,"Razão Social / Nome",0},; //4-
{"","IE","",0,"Inscrição Estadual",0},; //5-
{"","xEnder","",0,"Endereço Completo",0},; //6-
{"","xMun","",0,"Município",0},; //7-
{"","UF","",0,"UF",0},; //8-
{"",'placa','veicTransp',11,'Placa',0},; //9-
{"","UF","",0,"UF",0},; //10-
{"","RNTC","",0,"RNTC",0},; //11-
{"","qVol","vol",17,"Quantidade",0},; //12-
{"","esp","",0,"Espécie",0},; //13-
{"","marca","",0,"Marca dos Volumes",0},; //14-
{"","nVol","",0,"Volume",0},; //15-
{"","pesoL","",0,"Peso Líquido",0},; //16-
{"","pesoB","",0,"Peso Bruto",0}}) //17-
* Conteudo elementos da Matriz = {VALOR_TAG,TAG}
AADD(aCobr,{{"","nDup"},; //1-
{"","dVenc"},; //2-
{"","vDup"},; //3-
{"","nDup"},; //4-
{"","dVenc"},; //5-
{"","vDup"},; //6-
{"","nDup"},; //7-
{"","dVenc"},; //8-
{"","vDup"},; //9-
{"","nDup"},; //10-
{"","dVenc"},; //11-
{"","vDup"},; //12-
{"","nDup"},; //13-
{"","dVenc"},; //14-
{"","vDup"},; //15-
{"","nDup"},; //16-
{"","dVenc"},; //17-
{"","vDup"},; //18-
{"","nDup"},; //19-
{"","dVenc"},; //20-
{"","vDup"},; //21-
{"","nDup"},; //22-
{"","dVenc"},; //23-
{"","vDup"},; //24-
{"","nDup"},; //25-
{"","dVenc"},; //26-
{"","vDup"},; //27-
{"","nDup"},; //28-
{"","dVenc"},; //29-
{"","vDup"}}) //30-
If ! DigitoChave(cChave)
Return Nil
EndIf
cParm:= { { "__EVENTARGUMENT", "" },;
{ "__EVENTTARGET", "" },;
{ "__EVENTVALIDATION", cEeventValidation },;
{ "__VIEWSTATE", cviewState },;
{ "__VIEWSTATEGENERATOR", cViewStateGenerator },;
{ "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
{ "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
{ "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
{ "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
{ "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
{ "ctl00$txtPalavraChave", "" },;
{ "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}
Try
oInternet:= TIPClientHTTP():New(cUrl, .f.)
Catch
MsgInfo('Erro na Criação do Serviço')
Return .f.
End
oInternet:SetCookie(cStringCookie)
If oInternet:Open()
If oInternet:POST(cParm)
cRet:=oInternet:ReadAll()
Else
msgInfo('Erro no Post ' + cUrl, 'Aviso do Sistema')
Return .F.
EndIf
Else
msgInfo('Erro na Conexão')
Return .f.
EndIf
oInternet:Close()
If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
cPart:= Substr(cPart, (At('<li>', cPart) + 4))
MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))))
Return .f.
EndIf
Try
oInternet:= TIPClientHTTP():New(cUrl1, .f.)
oInternet:nConnTimeout:= 10000
Catch
MsgInfo('Erro na Criação do Serviço')
Return .f.
End
oInternet:SetCookie(cStringCookie)
If oInternet:Open()
cHtml:=oInternet:ReadAll()
cStringCookie:= oInternet:GetCookies()
Else
msgInfo('Erro na Conexão')
Return .f.
EndIf
oInternet:Close()
If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
MsgInfo(SubStr(cPart, 1, (At('</span>', cPart) - 1)))
Return .f.
EndIf
If ! Empty(cHtml)
nIni := At('<html><link ', cHtml)
cParte:= SubStr(cHtml, nIni)
nIni := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"', cParte)
cParte:= SubStr(cParte, 1, nIni - 1)
nFim := At('</form>', cParte)
cFile := SubStr(cParte, nFim)
//memowrit('site.txt',cfile)
nIni := RAt('fixo-prod-serv-numero',cFile)
c_span := SubStr(cFile, nIni)
nIni := AT('<span>',c_span)+6
nTamTag:= AT('</span>',c_span)-nIni
nTotPro:= Val(alltrim(SubStr(c_span,nIni,nTamTag)))
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
For p_=1 to nTotPro
AADD(aDet,{{"","cProd","Código do Produto",0},; //1-
{"","cEAN","Código EAN Comercial",0},; //2-
{"","xProd","fixo-prod-serv-descricao",0},; //3-
{"","NCM","Código NCM",0},; //4-
{"","NVE","",0},; //5-
{"","CEST","Código CEST",0},; //6-
{"","EXTIPI","Código EX da TIPI",0},; //7-
{"","CFOP","CFOP",0},; //8-
{"","uCom","Unidade Comercial",0},; //9-
{"","qCom","Quantidade Comercial",0},; //10-
{"","vUnCom","Valor unitário de comercialização",0},; //11-
{"","vProd","fixo-prod-serv-vb",0},; //12-
{"","cEANTrib","Código EAN Tributável",0},; //13-
{"","uTrib","Unidade Tributável",0},; //14-
{"","qTrib","Quantidade Tributável",0},; //15-
{"","vUnTrib","Valor unitário de tributação",0},; //16-
{"","vFrete","Valor Total do Frete",0},; //17-
{"","vSeg","Valor do Seguro",0},; //18-
{"","vDesc","Valor do Desconto",0},; //19-
{"","vOutro","Outras Despesas Acessórias",0},; //20-
{"","indTot","Indicador de Composição do Valor Total da NF-e",1},; //21-
{"","nItemPed","Item do pedido de compra",0}}) //22-
AADD(aMedicamentos, {{"","Lote",'Nro. do Lote', 0},; //1-
{"","qLote",'Quantidade de produtos no lote', 0},; //2-
{"","dFab",'Data de fabricaçã', 0},; //3-
{"","dVal",'Data de validade', 0},; //4-
{"","vPMC",'Preço Máximo Consumido', 0},; //5-
{"","infAdProd",'Descrição', 0}}) //6-
AADD(aICMS,{{"","orig","Origem da Mercadoria",1},; //1- ICMS Normal e ST
{"","CST","Tributação do ICMS",2},; //2-
{"","CSOSN","Código de Situação da Operação",3},; //3-
{"","modBC","Modalidade Definição da BC do ICMS",1},; //4-
{"","pRedBC","Percentual Redução de BC do ICMS",0},; //5-
{"","vBC","Base de Cálculo",0},; //6-
{"","pICMS","Alíquota",0},; //7-
{"","vICMS","Valor",0},; //8-
{"","vICMSDeson","",0},; //9-
{"","motDesICMS","",0},; //10-
{"","modBCST","Modalidade de determinação da BC do ICMS ST",1},; //11-
{"","pMVAST","Percentual Margem Valor Adicionado do ICMS ST",0},; //12-
{"","pRedBCST","Percentual da Redução de BC do ICMS ST",0},; //13-
{"","vBCST","Valor da BC do ICMS ST",0},; //14-
{"","pICMSST","Alíquota do imposto do ICMS ST",0},; //15-
{"","vICMSST","Valor do ICMS ST",0},; //16-
{"","vBCSTRet","Valor da BC do ICMS ST retido",0},; //17-
{"","vICMSSTRet","Valor do ICMS ST retido",0},; //18-
{"","vICMSOp","",0},; //19-
{"","pDif","",0},; //20-
{"","vICMSDif","",0},; //21-
{"","pCredSN","Alíquota aplicável de cálculo do crédito",0},; //22-
{"","vCredICMSSN","Valor crédito do ICMS",0}}) //23-
AADD(aIPI,{{"","cEnq","Código de Enquadramento", 3},;
{"","CST","CST", 2},; //1-
{"","vBC","Base de Cálculo", 0},; //2-
{"","pIPI","Alíquota", 0},; //3-
{"","vIPI","Valor IPI", 0},; //4-
{"","qBCProd","", 0},; //5-
{"","vAliqProd","", 0}}) //6-
AADD(aPIS,{{"","CST","CST",2},; //1-
{"","vBC","Base de Cálculo",0},; //2-
{"","pPIS","Alíquota",0},; //3-
{"","vPIS","Valor",0},; //4-
{"","qBCProd","",0},; //5-
{"","vAliqProd","",0}}) //6-
AADD(aCOFINS,{{"","CST","CST",2},; //1-
{"","vBC","Base de Cálculo",0},; //2-vBC
{"","pCOFINS","Alíquota",0},; //3-
{"","vCOFINS","Valor",0},; //4-
{"","qBCProd","",0},; //5-
{"","vAliqProd","",0}}) //6-
Next
nIni := At('<div class="GeralXslt"',cFile)
cParte := SubStr(cFile, nIni)
nIni := At('<div id="Emitente"',cParte)
cParte := SubStr(cParte, 1, nIni - 1) //ide
GeraTag("ide",cParte)
nIni := At('<div id="Emitente"',cFile)
cParte := SubStr(cFile, nIni)
nIni := At('</div>',cParte)
cParte := SubStr(cParte, 1, nIni - 1) //emit
GeraTag("emit",cParte)
nIni := At('<div id="DestRem"',cFile)
cParte := SubStr(cFile, nIni)
nIni := At('</div>',cParte)
cParte := SubStr(cParte, 1, nIni - 1) //dest
GeraTag("dest",cParte)
nIni := At('<td class="fixo-prod-serv-numero"><span>', cFile)
cParte := SubStr(cFile, nIni)
nIni := At('</body></html>', cParte)
cParte := SubStr(cParte, 1, nIni - 1) //det
GeraTag("det", cParte)
nIni := At('<legend class="titulo-aba">Totais</legend>',cFile)
cParte := SubStr(cFile, nIni+42)
nIni := At('<div id="aba_nft_5"',cParte)
cParte := SubStr(cParte, 1, nIni - 1) //totais
GeraTag("totais",cParte)
nIni := At('Dados do Transporte</legend>',cFile)
cParte := SubStr(cFile, nIni+29)
nIni := At('<div id="Cobranca"',cParte)
cParte := SubStr(cParte, 1, nIni - 1) //transp
GeraTag("transp",cParte)
nIni := At('<legend>Duplicatas</legend><table',cFile)
if nIni>0
cParte := SubStr(cFile, nIni)
nIni := At('</table>',cParte)
cParte := SubStr(cParte, 1, nIni - 1) //cobr
GeraTag("cobr",cParte)
endif
GravaXML()
Else
msgInfo('Erro ao ler retorno da Consulta')
Return .f.
EndIf
Return Nil
***************************************
Function DigitoChave(CodigoChave)
Local indice:= '4329876543298765432987654329876543298765432'
Local digito
nSoma:= 0
For contador:= 1 to 43
nSoma+= (Val(SubStr(CodigoChave, contador, 1)) * Val(SubStr(indice, contador, 1)))
Next
digito:= (nSoma % 11)
If digito == 0 .Or. digito == 1
digito:= 0
Else
digito:= (11 - digito)
EndIf
If SubStr(CodigoChave, 44, 1) != LTrim(Str(digito, 1))
MsgStop('Código da Chave Errado....', 'Aviso do Sistema')
principal.oChaveNFe.SetFocus
Return .f.
EndIf
Return .t.
**************************************
Function Troca_Acento(cTexto)
cTexto := StrTran( cTexto, "ó", "ó" )
cTexto := StrTran( cTexto, "á", "á" )
Return cTexto
***************************************************
Function Limpar()
principal.oChaveNFe.Value:=SPACE(44)
principal.oTxt_captcha.Value:=SPACE(6)
principal.oChaveNFe.SetFocus
Return Nil
***************************************************
Function Sair()
principal.release
Return Nil
***************************************************
Function GeraTag(_tag, cParte)
if _tag=="ide"
cPar_:= StrTran(cFile,Chr(13)+Chr(10),"")
cPar_:= StrTran(cPar_,Chr(160),"")
nIni := At('<legend>Informações Complementares de Interesse do Contribuinte</legend>', cPar_)
if nIni>0
c_span:=SubStr(cPar_, nIni+70)
nIni:=AT('<div style="word-wrap: break-word">',c_span)
c_span:=SubStr(c_span, nIni+35)
nIni:=AT('</div></span>',c_span)
cinfCpl:=alltrim(SubStr(c_span,1,nIni-1))
endif
cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
cPar_:=StrTran(cPar_,Chr(160),"")
nIni:=AT('Situação Atual:',cPar_)
c_span:=SubStr(cPar_, nIni+15)
nIni:=AT('(Ambiente de autorização:',c_span)
cxMotivo:=alltrim(SubStr(c_span,1,nIni-1))
if "AUTORIZADA" $ cxMotivo
ccStat:="100"
cxMotivo:="Autorizado o uso da NF-e"
endif
if "CANCELADA" $ cxMotivo
ccStat:="101"
cxMotivo:="Cancelamento de NF-e homologado"
endif
nIni:=AT('Data Inclusão AN</label></td></tr><tr><td><span>',cPar_)
c_span:=SubStr(cPar_, nIni+50)
nIni:=AT('<span>',c_span)+6
nTamTag:=AT('<input',c_span)-nIni
cnProt:=alltrim(SubStr(c_span,nIni,nTamTag))
c_span:=SubStr(c_span, nIni+nTamTag)
nIni:=AT('<span>',c_span)+6
c_span:=SubStr(c_span,nIni)
nTamTag:=AT('</span>',c_span)-1 //nIni
cdhRecbto:=alltrim(SubStr(c_span,1,nTamTag))
cdhRecbto:=SubStr(cdhRecbto,7,4)+"-"+SubStr(cdhRecbto,4,2)+"-"+left(cdhRecbto,2)+"T"+Right(cdhRecbto,14)
nIni:=AT('<i>Digest</i> Value da NF-e',cPar_)
c_span:=SubStr(cPar_, nIni+20)
nIni:=AT('<span>',c_span)+6
nTamTag:=AT('</span>',c_span)-nIni
cdigVal:=alltrim(SubStr(c_span,nIni,nTamTag))
nIni:=AT('Versão XML',cParte)
c_span:=SubStr(cParte, nIni)
nIni:=AT('<span>',c_span)+6
nTamTag:=AT('</span>',c_span)-nIni
cVersao:=alltrim(SubStr(c_span,nIni,nTamTag))
For i:= 1 to Len(aIde[1])
cPar_:= cParte
if i == 12
cPar_:= cFile
endif
if i == 13
cPar_:= cFile
endif
nIni := AT(aIde[1,i,5],cPar_)
c_span:= SubStr(cPar_, nIni)
if i != 16
nIni :=AT('<span>', c_span) + 6
nTamTag:= AT('</span>', c_span) - nIni
c_tag := alltrim(SubStr(c_span, nIni, nTamTag))
else
nIni := AT('</legend>', c_span)
c_tag:= alltrim(SubStr(c_span, 1, nIni - 1))
if AT('produção', c_tag) > 0
c_tag:= "1"
else
c_tag:= "2"
endif
ctpAmb:= c_tag
endif
if i==2
c_tag:= SubStr(cChave, 36, 8)
//c_tag:= StrZero(Val(c_tag), 9)
endif
if i==8 .or. i==9
if !Empt(c_tag)
c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)+"T"+SubStr(c_tag,12)
endif
endif
if i==15
c_tag:=right(c_tag,1)
endif
if aIde[1,i,6]!=0
if aIde[1,i,6]>0
c_tag:=left(c_tag,aIde[1,i,6])
else
c_tag:=SubStr(c_tag,Abs(aIde[1,i,6])+1)
endif
endif
aIde[1,i,1]:=c_tag
Next
endif
if _tag == "emit"
For i=1 to Len(aEmit[1])
cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
cPar_:=StrTran(cPar_,Chr(160),"")
nIni:=AT(aEmit[1,i,5],cPar_)
if nIni>0
c_span:=SubStr(cPar_, nIni)
nIni:=AT('<span>',c_span)+6
nTamTag:=AT('</span>',c_span)-nIni
c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
if i>=1 .and. i<=2
c_tag:=StrTran(c_tag,".","")
c_tag:=StrTran(c_tag,"/","")
c_tag:=StrTran(c_tag,"-","")
endif
if i>=5 .and. i<=7
nIni:= AT(",",c_tag)
if i == 5
c_tag:= Left(c_tag,nIni-1)
elseif i == 6
c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
nIni := AT(" ", c_tag)
if nIni > 0
c_tag:= Left(c_tag, nIni - 1)
endif
else
c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
nIni := AT(" ", c_tag)
if nIni>0
c_tag:= alltrim(SubStr(c_tag, nIni + 1))
else
c_tag:= ""
endif
endif
endif
if i==12
c_tag:=StrTran(c_tag,"-","")
endif
if i==15
c_tag:= StrTran(c_tag,"(","")
c_tag:= StrTran(c_tag,")","")
c_tag:= StrTran(c_tag,"-","")
endif
if aEmit[1, i, 6] != 0
if aEmit[1, i, 6] > 0
c_tag:= left(c_tag,aEmit[1, i, 6])
else
c_tag:= alltrim(SubStr(c_tag, Abs(aEmit[1, i, 6]) + 1))
c_tag:= alltrim(StrTran(c_tag, "-", ""))
endif
endif
aEmit[1, i, 1]:= c_tag
endif
Next
endif
if _tag == "dest"
For i=1 to Len(aDest[1])
cPar_:= StrTran(cParte, Chr(13) + Chr(10), "")
cPar_:= StrTran(cPar_, Chr(160), "")
nIni := AT(aDest[1, i, 5], cPar_)
if nIni > 0
c_span := SubStr(cPar_, nIni)
nIni := AT('<span>',c_span)+6
nTamTag:= AT('</span>',c_span)-nIni
c_tag := AllTrim(SubStr(c_span, nIni, nTamTag))
if i >= 1 .and. i <= 2
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, "/", "")
c_tag:= StrTran(c_tag, "-", "")
endif
If i >= 5 .and. i <= 7
nIni:= AT(",", c_tag)
if i == 5
c_tag:= Left(c_tag,nIni-1)
elseif i == 6
c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
nIni := AT(" ", c_tag)
if nIni > 0
c_tag:= Left(c_tag, nIni - 1)
endif
else
c_tag:= AllTrim(SubStr(c_tag, nIni + 1))
nIni := AT(" ", c_tag)
if nIni > 0
c_tag:= alltrim(SubStr(c_tag, nIni + 1))
else
c_tag:= ""
endif
endif
EndIf
if i == 12
c_tag:= StrTran(c_tag, "-", "")
endif
if i==15
c_tag:= StrTran(c_tag, "(", "")
c_tag:= StrTran(c_tag, ")", "")
c_tag:= StrTran(c_tag, "-", "")
endif
if i==16
c_tag:= alltrim(Str(Val(c_tag)))
endif
if aDest[1, i, 6] != 0
if aDest[1, i, 6] > 0
c_tag:= left(c_tag, aDest[1, i, 6])
else
c_tag:= alltrim(SubStr(c_tag, Abs(aDest[1,i,6]) + 1))
c_tag:= alltrim(StrTran(c_tag, "-", ""))
endif
endif
aDest[1, i, 1]:= c_tag
endif
Next
endif
if _tag == "det"
cPar_ := StrTran(cParte, Chr(13) + Chr(10), "")
cPar_ := StrTran(cPar_, Chr(160), "")
For p_:= 1 to Len(aDet)
For i:= 1 to Len(aDet[p_])
nIni:= At(aDet[p_, i, 3], cPar_)
if nIni > 0
c_span := SubStr(cPar_, nIni)
nIni := At('<span>',c_span)+6
nTamTag:= At('</span>',c_span)-nIni
c_tag := AllTrim(SubStr(c_span,nIni,nTamTag))
if aDet[p_, i, 4] != 0
if aDet[p_, i, 4] > 0
c_tag:= left(c_tag, aDet[p_, i, 4])
else
c_tag:= alltrim(SubStr(c_tag, Abs(aDet[p_, i, 4]) + 1))
c_tag:= alltrim(StrTran(c_tag, "-", ""))
endif
endif
If i != 3
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, ",", ".")
endIf
aDet[p_, i, 1]:= c_tag
endif
Next
For i:= 1 To Len(aICMS[p_])
nIni:= At(aICMS[p_, i, 3], cPar_)
if nIni > 0
c_span := SubStr(cPar_, nIni)
nIni := At('<span>', c_span) + 6
nTamTag:= At('</span>', c_span) - nIni
c_tag := AllTrim(SubStr(c_span, nIni, nTamTag))
If aICMS[p_, i, 4] != 0
if aICMS[p_, i, 4] > 0
c_tag:= Left(c_tag, aICMS[p_, i, 4])
else
c_tag:= AllTrim(SubStr(c_tag, Abs(aICMS[p_, i, 4]) + 1))
c_tag:= AllTrim(StrTran(c_tag, "-", ""))
endif
endif
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, ",", ".")
aICMS[p_, i, 1]:= c_tag
endif
Next
nIni:= AT('<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_)
if nIni > 0
cPar_:= SubStr(cPar_, nIni)
For i:= 1 To Len(aIPI[p_])
nIni:= AT(aIPI[p_, i, 3], cPar_)
if nIni > 0
c_span := SubStr(cPar_, nIni)
nIni := AT('<span>', c_span) + 6
nTamTag:= AT('</span>', c_span) - nIni
c_tag := AllTrim(SubStr(c_span, nIni, nTamTag))
if aIPI[p_, i, 4] != 0
if aIPI[p_, i, 4] > 0
c_tag:= Left(c_tag, aIPI[p_, i, 4])
else
c_tag:= Alltrim(SubStr(c_tag, Abs(aIPI[p_, i, 4]) + 1))
c_tag:= Alltrim(StrTran(c_tag, "-", ""))
endif
endif
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, ",", ".")
aIPI[p_, i, 1]:= c_tag
endif
Next
endif
nIni:= At('<legend class="toggle">PIS</legend>', cPar_)
if nIni > 0
cPar_:= SubStr(cPar_, nIni)
For i:= 1 to Len(aPIS[p_])
nFim:= At('<td class="fixo-prod-serv-numero"><span>', cPar_)
cPar1_:= SubStr(cPar_, 1, nFim)
nIni:= AT(aPIS[p_, i, 3], cPar1_)
if nIni > 0
c_span := SubStr(cPar1_, nIni)
nIni := At('<span>', c_span) + 6
nTamTag:= At('</span>', c_span) - nIni
c_tag := AllTrim(SubStr(c_span, nIni, nTamTag))
if aPIS[p_,i,4] != 0
if aPIS[p_,i,4] > 0
c_tag:= Left(c_tag,aPIS[p_,i,4])
else
c_tag:= AllTrim(SubStr(c_tag, Abs(aPIS[p_, i, 4]) + 1))
c_tag:= AllTrim(StrTran(c_tag, "-", ""))
endif
endif
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, ",", ".")
aPIS[p_, i, 1]:= c_tag
endif
Next
endif
nIni:= AT('<legend class="toggle">COFINS</legend>', cPar_)
if nIni > 0
cPar_:= SubStr(cPar_, nIni)
For i:= 1 to Len(aCOFINS[p_])
nFim := At('<td class="fixo-prod-serv-numero">', cPar_)
cPar1_:= SubStr(cPar_, 1, nFim)
nIni := AT(aCOFINS[p_, i, 3], cPar1_)
if nIni > 0
c_span := SubStr(cPar1_, nIni)
nIni := AT('<span>', c_span) + 6
nTamTag:= AT('</span>', c_span) - nIni
c_tag:=alltrim(SubStr(c_span, nIni, nTamTag))
if aCOFINS[p_, i, 4] != 0
if aCOFINS[p_, i, 4] > 0
c_tag:= left(c_tag, aCOFINS[p_, i, 4])
else
c_tag:= alltrim(SubStr(c_tag, Abs(aCOFINS[p_, i, 4]) + 1))
c_tag:= alltrim(StrTran(c_tag, "-", ""))
endif
endif
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, ",", ".")
aCOFINS[p_, i, 1]:= c_tag
endif
Next
endif
nIni:= At('<legend>Detalhamento específico dos medicamentos</legend>', cPar_)
if nIni > 0
cPar_:=SubStr(cPar_, nIni)
For i:= 1 to Len(aMedicamentos[p_])
nIni:= AT(aMedicamentos[p_, i, 3], cPar_)
if nIni > 0
c_span := SubStr(cPar_, nIni)
nIni := At('<span>', c_span) + 6
nTamTag:= At('</span>', c_span) - nIni
c_tag := AllTrim(SubStr(c_span, nIni, nTamTag))
if aMedicamentos[p_,i,4] != 0
if aMedicamentos[p_,i,4] > 0
c_tag:= Left(c_tag,aMedicamentos[p_,i,4])
else
c_tag:= AllTrim(SubStr(c_tag, Abs(aMedicamentos[p_, i, 4]) + 1))
c_tag:= AllTrim(StrTran(c_tag, "-", ""))
endif
endif
If i != 6
c_tag:= StrTran(c_tag, ".", "")
c_tag:= StrTran(c_tag, ",", ".")
endif
if StrZero(i, 2) $ "-03-04"
c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
endif
aMedicamentos[p_, i, 1]:= c_tag
endif
Next
endif
nIni := At('<td class="fixo-prod-serv-numero"><span>', cPar_)
cPar_ := SubStr(cPar_, nIni)
Next
endif
if _tag=="totais"
For i=1 to Len(aTotais[1])
cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
cPar_:=StrTran(cPar_,Chr(160),"")
nIni:=AT(aTotais[1,i,3],cPar_)
if nIni>0
c_span:=SubStr(cPar_, nIni)
nIni:=AT('<span>',c_span)+6
nTamTag:=AT('</span>',c_span)-nIni
c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
c_tag:=StrTran(c_tag,".","")
c_tag:=StrTran(c_tag,",",".")
aTotais[1,i,1]:=c_tag
endif
Next
endif
if _tag=="transp"
For i=1 to Len(aTransp[1])
cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
cPar_:=StrTran(cPar_,Chr(160),"")
nIni:=AT(aTransp[1,i,5],cPar_)
if nIni>0
c_span:=SubStr(cPar_, nIni)
nIni:=AT('<span>',c_span)+6
nTamTag:=AT('</span>',c_span)-nIni
c_tag:=alltrim(SubStr(c_span,nIni,nTamTag))
if i>=2 .and. i<=3
c_tag:=StrTran(c_tag,".","")
c_tag:=StrTran(c_tag,"/","")
c_tag:=StrTran(c_tag,"-","")
endif
if aTransp[1,i,6]!=0
if aTransp[1,i,6]>0
c_tag:=left(c_tag,aTransp[1,i,6])
else
c_tag:=alltrim(SubStr(c_tag,Abs(aTransp[1,i,6])+1))
c_tag:=alltrim(StrTran(c_tag,"-",""))
endif
endif
aTransp[1,i,1]:=c_tag
endif
Next
endif
if _tag=="cobr"
cPar_:=StrTran(cParte,Chr(13)+Chr(10),"")
cPar_:=StrTran(cPar_,Chr(160),"")
For i=1 to Len(aCobr[1])
nIni:=AT('<span>',cPar_)
if nIni>0
cPar_:=SubStr(cPar_, nIni+6)
nTamTag:=AT('</span>',cPar_)-1
c_tag:=alltrim(SubStr(cPar_,1,nTamTag))
c_tag:=StrTran(c_tag,".","")
c_tag:=StrTran(c_tag,",",".")
if StrZero(i,2) $ "-02-05-08-11-14-17-20-23-26-29"
c_tag:=SubStr(c_tag,7,4)+"-"+SubStr(c_tag,4,2)+"-"+left(c_tag,2)
endif
aCobr[1,i,1]:=c_tag
else
Exit
endif
Next
endif
return Nil
***************************************************
Function GravaXML()
Local cXML:='<?xml version="1.0" encoding="UTF-8"?><nfeProc versao="'+cVersao+'" xmlns="http://www.portalfiscal.inf.br/nfe"><NFe xmlns="http://www.portalfiscal.inf.br/nfe"><infNFe versao="'+cVersao+'" Id="NFe'+cChave+'">'
cTagPai:=""
nFimTagPai:=0
For i=1 to Len(aIde[1])
if !Empt(aIde[1,i,3])
nFimTagPai:=aIde[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aIde[1,i,3]
cXML+='<'+aIde[1,i,3]+'>'
endif
if !Empt(aIde[1,i,1])
cXML+='<'+aIde[1,i,2]+'>'+aIde[1,i,1]+'</'+aIde[1,i,2]+'>'
endif
if i==nFimTagPai
nIni:=RAT("|",cTagPai)
cTag:=Substr(cTagPai,nIni+1)
cXML+='</'+SubStr(cTag,3)+'>'
cTagPai:=SubStr(cTagPai,1,nIni-1)
if nIni>1
nIni:=RAT("|",cTagPai)
nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
else
nFimTagPai:=0
endif
endif
Next
For i=1 to Len(aEmit[1])
if !Empt(aEmit[1,i,3])
nFimTagPai:=aEmit[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aEmit[1,i,3]
cXML+='<'+aEmit[1,i,3]+'>'
endif
if !Empt(aEmit[1,i,1])
cXML+='<'+aEmit[1,i,2]+'>'+aEmit[1,i,1]+'</'+aEmit[1,i,2]+'>'
endif
if i==nFimTagPai
nIni:=RAT("|",cTagPai)
cTag:=Substr(cTagPai,nIni+1)
cXML+='</'+SubStr(cTag,3)+'>'
cTagPai:=SubStr(cTagPai,1,nIni-1)
if nIni>1
nIni:=RAT("|",cTagPai)
nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
else
nFimTagPai:=0
endif
endif
Next
For i=1 to Len(aDest[1])
if !Empt(aDest[1,i,3])
nFimTagPai:=aDest[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aDest[1,i,3]
cXML+='<'+aDest[1,i,3]+'>'
endif
if !Empt(aDest[1,i,1])
cXML+='<'+aDest[1,i,2]+'>'+aDest[1,i,1]+'</'+aDest[1,i,2]+'>'
endif
if i==nFimTagPai
nIni:=RAT("|",cTagPai)
cTag:=Substr(cTagPai,nIni+1)
cXML+='</'+SubStr(cTag,3)+'>'
cTagPai:=SubStr(cTagPai,1,nIni-1)
if nIni>1
nIni:=RAT("|",cTagPai)
nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
else
nFimTagPai:=0
endif
endif
Next
For p_=1 to Len(aDet)
cXML+='<det nItem="'+alltrim(Str(p_))+'"><prod>'
For i=1 to Len(aDet[p_])
if !Empt(aDet[p_,i,1])
cXML+='<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
endif
Next
lpoemTag:= .F.
For i:= 1 to Len(aMedicamentos[p_])
if i == 1
if ! Empty(aMedicamentos[p_,i,1])
cXML+= '<med><nLote>' + aMedicamentos[p_,i,1] + '</nLote>'
lpoemTag:=.T.
endif
Else
if ! Empt(aMedicamentos[p_,i,1])
If i == 6
cDiscAdicional:= '<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
Else
cXML+='<'+aMedicamentos[p_,i,2]+'>'+ aMedicamentos[p_,i,1] + '</'+aMedicamentos[p_,i,2]+'>'
Endif
endif
EndIf
Next
if lpoemTag
cXML+='</med>'
endif
cXML+= '</prod><imposto><ICMS>'
cTag_:='ICMS'
For i:= 1 to Len(aICMS[p_])
if i == 1
if ! Empty(aICMS[p_, 2, 1])
cTag_+= aICMS[p_, 2, 1]
else
cTag_+= 'SN' + aICMS[p_, 3, 1]
endif
cXML+= '<' + cTag_ + '>'
endif
if !Empty(aICMS[p_, i, 1])
If aICMS[p_, 2, 1] == '00'
If StrZero(i, 2) $ "-01-02-04-06-07-08"
cXML+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '10'
If StrZero(i, 2) $ "-01-02-04-06-07-08-11-12-13-14-15-16"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '20'
If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '30'
If StrZero(i, 2) $ "-01-02-11-12-13-14-15-16-09-10"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '40' .Or. aICMS[p_, 2, 1] == '41' .Or. aICMS[p_, 2, 1] == '50'
If StrZero(i, 2) $ "-01-02-09-10"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '51'
If StrZero(i, 2) $ "-01-02-04-05-06-07-08-19-20-21"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '60'
If StrZero(i, 2) $ "-01-02-17-18"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '70'
If StrZero(i, 2) $ "-01-02-04-05-06-07-08-09-10-11-12-13-14-15-16"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
ElseIf aICMS[p_, 2, 1] == '90'
If StrZero(i, 2) $ "-01-02-04-05-06-07-08-11-12-13-14-15-16"
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
Else
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
endif
Next
cXML+='</'+cTag_+'></ICMS>'
lpoemTag:= .F.
For i:= 1 to Len(aIPI[p_])
if i == 1
if ! Empty(aIPI[p_,i,1])
cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPITrib>'
lpoemTag:=.T.
endif
Else
if ! Empt(aIPI[p_,i,1])
cXML+='<'+aIPI[p_,i,2]+'>'+ aIPI[p_,i,1] + '</'+aIPI[p_,i,2]+'>'
endif
EndIf
Next
if lpoemTag
cXML+='</IPITrib></IPI>'
endif
lpoemTag:= .F.
For i:= 1 to Len(aPIS[p_])
if i == 1
if ! Empty(aPIS[p_, i, 1])
If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
cXML+= '<PIS><PISAliq>'
ElseIf Val(aPIS[p_, 1, 1]) == 3
cXML+= '<PIS><PISQte>'
ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
cXML+= '<PIS><PISNT>'
ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
cXML+= '<PIS><PISOutr>'
EndIf
lpoemTag:= .T.
endif
endif
if ! Empty(aPIS[p_, i, 1])
cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
endif
Next
if lpoemTag
If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
cXML+= '</PISAliq></PIS>'
ElseIf Val(aPIS[p_, 1, 1]) == 3
cXML+= '</PISQte></PIS>'
ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
cXML+= '</PISNT></PIS>'
ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
cXML+= '</PISOutr></PIS>'
EndIf
endif
lpoemTag:=.F.
For i=1 to Len(aCOFINS[p_])
if i==1
if !Empt(aCOFINS[p_,i,1])
If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
cXML+= '<COFINS><COFINSAliq>'
ElseIf Val(aPIS[p_, 1, 1]) == 3
cXML+= '<COFINS><COFINSQte>'
ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
cXML+= '<COFINS><COFINSNT>'
ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
cXML+= '<COFINS><COFINSOutr>'
EndIf
lpoemTag:=.T.
endif
endif
if !Empt(aCOFINS[p_,i,1])
cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
endif
Next
if lpoemTag
If Val(aPIS[p_, 1, 1]) >= 1 .And. Val(aPIS[p_, 1, 1]) <= 2
cXML+= '</COFINSAliq></COFINS>'
ElseIf Val(aPIS[p_, 1, 1]) == 3
cXML+= '</COFINSQte></COFINS>'
ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
cXML+= '</COFINSNT></COFINS>'
ElseIf Val(aPIS[p_, 1, 1]) >= 49 .And. Val(aPIS[p_, 1, 1]) <= 99
cXML+= '</COFINSOutr></COFINS>'
EndIf
endif
cXML+= '</imposto>'
If ! Empty(cDiscAdicional)
cXml+= cDiscAdicional
EndIf
cXML+= '</det>'
Next
cXML+='<total><ICMSTot>'
For i=1 to Len(aTotais[1])
if !Empt(aTotais[1,i,1])
cXML+='<'+aTotais[1,i,2]+'>'+aTotais[1,i,1]+'</'+aTotais[1,i,2]+'>'
endif
Next
cXML+='</ICMSTot></total>'
For i=1 to Len(aTransp[1])
if !Empt(aTransp[1,i,3])
nFimTagPai:=aTransp[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aTransp[1,i,3]
cXML+='<'+aTransp[1,i,3]+'>'
endif
if !Empt(aTransp[1,i,1])
cXML+='<'+aTransp[1,i,2]+'>'+aTransp[1,i,1]+'</'+aTransp[1,i,2]+'>'
endif
if i==nFimTagPai
nIni:=RAT("|",cTagPai)
cTag:=Substr(cTagPai,nIni+1)
cXML+='</'+SubStr(cTag,3)+'>'
cTagPai:=SubStr(cTagPai,1,nIni-1)
if nIni>1
nIni:=RAT("|",cTagPai)
nFimTagPai:=Val(Substr(cTagPai,nIni+1,2))
else
nFimTagPai:=0
endif
if SubStr(cTag,3)=="vol"
cXML+='</transp>'
endif
endif
Next
if !Empt(aCobr[1,1,1])
cXML+='<cobr>'
For i=1 to Len(aCobr[1])
if !Empt(aCobr[1,i,1])
if StrZero(i,2) $ "-01-04-07-10-13-16-19-22-25-28"
if i>2
cXML+='</dup>'
endif
cXML+='<dup>'
endif
cXML+='<'+aCobr[1,i,2]+'>'+aCobr[1,i,1]+'</'+aCobr[1,i,2]+'>'
endif
Next
cXML+='</dup></cobr>'
endif
if !Empt(cinfCpl) .or. !Empt(cinfAdFisco)
cXML+='<infAdic>'
if !Empt(cinfAdFisco)
cXML+='<infAdFisco>'+cinfAdFisco+'</infAdFisco>'
endif
if !Empt(cinfCpl)
cXML+='<infCpl>'+cinfCpl+'</infCpl>'
endif
cXML+='</infAdic>'
endif
cXML+='</infNFe>'
cXML+='<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />'
cXML+='<Reference URI="#NFe'+cChave+'">'
cXML+='<Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />'
cXML+='<DigestValue>'+cdigVal+'</DigestValue></Reference></SignedInfo><SignatureValue></SignatureValue><KeyInfo></KeyInfo></Signature></NFe>'
cXML+='<protNFe versao="'+cVersao+'"><infProt>'
cXML+='<tpAmb>'+ctpAmb+'</tpAmb><verAplic>'+cverAplic+'</verAplic><chNFe>'+cChave+'</chNFe><dhRecbto>'+cdhRecbto+'</dhRecbto>'
cXML+='<nProt>'+cnProt+'</nProt><digVal>'+cdigVal+'</digVal><cStat>'+ccStat+'</cStat><xMotivo>'+cxMotivo+'</xMotivo>'
cXML+='</infProt></protNFe></nfeProc>'
cArqXml:=cChave+"-nfe.xml"
cIniFolder:=DiskName()+":\"+CurDir()+"\"
cArqXml:=PutFile ( {{'Arquivos xML','*.xml'}} , "Gravar Arquivo xML" , cIniFolder ,, cArqXml )
nArqHandle := FCREATE(cArqXml, 0 )
FWRITE(nArqHandle,cXML)
FCLOSE(nArqHandle)
MsgInfo("xML criado com sucesso!")
return Nil