Moderador: Moderadores
//=========================================================================
//
// Arquivo.....: impnfe.prg
// Criado em...: 09/05/2016 as 10:41:18
//
// Projeto.....: Importa NF-e da SEFAZ
//
// Programador.: Daniel Denobie - denobie@hotmail.com
// alterado para HWgui em 20/03/2019 por
// Fernando Queiroz - m5200n@hotmail.com
//=========================================================================
#include 'HWgui.ch'
#include 'hbcompat.ch'
MEMVAR aCobr, I, cInfCpl, cInfAdFisco, cDigVal, cChave, cVerAplic, cTpAmb, c_Span, cRet, aRet
MEMVAR cVersao, cArqXml, cIniFolder, nArqHandle, cxMotivo, ccStat, cnProt, cPart_, aFat, oDanfe
MEMVAR cDhRecbto, cTag, cTagPai, nIni, nFimTagPai, aTotais, cDiscAdicional, nContador, aIcmsPart
MEMVAR P_, aDet, aPis, aTransp, aCofins, aIpi, lpOemTag, cTag_, aIcms, aTrib, nSoma, aCompra
MEMVAR aMedicamentos, aEmit, aDest, aIde, c_Tag, cPar_, nTamTag, cPar1_, nFim, cFile, aEntrega
MEMVAR cParte, Contador, nTotPro, cHtml, cPart, cStringCookie, cViewState, cViewStateGenerator
MEMVAR nFim3, cHiddenToken, nIni4, cHtml1, nFim4, Txt_File, cCodigo, ceEventValidation, cIndPag
MEMVAR nIni1, nFim1, nIni2, nFim2, nIni3, cHiddenSom, cUrl, oServer, nInie, nFime, cUrl2, aRastro
MEMVAR cMsgErro, c, aItensNota, cFCI, aMedLote, aPagamento, nCP
***************************************
Function IMPNFE()
***************************************
LOCAL oBitmap1, oGroup1, oLabel1, oChave_NFe, oIcon1, oTxt_captcha, oLabel2
LOCAL Button_1, Button_2, Button_3, oSayImg
Public cUrl := "https://www.nfe.fazenda.gov.br/portal/consultaResumoCompletaAntiga.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8%3D"
Public cUrl2:= 'https://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3D'
Public cCaptcha:=space(6), cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenToken, cCodigo, cViewStateGenerator
Public cHiddenSom, cChave:=space(44)
INIT DIALOG oDlg TITLE "Importar XML NF-e" ;
AT 708,198 SIZE 732,336 ;
STYLE DS_CENTER+DS_ABSALIGN ;
ON INIT {|| AtualizaImagem() }
Principal := oDlg
@ 9,1 BITMAP oBitmap1 ;
SHOW 'CABNFE' FROM RESOURCE ;
SIZE 715,130
@ 212,147 SAY oLabel1 CAPTION "Chave de Acesso da NF-e" OF oGroup1 SIZE 435,17 ;
FONT HFont():Add( '',0,-16,400,,,)
@ 213,169 GET oChave VAR cChave OF oGroup1 SIZE 495,28 ;
STYLE WS_BORDER PICTURE '99999999999999999999999999999999999999999999' MAXLENGTH 44 ;
FONT HFont():Add( '',0,-19,400,,,)
@ 213,213 GET oTxt_captcha VAR cCaptcha OF oGroup1 SIZE 83,28 ;
STYLE WS_BORDER MAXLENGTH 6 ;
FONT HFont():Add( '',0,-19,400,,,)
@ 303,216 SAY oLabel2 CAPTION "Digite o código da imagem ao lado" OF oGroup1 SIZE 326,22 ;
FONT HFont():Add( '',0,-16,400,,,)
@ 213,259 OWNERBUTTON Button_1 OF oGroup1 SIZE 99,26 ;
TEXT 'Baixar' ;
COORDINATES 0, 0, 0, 0 ;
FONT HFont():Add( '',0,-16,400,,,);
ON CLICK {|| IIF(Continuar(cCaptcha, cChave), oDlg:Close(), (cCaptcha:=space(6), Principal:oTxt_captcha:REFRESH(), principal:oTxt_captcha:SetFocus()) ) }
@ 323,259 OWNERBUTTON Button_2 OF oGroup1 SIZE 99,26 ;
TEXT 'Limpar' ;
COORDINATES 0, 0, 0, 0 ;
FONT HFont():Add( '',0,-16,400,,,);
ON CLICK {|| limpar( ) }
@ 606,259 OWNERBUTTON Button_3 OF oGroup1 SIZE 99,26 ;
TEXT 'Sair' ;
COORDINATES 0, 0, 0, 0 ;
FONT HFont():Add( '',0,-16,400,,,);
ON CLICK {|| oDlg:Close() }
@ 12, 171 IMAGE oSayImg SHOW Nil OF oGroup1 SIZE 180, 70
@ 9,129 GROUPBOX oGroup1 CAPTION "" SIZE 715,172 ;
FONT HFont():Add( '',0,-11,400,,,)
ACTIVATE DIALOG principal
RETURN cChave
****************************************
STATIC Function Limpar()
cChave:=space(44)
cCaptcha:=space(6)
Principal:oChave:REFRESH()
Principal:oTxt_captcha:REFRESH()
AtualizaImagem()
principal:oChave:SetFocus()
Return Nil
***************************************************
Function AtualizaImagem()
#require "hbfimage"
Try
oServer:= win_OleCreateObject("MSXML2.ServerXMLHTTP.6.0")
Catch
hwg_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( 100000 )
Catch
hwg_MsgInfo('Erro na Conexão com o Site')
Return .f.
End
c:= oServer:getResponseHeader("Set-Cookie")
cStringCookie:= Substr(c, 1, At(';', c) -1)
cHtml:= oServer:ResponseBody
// MemoWrit('siteA.txt', cHtml)
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)
hwg_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('" />', cHtml1) - 1
cFile:= SubStr(cHtml, nIni, nFim)
txt_file:=fcreate("captcha.png", 0)
If (!(ferror() = 0))
hwg_MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
Return .f.
EndIf
cCodigo:= SubStr(cHtml, nIni, nFim)
If Empty(cCodigo)
hwg_MsgInfo("Erro de criacao do arquivo de imagem")
Return .f.
EndIf
cFile:= hb_base64Decode(cFile, cCodigo)
FWrite(txt_file, cFile)
FClose(txt_file)
Principal:oSayImg:ReplaceImage( 'Captcha.png' )
Principal:oSayImg:Refresh()
principal:Button_1:Enabled()
Return .t.
***************************************************
Function Continuar(cCaptcha, Chave)
Local cParm, oServer
Public cChave:= Chave, aItensNota:= {}
If ! DigitoChave(cChave)
Return Nil
EndIf
cParm:= "__EVENTTARGET=" + ;
"&__EVENTARGUMENT=" + ;
"&__VIEWSTATE=" + Transfome(cviewState) + ;
"&__VIEWSTATEGENERATOR=" + Transfome(cViewStateGenerator) + ;
"&__EVENTVALIDATION=" + Transfome(cEeventValidation) + ;
"&ctl00%24txtPalavraChave=" + ;
"&ctl00%24ContentPlaceHolder1%24txtChaveAcessoCompleta=" + cChave + ;
"&ctl00%24ContentPlaceHolder1%24txtCaptcha=" + cCaptcha + ;
"&ctl00%24ContentPlaceHolder1%24btnConsultar=Continuar" + ;
"&ctl00%24ContentPlaceHolder1%24token=" + Transfome(cHiddenToken) + ;
"&ctl00%24ContentPlaceHolder1%24captchaSom=" + Transfome(cHiddenSom) + ;
"&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1"
Try
oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
Catch
hwg_MsgInfo('Erro na Criação do Serviço')
Return .f.
End
Try
oServer:Open( "POST", cUrl, .f. )
Catch
hwg_MsgInfo('Erro na Conexão com o Site ' + cUrl)
Return .f.
End
oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
oServer:SetRequestHeader( "Connection", "keep-alive" )
oServer:SetRequestHeader( "Cookie", cStringCookie)
Try
oServer:Send(cParm)
oServer:WaitForResponse( 500000 )
Catch
hwg_MsgInfo('Erro na Resposta com o Site ' + cUrl)
Return .f.
End
cHtml:= oServer:ResponseBody
MemoWrit('siteA.txt', cHtml) //Usado para testar sem Baixar
If At('<div id="ctl00_ContentPlaceHolder1_vdsErros" class="listaErro" style="display:none;">', cHtml) > 0
cPart:= Substr(cHtml, (At('<ul id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cHtml) + 80))
cPart:= Substr(cPart, 1, (At('</li><li>', cPart) - 1))
hwg_MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
Return .f.
EndIf
If At('<div class="divMensagemPaginaErro">', cHtml) > 0
cPart:= Substr(cHtml, (At('<span id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cHtml) + 53))
cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
hwg_MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
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)
nTotPro:= 0
c_span:= cFile
While .t.
nIni := At('fixo-prod-serv-numero"><span>', c_span)
If nIni > 0
c_span:= SubStr(c_span, nIni + 29)
nFim := At('</span>', c_span) - 1
AADD(aItensNota, Val(SubStr(c_span, 1, nFim)))
nTotPro ++
Else
Exit
EndIf
End
If nTotPro > 0
If TratamentoDados()
GravaXML()
Else
hwg_MsgInfo('Erro no Tratamento do Dados')
Return .f.
EndIf
Else
hwg_MsgInfo('Erro no Tratamento do Dados')
Return .f.
Endif
Else
hwg_MsgInfo('Erro ao ler retorno da Consulta')
Return .f.
EndIf
Return .t.
*****************************************
Static Function Teste(chave)// Função para testar geração do xml sem ter que baixar
Public cChave:= Chave, aItensNota:= {}
cHtml:= MemoRead('siteA.txt')
If At('id="ctl00_ContentPlaceHolder1_pnlErro" class="painel_erro_sistema">', cHtml) > 0
cPart:= Substr(cHtml, (At('<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 58))
cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
hwg_MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
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)
nTotPro:= 0
c_span:= cFile
While .t.
nIni := At('fixo-prod-serv-numero"><span>', c_span)
If nIni > 0
c_span:= SubStr(c_span, nIni + 29)
nFim := At('</span>', c_span) - 1
AADD(aItensNota, Val(SubStr(c_span, 1, nFim)))
nTotPro ++
Else
Exit
EndIf
End
If TratamentoDados()
GravaXML()
Else
hwg_MsgInfo('Erro no Tratamento do Dados')
Return .f.
EndIf
Else
hwg_MsgInfo('Erro ao ler retorno da Consulta')
Return .f.
EndIf
Return .t.
***************************************
Function TratamentoDados()
Public aIde:={}, aEmit:={}, aDest:={}, aDet:={}, aICMS:={}, aIPI:={}, aPIS:={}, aCOFINS:={}, aTotais:={}, aTransp:={}, aCobr:={}
Public aMedicamentos:= {}, aTrib:= {}, aFat:={}, aCompra:= {}, aEntrega:= {}, aIcmsPart:= {}, aMedLote:={}, aPagamento:= {}
Public aRastro:= {}
* 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-
{"","cPais","",0,"País",4},; //13- tratamento especial
{"","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-
AADD(aEntrega,{{"","CNPJ","entrega",7,"CNPJ",0},; //1-
{"","xLgr","",15,"Logradouro",0},; //2- tratamento especial
{"","nro","",0,"Logradouro",0},; //3- tratamento especial
{"","xBairro","",0,"Bairro",0},; //4-
{"","cMun","",0,"Município",7},; //5-
{"","xMun","",0,"Município",-10},; //6-
{"","UF","",0,"UF",0}}) //7-
* 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","vICMSUFDest", "Valor Total ICMS Interestadual UF Destino"},;
{"0.00","vICMSUFRemet", "Valor Total ICMS Interestadual UF Rem."},;
{"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-
{"0.00","vTotTrib","Valor Aproximado dos Tributos"}}) //17-
* 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,"Numeração",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-
AADD(aFat, {{"","nFat"},; //1-
{"","vOrig"},; //2-
{"","vDesc"},; //3-
{"","vLiq"}}) //4-
AADD(aPagamento, {{"","tPag" ,"Tipo de Integração Pagamento",2},; //2- {"","indPag","Forma de Pagamento",1},; //1-
{"","vPag" ,"Valor do Pagamento",0},; //3-
{"","CNPJ" ,"CNPJ da Credenciadora",0},; //4-
{"","tBand" ,"Bandeira da operadora",0},; //5-
{"","cAut" ,"Número de autorização",0},; //6-
{"","vTroco","Troco",0}}) //7-
// Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
// Produtos e Serviços da NF-e
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-
{"","indEscala","Indicador de Escala Relevante",0},; //6-
{"","CNPJFab" ,"CNPJ do Fabricante da Mercadoria",0},; //6-
{"","cBenef" ,"Código de Benefício Fiscal",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-
{"","xPed" ,"Número do pedido de compra",0},; //23-
{"","infAdProd",'Descrição', 0},; //24-
{"","nFCI" ,'Número da FCI', 0}}) //25-
AADD(aTrib, {{"","vTotTrib","Valor Aproximado dos Tributos",0}}) //1-
AADD(aCompra, {{"","xNEm","Nota de Empenho",0},; //1-
{"","xPed","Pedido",0},; //2-
{"","xCont","Contrato",0}}) //3-
AADD(aRastro, {{"","nLote" , 'Número do Lote do produto', 0},; //1-
{"","qLote" , 'Quantidade de produto no Lote', 0},; //2-
{"","dFab" , 'Data de fabricação/ Produção', 0},; //3-
{"","dVal" , 'Data de validade', 0},; //4-
{"","cAgreg", 'Código de Agregação', 0}}) //5-
AADD(aMedicamentos, {{"","cProdANVISA" ,'Código de Produto da ANVISA', 0},; //1-
{"","xMotivoIsencao",'Motivo da isenção da ANVISA', 0},; //2-
{"","vPMC" ,'Preço Máximo Consumidor', 0}}) //3-
AADD(aMedLote, {{"","nLote",'Nro. do Lote', 0},; //1-
{"","qLote",'Quantidade de produtos no lote', 0},; //2-
{"","dFab",'Data de fabricação', 0},; //3-
{"","dVal",'Data de validade', 0},; //4-
{"","vPMC",'Preço Máximo Consumido', 0},; //5-
{"","infAdProd",'Descrição', 0},; //6-
{"","Controle",'', 0}}) //7-
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",1},; //4-
{"","pRedBC","Percentual Redução",0},; //5-
{"","vBC","Base de Cálculo",0},; //6-
{"","pICMS","Alíquota do ICMS",0},; //7-
{"","vICMS","Valor do ICMS<",0},; //8-
{"","vICMSDeson","Valor ICMS desoneração",0},; //9-
{"","motDesICMS","Motivo da desoneração do ICMS",1},; //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 de 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-
AADD(aIcmsPart,{{"0.00", "vBCUFDest" , "Valor BC ICMS na UF Destino"} ,; //1-
{"0.00", "pFCPUFDest" , "Percentual ICMS FCP na UF Destino"} ,; //2-
{"0.00", "pICMSUFDest" , "Alíquota Interna UF Destino"} ,; //3-
{"0.00", "pICMSInter" , "Alíquota Interestadual das UFs"} ,; //4-
{"0.00", "pICMSInterPart", "Percentual Provisório de Partilha"} ,; //5-
{"0.00", "vFCPUFDest" , "Valor do ICMS FCP"} ,; //6-
{"0.00", "vICMSUFDest" , "Valor ICMS Interestadual UF Destino"} ,; //7-
{"0.00", "vICMSUFRemet" , "Valor ICMS Interestadual UF Remetente"}}) //8-
Next p_
nIni := At('<div class="GeralXslt"', cFile)
cParte:= SubStr(cFile, nIni)
nIni := At('<div id="Emitente"', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //ide
GeraBlocoIde(cParte)
nIni := At('<div id="Emitente"', cFile)
cParte:= SubStr(cFile, nIni)
nIni := At('</div>', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //emit
GeraBlocoEmit(cParte)
nIni := At('<div id="DestRem"', cFile)
cParte:= SubStr(cFile, nIni)
nIni := At('</div>', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //dest
GeraBlocoDest(cParte)
nIni := At('Local de Entrega', cFile)
cParte:= SubStr(cFile, nIni)
nIni := At('</div>', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //Local de Entrega
GeraBlocoEntrega(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
GeraBlocoDet(cParte)
nIni := At('ICMS para a UF de destino', cFile)
cParte:= SubStr(cFile, nIni)
nIni := At('</tr></table></fieldset>', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //icms Partilha
GeraBlocoIcmsPart(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
GeraBlocoTotais(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
GeraBlocoTransp(cParte)
nIni := At('Informações de Compra</legend>', cFile)
cParte:= SubStr(cFile, nIni + 30)
nIni := At('<legend>Informações Complementares de Interesse do Contribuinte', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //compra
GeraBlocoCompra(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
GeraBlocoCobr(cParte)
EndIf
nIni := At('<legend>Fatura</legend><table', cFile)
If nIni > 0
cParte:= SubStr(cFile, nIni)
nIni := At('</table>', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //fatura
GeraBlocoFat(cParte)
EndIf
nIni := At('<legend class="titulo-aba">Formas de Pagamento</legend>', cFile)
If nIni > 0
cParte:= SubStr(cFile, nIni)
nIni := At('<div id="aba_nft_7" class="nft">', cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //Pagamento
GeraBlocoPagamento( cParte )
EndIf
Return .t.
****************************************
FUNCTION GeraBlocoIde( cParte )
Public cVersao:="", ctpAmb:="", cverAplic:="", cdhRecbto:="", cnProt:="", cdigVal:="", ccStat:="", cxMotivo:=""
Public cinfCpl:="", cinfAdFisco:="", cDiscAdicional:="", cFCI:= '', cIndPag:= ''
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
nIni := At( '<legend class="titulo-aba-interna">Informações Adicionais de Interesse do Fisco</legend>', cPar_ )
IF nIni > 0
c_span := SubStr( cPar_, nIni + 88 )
nIni := At( '<label>Descrição</label><span>', c_span )
c_span := SubStr( c_span, nIni + 30 )
nIni := At( '</span>', c_span )
cInfAdFisco:= 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 HB_AtI( '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 )
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
IF i == 21
cverAplic := c_tag
ElseIf i == 4
cIndPag:= c_tag
ENDIF
NEXT i
RETURN NIL
***************************************
FUNCTION GeraBlocoEmit( cParte )
cPar_ := StrTran( cParte, Chr( 13 ), "" )
cPar_ := StrTran( cParte, Chr( 10 ), "" )
cPar_ := StrTran( cPar_, Chr( 160 ), " " )
FOR i := 1 TO Len( aEmit[ 1 ] )
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 nIni == 0
nIni:= At( ",", c_tag )
ENDIF
IF i == 5
c_tag:= Left( c_tag, nIni - 1 ) // xlg
ELSEIF i == 6
c_tag:= AllTrim( SubStr( c_tag, nIni + 2 ) )
nIni:= At( " ", c_tag )
IF nIni > 0
c_tag:= Left( c_tag, nIni - 1 ) // nro
ENDIF
ELSE
c_tag:= AllTrim( SubStr( c_tag, nIni + 2 ) )
nIni := At( " ", c_tag )
IF nIni > 0
c_tag:= AllTrim( SubStr( c_tag, nIni + 1 ) ) // xcpl
ELSE
c_tag:= ""
ENDIF
ENDIF
ENDIF
IF i == 12
c_tag := StrTran( c_tag, "-", "" )
ENDIF
IF i == 13
c_tag := '1058'
ENDIF
IF i == 14
c_tag := 'Brasil'
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 i
RETURN NIL
***************************************
FUNCTION GeraBlocoDest( cParte )
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 nIni == 0
nIni := At( ",", c_tag )
ENDIF
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 + 2 ) )
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 i
RETURN NIL
***************************************
FUNCTION GeraBlocoEntrega( cParte )
FOR i := 1 TO Len( aEntrega[ 1 ] )
cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
cPar_ := StrTran( cPar_, Chr( 160 ), "" )
nIni := At( aEntrega[ 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
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, "/", "" )
c_tag := StrTran( c_tag, "-", "" )
ENDIF
IF i >= 2 .AND. i <= 3
nIni := At( ",,", c_tag )
IF nIni == 0
nIni := At( ",", c_tag )
ENDIF
IF i == 2
c_tag := Left( c_tag, nIni - 1 )
ELSEIF i == 3
c_tag := AllTrim( SubStr( c_tag, nIni + 1 ) )
nIni := At( " ", c_tag )
IF nIni > 0
c_tag := Left( c_tag, nIni - 1 )
ENDIF
ENDIF
ENDIF
IF aEntrega[ 1, i, 6 ] != 0
IF aEntrega[ 1, i, 6 ] > 0
c_tag := Left( c_tag, aEntrega[ 1, i, 6 ] )
ELSE
c_tag := AllTrim( SubStr( c_tag, Abs( aEntrega[ 1, i, 6 ] ) + 1 ) )
c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
ENDIF
ENDIF
aEntrega[ 1, i, 1 ] := c_tag
ENDIF
NEXT i
RETURN NIL
***************************************
FUNCTION GeraBlocoDet( cParte )
Local nMed, nN:= 1, nCP:= 1
cPar_ := StrTran(cParte, Chr(10) , "" )
cPar_ := StrTran(cPar_ , Chr(160), " " )
cPar_ := StrTran(cPar_ , Chr(13) , "")
cParT_:= StrTran(cPar_ , Chr(9) , "")
nIni := At( '<td class="fixo-prod-serv-numero"><span>1', cParT_ )
nfim := At( '<td class="fixo-prod-serv-numero"><span>2', cParT_ ) - nIni
IF nFim <= 0
cPar_ := SubStr( cParT_, nIni )
ELSE
cPar_ := SubStr( cParT_, nIni, nFim )
ENDIF
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 .AND. i != 1 .And. i != 24
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
ENDIF
aDet[ p_, i, 1 ] := c_tag
ENDIF
NEXT i
//Tag Valor dos tributos pagos
FOR i := 1 TO Len( aTrib[ p_ ] )
nIni := At( aTrib[ 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 aTrib[ p_, i, 4 ] != 0
IF aTrib[ p_, i, 4 ] > 0
c_tag := Left( c_tag, aTrib[ p_, i, 4 ] )
ELSE
c_tag := AllTrim( SubStr( c_tag, Abs( aTrib[ p_, i, 4 ] ) + 1 ) )
c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
ENDIF
ENDIF
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aTrib[ p_, i, 1 ] := c_tag
ENDIF
NEXT i
//Tags do Icms
nIni := At( '<fieldset><legend>ICMS Normal e ST</legend>', cPar_ )
IF nIni > 0
cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">PIS</legend>', cPar_ ) -nIni )
FOR i := 1 TO Len( aICMS[ p_ ] )
nIni := HB_At( aICMS[ 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 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
Else
If i == 4
nIni := At( 'Modalidade Definição da', cPar1_ )
If nIni > 0
c_span := SubStr( cPar1_, nIni )
nIni := At( '<span>', c_span ) + 6
nTamTag:= At( '</span>', c_span ) - nIni
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
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
If i == 7
nIni := At( 'Alíquota', 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 ) )
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
If i == 8
nIni := At( 'Valor do ICMS Normal', cPar1_ )
If nIni == 0
nIni := At( 'Valor<', cPar1_ )
EndIf
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 ) )
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
If i == 11
nIni := At( 'Modalidade definição da BC ICMS ST', cPar1_ )
If nIni > 0
c_span := SubStr( cPar1_, nIni )
nIni := At( '<span>', c_span ) + 6
nTamTag:= At( '</span>', c_span ) - nIni
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
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
If i == 14
nIni := At( 'Base de Cálculo do ICMS ST', 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 ) )
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
If i == 15
nIni := At( 'Alíquota do ICMS ST', cPar1_ )
If nIni == 0
nIni := At( 'Alíquota', cPar1_ )
EndIf
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 ) )
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
If i == 16
nIni := At( 'Valor', 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 ) )
aICMS[ p_, i, 1 ] := c_tag
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aICMS[ p_, i, 1 ] := c_tag
EndIf
EndIf
EndIf
NEXT i
ENDIF
//Tags do Ipi
nIni := At( '<legend>Imposto Sobre Produtos Industrializados</legend>', cPar_ )
IF nIni > 0
cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">PIS</legend>', cPar_ ) -nIni )
FOR i := 1 TO Len( aIPI[ p_ ] )
nIni := At( aIPI[ 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 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 i
ENDIF
//Tags Pis
nIni := At( '<legend class="toggle">PIS</legend>', cPar_ )
IF nIni > 0
cPar1_ := SubStr( cPar_, nIni, At( '<legend class="toggle">COFINS</legend>', cPar_ ) - nIni )
FOR i := 1 TO Len( aPIS[ p_ ] )
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 i
ENDIF
//Tags Cofins
nIni:= At( '<legend class="toggle">COFINS</legend>', cPar_ )
IF nIni > 0
cPar1_ := SubStr( cPar_, nIni )
FOR i := 1 TO Len( aCOFINS[ p_ ] )
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 i
ENDIF
//Tags Medicamentos
nIni:= At( '<legend>Rastro</legend>', cPar_ )
IF nIni > 0
cPar1_ := SubStr( cPar_, nIni )
FOR i := 1 TO Len( aRastro[ p_ ] )
nIni:= At( aRastro[ 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 aRastro[ p_, i, 4 ] != 0
IF aRastro[ p_, i, 4 ] > 0
c_tag:= Left( c_tag, aRastro[ p_, i, 4 ] )
ELSE
c_tag:= AllTrim( SubStr( c_tag, Abs( aRastro[ 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
aRastro[ p_, i, 1 ] := c_tag
ENDIF
NEXT i
ENDIF
If cVersao == '3.10'
nIni:= At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
IF nIni > 0
cPar1_:= SubStr( cPar_, nIni )
nMed := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
cPar1_:= SubStr( cPar1_, nMed )
While .t.
If nMed > 0
FOR i := 1 TO Len( aMedLote[ p_ ] )
If i == 7
aMedLote[ nCP, i, 1 ] := p_
Else
nIni := At( aMedLote[ 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 aMedLote[ p_, i, 4 ] != 0
IF aMedLote[ p_, i, 4 ] > 0
c_tag := Left( c_tag, aMedlote[ p_, i, 4 ] )
ELSE
c_tag := AllTrim( SubStr( c_tag, Abs( aMedLote[ 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
IF StrZero( i, 2 ) $ "-03-04"
c_tag := SubStr( c_tag, 7, 4 ) + "-" + SubStr( c_tag, 4, 2 ) + "-" + Left( c_tag, 2 )
ENDIF
aMedLote[ nCP, i, 1 ] := c_tag
EndIf
EndIf
NEXT i
nN++
nMed := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
cPar1_:= SubStr( cPar1_, nMed )
If nMed > 0
aadd(aMedLote, {{"","nLote",'Nro. do Lote', 0},; //1-
{"","qLote",'Quantidade de produtos no lote', 0},; //2-
{"","dFab",'Data de fabricação', 0},; //3-
{"","dVal",'Data de validade', 0},; //4-
{"","vPMC",'Preço Máximo Consumido', 0},; //5-
{"","infAdProd",'Descrição', 0},; //6-
{"","Controle",'', 0}})
EndIf
nCP++
Else
Exit
EndIf
End
nN:= 1
ENDIF
Else
nIni:= At( '<legend>Detalhamento específico dos medicamentos</legend>', cPar_ )
IF nIni > 0
cPar1_:= SubStr( cPar_, nIni )
nMed := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
cPar1_:= SubStr( cPar1_, nMed )
While .t.
If nMed > 0
FOR i := 1 TO Len( aMedicamentos[ p_ ] )
nIni := At( aMedicamentos[ 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 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 != 3
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
ENDIF
aMedicamentos[ p_, i, 1 ] := c_tag
ENDIF
NEXT i
nMed := At( 'Medicamento ' + AllTrim(Str(nN)), cPar1_ )
cPar1_:= SubStr( cPar1_, nMed )
nN++
Else
Exit
EndIf
End
nN:= 1
ENDIF
EndIf
If p_ < Len( aDet )
nIni:= At('<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( aItensNota[p_+1] ) ), cParT_ )
Else
nIni:= At('<td class="fixo-prod-serv-numero"><span>' + AllTrim( Str( aItensNota[p_] ) ), cParT_ )
EndIf
cParT_:= SubStr(cParT_, (nIni + 40))
nFim := At('<td class="fixo-prod-serv-numero"><span>', cParT_ )
IF nFim <= 0
cPar_:= SubStr( cParT_, 1 )
ELSE
cPar_:= SubStr( cParT_, 1, nFim )
ENDIF
NEXT p_
RETURN NIL
***************************************
FUNCTION GeraBlocoIcmsPart( cParte )
FOR i := 1 TO Len( aIcmsPart[ 1 ] )
cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
cPar_ := StrTran( cPar_, Chr( 160 ), "" )
nIni := At( aIcmsPart[ 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, ",", "." )
aIcmsPart[ 1, i, 1 ] := c_tag
ENDIF
NEXT i
RETURN NIL
***************************************
FUNCTION GeraBlocoTotais( cParte )
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 i
RETURN NIL
***************************************
FUNCTION GeraBlocoTransp( cParte )
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
IF i == 12 .Or. i == 16 .Or. i == 17
If Empty(c_tag)
c_Tag:= '0,000'
EndIf
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
ENDIF
aTransp[ 1, i, 1 ] := c_tag
ENDIF
NEXT i
RETURN NIL
***************************************
FUNCTION GeraBlocoCobr( cParte )
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 i
RETURN NIL
***************************************
FUNCTION GeraBlocoFat( cParte )
cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
cPar_ := StrTran( cPar_, Chr( 160 ), "" )
FOR i := 1 TO Len( aFat[ 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, ",", "." )
aFat[ 1, i, 1 ] := c_tag
ELSE
EXIT
ENDIF
NEXT i
RETURN NIL
***************************************
FUNCTION GeraBlocoPagamento( cParte )
cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
cPar_ := StrTran( cPar_, Chr( 160 ), "" )
FOR i := 1 TO Len( aPagamento[ 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 ) )
IF aPagamento[ 1, i, 4 ] != 0
IF aPagamento[ 1, i, 4 ] > 0
c_tag := Left( c_tag, aPagamento[ 1, i, 4 ] )
ELSE
c_tag := AllTrim( SubStr( c_tag, Abs( aPagamento[ 1, i, 4 ] ) + 1 ) )
c_tag := AllTrim( StrTran( c_tag, "-", "" ) )
ENDIF
ENDIF
c_tag := StrTran( c_tag, ".", "" )
c_tag := StrTran( c_tag, ",", "." )
aPagamento[ 1, i, 1 ] := c_tag
ELSE
EXIT
ENDIF
NEXT i
RETURN NIL
***************************************
FUNCTION GeraBlocoCompra( cParte )
cPar_ := StrTran( cParte, Chr( 13 ) + Chr( 10 ), "" )
cPar_ := StrTran( cPar_, Chr( 160 ), "" )
FOR i := 1 TO Len( aCompra[ 1 ] )
nIni := At( aCompra[ 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 ) )
aCompra[ 1, i, 1 ] := c_tag
ELSE
EXIT
ENDIF
NEXT i
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+'">'
Local lTagFim := .f., a, x
cTagPai := ""
nFimTagPai:= 0
For i:= 1 To Len(aIde[1])
If ! Empty(aIde[1,i,3])
nFimTagPai:=aIde[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aIde[1,i,3]
cXML+='<'+aIde[1,i,3]+'>'
EndIf
If ! Empty(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 i
For i:= 1 To Len(aEmit[1])
If ! Empty(aEmit[1,i,3])
nFimTagPai:= aEmit[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aEmit[1,i,3]
cXML +='<'+aEmit[1,i,3]+'>'
EndIf
If !Empty(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 i
For i:= 1 To Len(aDest[1])
If !Empty(aDest[1,i,3])
nFimTagPai:=aDest[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aDest[1,i,3]
cXML+='<'+aDest[1,i,3]+'>'
EndIf
If !Empty(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 i
For i:= 1 To Len(aEntrega[1])
If ! Empty(aEntrega[1,i,1])
nFimTagPai:= aEntrega[1,i,4]
cTagPai+="|"+StrZero(nFimTagPai,2)+aEntrega[1,i,3]
cXML +='<'+aEntrega[1,i,3]+'>'
EndIf
If !Empty(aEntrega[1,i,1])
cXML+= '<'+aEntrega[1,i,2]+'>'+aEntrega[1,i,1]+'</'+aEntrega[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 i
For p_:= 1 To Len(aDet)
cXML+= '<det nItem="'+AllTrim(Str(aItensNota[p_]))+'"><prod>'
cFCI:= cDiscAdicional:= ''
For i:= 1 To Len(aDet[p_])
If ! Empty(aDet[p_, i, 1])
If i == 24
cDiscAdicional:= '<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
Else
cXML+= '<'+aDet[p_,i,2]+'>'+aDet[p_,i,1]+'</'+aDet[p_,i,2]+'>'
EndIf
Else
If i == 2 .Or. i == 13
cXML+= '<' + aDet[p_, i, 2] + '/>'
EndIf
EndIf
Next
lpoemTag:= .F.
For i:= 1 To Len(aRastro[p_])
If i == 1
If ! Empty(aRastro[p_,i,1])
cXML+= '<rastro><' + aRastro[p_,i,2] + '>' + aRastro[p_,i,1] + '</' + aRastro[p_,i,2] + '>'
lpoemTag:=.T.
EndIf
Else
If ! Empty(aRastro[p_,i,1])
cXML+='<'+aRastro[p_,i,2]+'>'+ aRastro[p_,i,1] + '</'+aRastro[p_,i,2]+'>'
EndIf
EndIf
Next
If lpoemTag
cXML+='</rastro>'
EndIf
lpoemTag:= .f.
For i:= 1 To Len(aMedicamentos[p_])
If i == 1
If ! Empty(aMedicamentos[p_,i,1])
cXML+= '<med><' + aMedicamentos[p_,i,2] + '>' + aMedicamentos[p_, i, 1] + '</' + aMedicamentos[p_,i,2] + '>'
lpoemTag:=.T.
EndIf
Else
If ! Empty(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
If cVersao == '3.10'
For a:= 1 To Len(aMedLote)
// msginfo(aMedLote[ a, 7, 1 ])
If aMedLote[ a, 7, 1 ] == p_
For x:= 1 To 6
If x == 1
cXML+= '<med><nLote>' + aMedLote[a, x, 1] + '</nLote>'
Else
cXML+='<'+aMedLote[a,x,2]+'>'+ aMedLote[a,x,1] + '</'+aMedLote[a,x,2]+'>'
EndIf
next x
cXML+='</med>'
EndIf
Next a
EndIf
cXML+= '</prod><imposto>'
For i:= 1 To Len(aTrib[p_])
If Val(aTrib[p_,i,1]) > 0
cXML+='<'+aTrib[p_,i,2]+'>'+ aTrib[p_,i,1] + '</'+aTrib[p_,i,2]+'>'
EndIf
Next i
cXML+= '<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"
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
IF aICMS[ p_, i, 4 ] != 0
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
Else
If Val(aICMS[p_, i, 1]) > 0
cXml+= '<' + aICMS[p_, i, 2] + '>' + aICMS[p_, i, 1] + '</' + aICMS[p_, i, 2] + '>'
EndIf
EndIf
EndIf
EndIf
Next i
cXML+='</'+cTag_+'></ICMS>'
lpoemTag:= .F.
For i:= 1 To Len(aIPI[p_])
If i == 1
If ! Empty(aIPI[p_,i,1])
If aIPI[p_,2,1] == '00' .Or. aIPI[p_,2,1] == '49' .Or. aIPI[p_,2,1] == '50' .Or. aIPI[p_,2,1] == '99'
cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPITrib>'
Else
cXML+= '<IPI><cEnq>' + aIPI[p_,i,1] + '</cEnq><IPINT>'
EndIf
lpoemTag:=.T.
EndIf
Else
If ! Empty(aIPI[p_,i,1])
cXML+='<'+aIPI[p_,i,2]+'>'+ aIPI[p_,i,1] + '</'+aIPI[p_,i,2]+'>'
EndIf
EndIf
Next
If lpoemTag
If aIPI[p_,2,1] == '00' .Or. aIPI[p_,2,1] == '49' .Or. aIPI[p_,2,1] == '50' .Or. aIPI[p_,2,1] == '99'
cXML+='</IPITrib></IPI>'
Else
cXML+='</IPINT></IPI>'
EndIf
EndIf
lpoemTag:= .F.
For i:= 1 To Len(aPIS[p_])
If i == 1
If ! Empty(aPIS[p_, i, 1])
If Val(aPIS[p_, i, 1]) >= 1 .And. Val(aPIS[p_, i, 1]) <= 2
cXML+= '<PIS><PISAliq>'
ElseIf Val(aPIS[p_, i, 1]) == 3
cXML+= '<PIS><PISQte>'
ElseIf Val(aPIS[p_, i, 1]) >= 4 .And. Val(aPIS[p_, i, 1]) <= 9
cXML+= '<PIS><PISNT>'
ElseIf Val(aPIS[p_, i, 1]) >= 49 .And. Val(aPIS[p_, i, 1]) <= 99
cXML+= '<PIS><PISOutr>'
EndIf
lpoemTag:= .T.
EndIf
EndIf
If ! Empty(aPIS[p_, i, 1])
If Val(aPIS[p_, 1, 1]) == 1 .Or. Val(aPIS[p_, 1, 1]) == 2
If StrZero(i, 1) $ "-01-02-03-04"
cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
EndIf
ElseIf Val(aPIS[p_, 1, 1]) == 3
If StrZero(i, 1) $ "-01-04-06-05"
cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
EndIf
ElseIf Val(aPIS[p_, 1, 1]) >= 4 .And. Val(aPIS[p_, 1, 1]) <= 9
If StrZero(i, 1) $ "-01"
cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
EndIf
ElseIf Val(aPIS[p_, 1, 1]) >= 9 .And. Val(aPIS[p_, 1, 1]) <= 99
If StrZero(i, 1) $ "-01-02-03-04-05-06"
cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
EndIf
Else
If StrZero(i, 1) $ "-02-03-04-05-06"
cXML+= '<' + aPIS[p_,i,2] + '>' + aPIS[p_,i,1] + '</' + aPIS[p_,i,2] + '>'
EndIf
EndIf
EndIf
Next i
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 !Empty(aCOFINS[p_,i,1])
If Val(aCOFINS[p_, 1, 1]) >= 1 .And. Val(aCOFINS[p_, 1, 1]) <= 2
cXML+= '<COFINS><COFINSAliq>'
ElseIf Val(aCOFINS[p_, 1, 1]) == 3
cXML+= '<COFINS><COFINSQte>'
ElseIf Val(aCOFINS[p_, 1, 1]) >= 4 .And. Val(aCOFINS[p_, 1, 1]) <= 9
cXML+= '<COFINS><COFINSNT>'
ElseIf Val(aCOFINS[p_, 1, 1]) >= 49 .And. Val(aCOFINS[p_, 1, 1]) <= 99
cXML+= '<COFINS><COFINSOutr>'
EndIf
lpoemTag:=.T.
EndIf
EndIf
If !Empty(aCOFINS[p_, i, 1])
If Val(aCOFINS[p_, 1, 1]) == 1 .Or. Val(aCOFINS[p_, 1, 1]) == 2
If StrZero(i, 1) $ "-01-02-03-04"
cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
EndIf
ElseIf Val(aCOFINS[p_, 1, 1]) == 3
If StrZero(i, 1) $ "-01-04-06-05"
cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
EndIf
ElseIf Val(aCOFINS[p_, 1, 1]) >= 4 .And. Val(aCOFINS[p_, 1, 1]) <= 9
If StrZero(i, 1) $ "-01"
cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
EndIf
ElseIf Val(aCOFINS[p_, 1, 1]) >= 9 .And. Val(aCOFINS[p_, 1, 1]) <= 99
If StrZero(i, 1) $ "-01-02-03-04-05-06"
cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
EndIf
Else
If StrZero(i, 1) $ "-02-03-04-05-06"
cXML+= '<' + aCOFINS[p_, i, 2] + '>' + aCOFINS[p_, i, 1] + '</' + aCOFINS[p_, i, 2] + '>'
EndIf
EndIf
EndIf
Next i
If lpoemTag
If Val(aCOFINS[p_, 1, 1]) >= 1 .And. Val(aCOFINS[p_, 1, 1]) <= 2
cXML+= '</COFINSAliq></COFINS>'
ElseIf Val(aCOFINS[p_, 1, 1]) == 3
cXML+= '</COFINSQte></COFINS>'
ElseIf Val(aCOFINS[p_, 1, 1]) >= 4 .And. Val(aCOFINS[p_, 1, 1]) <= 9
cXML+= '</COFINSNT></COFINS>'
ElseIf Val(aCOFINS[p_, 1, 1]) >= 49 .And. Val(aCOFINS[p_, 1, 1]) <= 99
cXML+= '</COFINSOutr></COFINS>'
EndIf
EndIf
If Val(aIcmsPart[1,1,1]) > 0
cXML+='<ICMSUFDest>'
For i:= 1 To Len(aIcmsPart[1])
If !Empty(aIcmsPart[1,i,1])
cXML+= '<'+aIcmsPart[1,i,2]+'>'+aIcmsPart[1,i,1]+'</'+aIcmsPart[1,i,2]+'>'
EndIf
Next i
cXML+= '</ICMSUFDest>'
EndIf
cXML+= '</imposto>'
If ! Empty(cDiscAdicional)
cXml+= cDiscAdicional
EndIf
cXML+= '</det>'
Next
cXML+='<total><ICMSTot>'
For i:= 1 To Len(aTotais[1])
If !Empty(aTotais[1,i,1])
cXML+= '<'+aTotais[1,i,2]+'>'+aTotais[1,i,1]+'</'+aTotais[1,i,2]+'>'
EndIf
Next i
cXML+= '</ICMSTot></total>'
For i:= 1 To Len(aTransp[1])
If !Empty(aTransp[1,i,3])
If !Empty(aTransp[1,i,1])
nFimTagPai:= aTransp[1,i,4]
cTagPai+= "|"+StrZero(nFimTagPai,2) + aTransp[1,i,3]
cXML+= '<' + aTransp[1,i,3] + '>'
lpoemTag:= .t.
lTagFim := .t.
Else
lpoemTag:= .f.
EndIf
EndIf
If ! Empty(aTransp[1,i,1])
cXML+= '<'+aTransp[1,i,2]+'>'+aTransp[1,i,1]+'</'+aTransp[1,i,2]+'>'
EndIf
If i == nFimTagPai .And. lpoemTag
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 i
If lTagFim
cXML+= '</transp>'
EndIf
lpoemTag:= .f.
If ! Empty(aFat[1,1,1])
cXML+= '<cobr>'
For i:= 1 To Len(aFat[1])
If ! Empty(aFat[1,i,1])
If StrZero(i,2) $ "-01-05-09-13-17-21-25-29"
If i > 2
cXML+= '</fat>'
EndIf
cXML+= '<fat>'
EndIf
cXML+= '<'+aFat[1,i,2]+'>'+aFat[1,i,1]+'</'+aFat[1,i,2]+'>'
EndIf
Next
cXML+= '</fat>'
lpoemTag:= .t.
EndIf
If ! Empty(aCobr[1,1,1])
If ! lpoemTag
cXML+= '<cobr>'
EndIf
For i:= 1 To Len(aCobr[1])
If ! Empty(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]+'>'
lpoemTag:= .t.
EndIf
Next
cXML+= '</dup>'
EndIf
If lpoemTag
cXML+= '</cobr>'
EndIf
lpoemTag:= .f.
If ! Empty(aPagamento[1,1,1])
cXML+= '<pag>'
For i:= 1 To Len(aPagamento[1])
If ! Empty(aPagamento[1,i,1])
If i == 1
cXML+= '<detPag>'
If ! Empty(cIndPag)
cXML+= '<indPag>' + cIndPag + '</indPag>'
EndIf
EndIf
cXML+= '<'+aPagamento[1,i,2]+'>'+aPagamento[1,i,1]+'</'+aPagamento[1,i,2]+'>'
lpoemTag:= .t.
EndIf
Next i
cXML+= '</detPag>'
EndIf
If lpoemTag
cXML+= '</pag>'
EndIf
If ! Empty(cinfCpl) .or. ! Empty(cinfAdFisco)
cXML+= '<infAdic>'
If ! Empty(cinfAdFisco)
cXML+= '<infAdFisco>' + cinfAdFisco + '</infAdFisco>'
EndIf
If ! Empty(cinfCpl)
cXML+= '<infCpl>' + cinfCpl + '</infCpl>'
EndIf
cXML+= '</infAdic>'
EndIf
If ! Empty(aCompra[1, 1, 1])
cXML+= '<compra>'
For i:= 1 To Len(aCompra[1])
If ! Empty(aCompra[1,i,1])
cXML+= '<'+aCompra[1,i,2]+'>'+aCompra[1,i,1]+'</'+aCompra[1,i,2]+'>'
Endif
Next i
cXML+= '</compra>'
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>N6srMqFYv/CIChjx+BEqcBf8qrh0KR1bn2uKBe6h51SaZw+SN3oUVKww/GmWi7iMgKkYMKgVz9QzT0Ooviw8a6WFENTHbABxMfg3UhJeFrvM+4Z75M5WTXEH6TuEi+BYodv44zNCn0utIkdGngvIEmB86KFJRnDCm+u1hrYHcNA=</SignatureValue>'
cXML+= '<KeyInfo><X509Data><X509Certificate>MIICOTCCAaKgAwIBAgIQJpLn3fwH17RNXJHw5VenaDANBgkqhkiG9w0BAQUFADBbMVkwVwYDVQQDHlAAdwB3AHcALgBmAHMAaQBzAHQALgBjAG8AbQAuAGIAcgAgACgAUwBFAE0AIABWAEEATABJAEQAQQBEAEUAIABKAFUAUgDNAEQASQBDAEEAKTAeFw0xNTEyMjQwODI1MjVaFw0xODEyMjQwODI1MjVaMFsxWTBXBgNVBAMeUAB3AHcAdwAuAGYAcwBpAHMAdAAuAGMAbwBtAC4AYgByACAAKABTAEUATQAgAFYAQQBMAEkARABBAEQARQAgAEoAVQBSAM0ARABJAEMAQQApMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDX4BYmJiNwrPz9At2ioXYkMuMWAOf669VPS3SAzIKkJLhSE7Bf9sbTjGHRFZhs6STxKkMBKKnx6dqAEMGlQwDSU42/kqhGya28SUn3HigH2w3dR/536Gt4eAxyLp9ODNXUqWTpnraWCeT41kcnJ27cmOAUMxzxDcsA93n32L4u8wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAAN89zf+wSFL+4+2Ic8mGva8Z51EzYzNgYEqXwEMHxw4jCxxbsuxewQWedSGWi3SFZla6zmNUEA+UO95tSZ353klTvWDzut2BFSJOPLcMu8HPTTdnMt4ofVeVqKyi2vp+3t78vjqDAAfSAu5C9wT7stoUx41Nok+L6WbmpOIgvHy</X509Certificate>'
cXML+= '</X509Data></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:= "C:\TEMP\" + cChave + ".xml"
nArqHandle:= FCREATE(cArqXml, 0 )
FWRITE(nArqHandle, cXML)
FCLOSE(nArqHandle)
If ! File(cArqXml)
hwg_msginfo("XML não foi Criado!")
Return Nil
Else
hwg_msginfo("XML criado com sucesso!")
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, "á", "á" )
cTexto := StrTran( cTexto, "é", "é" )
Return cTexto
**************************************
Function Transfome(cTexto)
cTexto := StrTran( cTexto, "/", "%2F" )
cTexto := StrTran( cTexto, "=", "%3D" )
cTexto := StrTran( cTexto, "+", "%2B" )
cTexto := StrTran( cTexto, ":", "%3A" )
cTexto := StrTran( cTexto, ",", "%2C" )
cTexto := StrTran( cTexto, "?", "%3F" )
cTexto := StrTran( cTexto, "$", "%24" )
Return cTexto
Se fosse possível modificar esta rotina aki pra incorporar o certificado
*****************************************
Function DownLoad()
Local cParm, cRet, cPart, cCertificado:= SubStr(principal.Combo_1.DisplayValue, (At(' - ', principal.Combo_1.DisplayValue) + 3))
Local cXML
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)
cParm:= "__EVENTTARGET=" + ;
"&__EVENTARGUMENT=" + ;
"&__VIEWSTATE=" + Transfome(cviewState) + ;
"&__VIEWSTATEGENERATOR=" + Transfome(cViewStateGenerator) + ;
"&__EVENTVALIDATION=" + Transfome(cEeventValidation) + ;
"&ctl00%24txtPalavraChave=" + ;
"&ctl00%24ContentPlaceHolder1%24btnDownload=Download+do+documento*" + ;
"&ctl00%24ContentPlaceHolder1%24abaSelecionada=" + ;
"&hiddenInputToUpdateATBuffer_CommonToolkitScripts=1"
Try
oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.6.0")
Catch
MsgInfo('Erro na Criação do Serviço')
Return .f.
End
Try
If cCertificado != NIL
oServer:setOption( 3, "CURRENT_USER\MY\" + cCertificado )
EndIf
oServer:Open( "POST", cUrl2, .f. )
Catch
MsgInfo('Erro na Conexão com o Site ' + cUrl2)
Return .f.
End
oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
oServer:SetRequestHeader( "Connection", "keep-alive" )
oServer:SetRequestHeader( "Cookie", cStringCookie)
Try
oServer:Send(cParm)
oServer:WaitForResponse( 500000 )
Catch
MsgInfo('Erro na Resposta com o Site ' + cUrl2)
Return .f.
End
cRet:= oServer:ResponseBody
//MemoWrit("texte-nfe.txt", cRet)
If At('<div id="ctl00_ContentPlaceHolder1_pnlErro" class="painel_alerta">', cRet) > 0
cPart:= Substr(cRet, (At('<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cRet) + 60))
cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
Return .f.
EndIf
If At('<div id="ctl00_ContentPlaceHolder1_pnlErro" class="painel_erro_sistema">', cRet) > 0
cPart:= Substr(cRet, (At('<span id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cRet) + 60))
cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
Return .f.
EndIf
If At('<div class="divMensagemPaginaErro">', cRet) > 0
cPart:= Substr(cRet, (At('<span id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cRet) + 53))
cPart:= Substr(cPart, 1, (At('</span>', cPart) - 1))
MsgInfo(Troca_Acento(cPart, 'aviso Erro'))
Return .f.
EndIf
cIniFolder:= DiskName() + ":\" + CurDir() + "\"
cXML:= cIniFolder + '\' + cChave + "-nfe_Cert.xml"
nArqHandle:= FCREATE(cXML, 0 )
FWRITE(nArqHandle, cRet)
FCLOSE(nArqHandle)
If ! File(cXML)
MsgInfo("xML não baixado!")
Return .f.
Else
MsgInfo("xML baixado com sucesso!")
If MsgYesNo('Gerar DANFE?')
cXML:= MemoRead(cXML)
ImprimeDanfe(cXML, cChave + '.pdf')
EndIf
EndIf
Return .t.
Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes