Consulta optante do simples online
Moderador: Moderadores
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Consulta optante do simples online
Alguém tem essa rotina em HWGUI to querendo incluir no meu sistema
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Consulta optante do simples online
Código: Selecionar todos
//=========================================================================
//
// 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
HARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
-
Fernando queiroz
- Usuário Nível 4

- Mensagens: 779
- Registrado em: 13 Nov 2014 00:41
- Localização: Porto Alegre/RS
Consulta optante do simples online
Código: Selecionar todos
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 cTextoHARBOUR 3.2, HWGUI 2.23 B3, SEFAZCLASS, PDFClass, ADO + MariaDB/MySQL, RMChart
Consulta optante do simples online
Agradeço aos colegas q implentaram ou melhoraram a função em especial ao Daniel, mas o fato é q estou tendo problemas e pelo q pesquisei o governo quer limitar o download a ter o certificado ou via manifestação prévia.
Eu tenha as 2 formas em meu sistema via a rotina aki descrita e tb via manifestação.
Via manifestação o problema é q demora a sincronização no site do governo ou seja, manifesta como confirmação da operação e pra liberar o download demora de 30 segundos até uns 3 min e o cliente quer tudo na hora.
Tem alguns sites como o FSIST q vc informa a chave e escolhe com certificado ai pede o certificado e já baixa o XML.
Se fosse possível modificar esta rotina aki pra incorporar o certificado ou algo assim ai daria certo sem ter q manifestar, ou seja, seria mais rápido.
Será q seria possível?
Eu tenha as 2 formas em meu sistema via a rotina aki descrita e tb via manifestação.
Via manifestação o problema é q demora a sincronização no site do governo ou seja, manifesta como confirmação da operação e pra liberar o download demora de 30 segundos até uns 3 min e o cliente quer tudo na hora.
Tem alguns sites como o FSIST q vc informa a chave e escolhe com certificado ai pede o certificado e já baixa o XML.
Se fosse possível modificar esta rotina aki pra incorporar o certificado ou algo assim ai daria certo sem ter q manifestar, ou seja, seria mais rápido.
Será q seria possível?
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Consulta optante do simples online
Show, Fladimir. Acho q eh isso mesmo que precisamos no momento, como forma de contornar esse problema que o governo está criando pra nós.Se fosse possível modificar esta rotina aki pra incorporar o certificado
Eu lembro que ha alguns anos havia duas versões desta rotina: uma com certificado, e a outra (esta que estamos usando até hoje) sem certificado.
Vamos aguardar o que os mestres tem a dizer
PS: Se tiro a baixa de xml do meu sistema, me matam rsrs
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Consulta optante do simples online
Ola
Para teste com uso do certificado
Para teste com uso do certificado
- Anexos
-
ImpCertificado.rar- para teste
- (1.01 MiB) Baixado 203 vezes
Daniel
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Consulta optante do simples online
Cara... deu certo...
Daniel meu amigo, vou entrar em contato contigo no particular, vou mandar um presente pra vc...
Kkk
Parabéns cara vc manja muito de Web e esses negócios.
Só 1 dúvida, qdo abriu apareceu os diversos certificados, mesmo eu tendo marcado o correto não baixou, ai removi e deixei somente o correto, ai executando deu certo, seria isso mesmo?
De qualquer maneira tem o fonte, vou dar uma analisada mais apurada.
Grande abraço e obrigado mais 1 vez... não precisa nem manifestar e não esta errado pq usou o certificado do cliente, agora se o governo não mudar (o q é meio dificil) vai funcionar por mais um bom tempo
Daniel meu amigo, vou entrar em contato contigo no particular, vou mandar um presente pra vc...
Kkk
Parabéns cara vc manja muito de Web e esses negócios.
Só 1 dúvida, qdo abriu apareceu os diversos certificados, mesmo eu tendo marcado o correto não baixou, ai removi e deixei somente o correto, ai executando deu certo, seria isso mesmo?
De qualquer maneira tem o fonte, vou dar uma analisada mais apurada.
Grande abraço e obrigado mais 1 vez... não precisa nem manifestar e não esta errado pq usou o certificado do cliente, agora se o governo não mudar (o q é meio dificil) vai funcionar por mais um bom tempo
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Consulta optante do simples online
Ola Fladimir
Testar com esta mudança na função abaixo
com mais de um certificado
Testar com esta mudança na função abaixo
com mais de um certificado
Código: Selecionar todos
*****************************************
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.Daniel
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Consulta optante do simples online
Boa noite,
Não consegui fazer funcionar. Mesmo na versão compilada não funcionou!
Janio
Não consegui fazer funcionar. Mesmo na versão compilada não funcionou!
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Consulta optante do simples online
Deixa um certificado só na opções de internet
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Consulta optante do simples online
Bom dia...
Daniel ainda não baixei essa versão nova aí, mas na versão anterior se digitasse o captcha errado dava erro e saía do sistema.. Já que você tá fazendo estas alterações aí poderia dar uma olhada nesse erro ...
Obrigado
Rubens
Daniel ainda não baixei essa versão nova aí, mas na versão anterior se digitasse o captcha errado dava erro e saía do sistema.. Já que você tá fazendo estas alterações aí poderia dar uma olhada nesse erro ...
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Consulta optante do simples online
O Rubens, coloca um TRY CATCH nessa parte q ai não sai
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Consulta optante do simples online
ola Rubens nesta ultima foi arrumado o erro
Daniel
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Consulta optante do simples online
Tudo funcionando! Vlw Daniel
Janio
Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Consulta optante do simples online
olá,
acho que a SEFAZ bloqueou o captcha, desde de quinta feira não mostra o captcha (A seguinte falha ocorreu: Falha inesperada. O sistema pode estar momentaneamente indisponível ou ocorreu um erro pontual.) ver link abaixo.
o site do fsist não trabalha bem também
https://www.nfe.fazenda.gov.br/portal/c ... SeqxE8pl8=
acho que a SEFAZ bloqueou o captcha, desde de quinta feira não mostra o captcha (A seguinte falha ocorreu: Falha inesperada. O sistema pode estar momentaneamente indisponível ou ocorreu um erro pontual.) ver link abaixo.
o site do fsist não trabalha bem também
https://www.nfe.fazenda.gov.br/portal/c ... SeqxE8pl8=

