****************************************************
* Desenvolvido com base no projeto criado por Daniel Denobie - denobie@hotmail.com
* http://www.pctoledo.com.br/forum/viewtopic.php?f=4&t=16972
****************************************************
#include 'minigui.ch'
#include 'hbcompat.ch'
MEMVAR aCobr, I, cInfCpl, cInfAdFisco, cDigVal, cChave, cVerAplic, cTpAmb, c_Span, cRet
MEMVAR cVersao, cArqXml, cIniFolder, nArqHandle, cxMotivo, ccStat, cnProt, cPart_
MEMVAR cDhRecbto, cTag, cTagPai, nIni, nFimTagPai, aTotais, cDiscAdicional, nContador
MEMVAR P_, aDet, aPis, aTransp, aCofins, aIpi, lpOemTag, cTag_, aIcms, aTrib, nSoma
MEMVAR aMedicamentos, aEmit, aDest, aIde, c_Tag, cPar_, nTamTag, cPar1_, nFim, cFile
MEMVAR cParte, Contador, nTotPro, cHtml, cPart, cStringCookie, cViewState, cViewStateGenerator
MEMVAR nFim3, cHiddenToken, nIni4, cHtml1, nFim4, Txt_File, cCodigo, ceEventValidation
MEMVAR nIni1, nFim1, nIni2, nFim2, nIni3, cHiddenSom, cUrl, cUrl1, oServer, nInie, nFime, cUrl2
MEMVAR cMsgErro, lUsarMiniGui
***************************************
Function Main()
Public cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
Public cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
Public cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'
Public cCaptcha, cCnpj, cStringCookie, cViewState, cEeventValidation, cHiddenToken, cCodigo, cViewStateGenerator
Public cHiddenSom, cChave, lUsarMinigui:= .t.
If lUsarMiniGui
Declare Window Principal
SET NAVIGATION EXTENDED
SET LANGUAGE TO PORTUGUESE
Set SHOWDETAILERROR Off
Load Window principal
principal.Button_1.Enabled:=.F.
AtualizaImagem()
On Key escape Of principal Action Sair()
Center Window principal
Activate Window principal
EndIf
Return Nil
****************************************
Function Limpar()
principal.oChaveNFe.Value:=SPACE(44)
principal.oTxt_captcha.Value:=SPACE(6)
principal.oChaveNFe.SetFocus
Return Nil
****************************************
Function Sair()
principal.release
Return Nil
***************************************************
Function AtualizaImagem()
Try
oServer:= win_OleCreateObject( "MSXML2.ServerXMLHTTP.5.0")
Catch
IIf(lUsarMiniGui, MsgInfo('Erro na Criação do Serviço'), Alert('Erro na Criação do Serviço'))
Return .f.
End
Try
oServer:Open( "GET", cUrl, .f. )
oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
oServer:SetRequestHeader( "Connection", "keep-alive" )
oServer:Send()
oServer:WaitForResponse( 10000 )
Catch
IIf(lUsarMiniGui, MsgInfo('Erro na Conexão com o Site'), Alert('Erro na Conexão com o Site'))
Return .f.
End
cHtml:= oServer:ResponseBody
cStringCookie:= oServer:getResponseHeader("Set-Cookie")
nInie := At('id="ctl00_ContentPlaceHolder1_lblMensagemErro">', cHtml) + 47
If nInie > 47
cHtml1 := SubStr( cHtml, nInie)
nFime := At('', cHtml1) - 1
cMsgErro:= SubStr(cHtml, nInie, nFime)
If ! Empty(cMsgErro)
IIf(lUsarMiniGui, MsgInfo(cMsgErro, 'Erro no Site ' + cUrl), Alert(cMsgErro, 'Erro no Site ' + cUrl))
Return .f.
EndIf
EndIf
nIni := At('id="__VIEWSTATE" value=', cHtml) + 24
cHtml1:= SubStr( cHtml, nIni)
nFim := At('" />', cHtml1) - 1
cViewState:= SubStr(cHtml, nIni, nFim)
nIni1 := At('id="__EVENTVALIDATION" value="', cHtml) + 30
cHtml1:= SubStr( cHtml, nIni1)
nFim1 := At('" />', cHtml1) - 1
cEeventValidation:= SubStr(cHtml, nIni1, nFim1)
nIni2 := At('id="__VIEWSTATEGENERATOR" value="', cHtml) + 33
cHtml1:= SubStr( cHtml, nIni2)
nFim2 := At('" />', cHtml1) - 1
cViewStateGenerator:= SubStr(cHtml, nIni2, nFim2)
nIni3 := At('id="ctl00_ContentPlaceHolder1_token" value="', cHtml) + 44
cHtml1:= SubStr( cHtml, nIni3)
nFim3 := At('" />', cHtml1) - 1
cHiddenToken:= SubStr(cHtml, nIni3, nFim3)
nIni4 := At('id="ctl00_ContentPlaceHolder1_captchaSom" value="', cHtml) + 49
cHtml1:= SubStr( cHtml, nIni4)
nFim4 := At('" />', cHtml1) - 1
cHiddenSom:= SubStr(cHtml, nIni4, nFim4)
nIni := At('data:image/png;base64,', cHtml) + 22
cHtml1:= SubStr(cHtml, nIni)
nFim := At('" style="border-width:0px;" />', cHtml1) - 2
cFile:= SubStr(cHtml, nIni, nFim)
txt_file:=fcreate("captcha.png", 0)
If (!(ferror() = 0))
IIf(lUsarMiniGui, MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0)), Alert("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0)))
Return .f.
EndIf
cCodigo:= SubStr(cHtml, nIni, nFim)
If Empty(cCodigo)
IIf(lUsarMiniGui, MsgInfo("Erro de criacao do arquivo de imagem"), Alert("Erro de criacao do arquivo de imagem"))
Return .f.
EndIf
cFile:= hb_base64Decode(cFile, cCodigo)
FWrite(txt_file, cFile)
FClose(txt_file)
SetProperty ('principal', 'oImg_captcha', 'Picture', 'Captcha.png')
principal.Button_1.Enabled:=.T.
Return .t.
***************************************************
Function Continuar(cCaptcha, Chave)
Local oInternet, cParm
Public cChave:= Chave
If ! DigitoChave(cChave)
Return Nil
EndIf
cParm:= { { "__EVENTARGUMENT", "" },;
{ "__EVENTTARGET", "" },;
{ "__EVENTVALIDATION", cEeventValidation },;
{ "__VIEWSTATE", cviewState },;
{ "__VIEWSTATEGENERATOR", cViewStateGenerator },;
{ "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
{ "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
{ "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
{ "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
{ "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
{ "ctl00$txtPalavraChave", "" },;
{ "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}
Try
oInternet:= TIPClientHTTP():New(cUrl, .f.)
Catch
IIf(lUsarMiniGui, MsgInfo('Erro na Criação do Serviço'), Alert('Erro na Criação do Serviço'))
Return .f.
End
oInternet:SetCookie(cStringCookie)
If oInternet:Open()
If oInternet:POST(cParm)
cRet:= oInternet:ReadAll()
Else
IIf(lUsarMiniGui, MsgInfo('Erro no Post ' + cUrl, 'Aviso do Sistema'), Alert('Erro no Post ' + cUrl, 'Aviso do Sistema'))
Return .F.
EndIf
Else
IIf(lUsarMiniGui, MsgInfo('Erro na Conexão'), Alert('Erro na Conexão'))
Return .f.
EndIf
oInternet:Close()
If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
cPart:= Substr(cPart, (At('
', cPart) + 4))
IIf(lUsarMiniGui, MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('', cPart) - 1)))), Alert(Troca_Acento(SubStr(cPart, 1, (At('', cPart) - 1)))))
Return .f.
EndIf
Try
oInternet:= TIPClientHTTP():New(cUrl1, .f.)
oInternet:nConnTimeout:= 10000
Catch
IIf(lUsarMiniGui, MsgInfo('Erro na Criação do Serviço'), Alert('Erro na Criação do Serviço'))
Return .f.
End
oInternet:SetCookie(cStringCookie)
If oInternet:Open()
cHtml:= oInternet:ReadAll()
cStringCookie:= oInternet:GetCookies()
Else
IIf(lUsarMiniGui, msgInfo('Erro na Conexão'), Alert('Erro na Conexão'))
Return .f.
EndIf
oInternet:Close()
If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
IIf(lUsarMiniGui, MsgInfo(SubStr(cPart, 1, (At('', cPart) - 1))), Alert(SubStr(cPart, 1, (At('', cPart) - 1))))
Return .f.
EndIf
If ! Empty(cHtml)
nIni := At('', cParte)
cFile := SubStr(cParte, nFim)
nIni := RAt('fixo-prod-serv-numero',cFile)
c_span := SubStr(cFile, nIni)
nIni := AT('',c_span)+6
nTamTag:= AT('',c_span)-nIni
nTotPro:= Val(AllTrim(SubStr(c_span,nIni,nTamTag)))
If TratamentoDados()
GravaXML()
Else
IIF(lUsarMiniGui, MsgInfo('Erro no Tratamento do Dados'), Alert('Erro no Tratamento do Dados'))
Return .f.
EndIf
Else
IIf(lUsarMiniGui, msgInfo('Erro ao ler retorno da Consulta'), Alert('Erro ao ler retorno da Consulta'))
Return .f.
EndIf
Return Nil
***************************************
Function TratamentoDados()
Public aIde:={}, aEmit:={}, aDest:={}, aDet:={}, aICMS:={}, aIPI:={}, aPIS:={}, aCOFINS:={}, aTotais:={}, aTransp:={}, aCobr:={}
Public aMedicamentos:= {}, aTrib:= {}
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
* TAM_LABEL se ZERO pega tudo, se MAIOR que ZERO pega o tamanho no início e se MENOR que ZERO exclui o tamanho no início e pega o restante
AADD(aIde,{{"","cUF","ide",21,"Chave de Acesso",2},; //1- tratamento especial
{"","cNF","",0,"Número",0},; //2- tratamento especial
{"","natOp","",0,"Natureza da Operação",0},; //3-
{"","indPag","",0,"Forma de Pagamento",1},; //4-
{"","mod","",0,"Modelo",0},; //5-
{"","serie","",0,"Série",0},; //6-
{"","nNF","",0,"Número",0},; //7-
{"","dhEmi","",0,"Data de Emissão",0},; //8- tratamento especial
{"","dhSaiEnt","",0,"Entrada",0},; //9- tratamento especial
{"","tpNF","",0,"Tipo da Operação",1},; //10-
{"","idDest","",0,"Destino da operação",1},; //11-
{"","cMunFG","",0,"Município da Ocorrência do Fato Gerador do ICMS",0},; //12-
{"","tpImp","",0,"Formato de Impressão DANFE",1},; //13- tratamento especial
{"","tpEmis","",0,"Tipo de Emissão",1},; //14-
{"","cDV","",0,"Chave de Acesso",0},; //15- tratamento especial
{"","tpAmb","",0,"Ambiente de autorização:",0},; //16- tratamento especial
{"","finNFe","",0,"Finalidade",1},; //17-
{"","indFinal","",0,"Consumidor final",1},; //18-
{"","indPres","",0,"Presença do Comprador",1},; //19-
{"","procEmi","",0,"Processo",1},; //20-
{"","verProc","",0,"Versão do Processo",0}}) //21-
AADD(aEmit,{{"","CNPJ","emit",20,"CNPJ",0},; //1- tratamento especial
{"","CPF","",0,"CPF",0},; //2-
{"","xNome","",0,"Nome / Razão Social",0},; //3-
{"","xFant","",0,"Nome Fantasia",0},; //4-
{"","xLgr","enderEmit",15,"Endereço",0},; //5- tratamento especial
{"","nro","",0,"Endereço",0},; //6- tratamento especial
{"","xCpl","",0,"Endereço",0},; //7- tratamento especial
{"","xBairro","",0,"Bairro / Distrito",0},; //8-
{"","cMun","",0,"Município",7},; //9-
{"","xMun","",0,"Município",-10},; //10-
{"","UF","",0,"UF",0},; //11-
{"","CEP","",0,"CEP",0},; //12- tratamento especial
{"","cPais","",0,"País",4},; //13-
{"","xPais","",0,"País",-7},; //14-
{"","fone","",0,"Telefone",0},; //15- tratamento especial
{"","IE","",0,"Inscrição Estadual",0},; //16-
{"","IEST","",0,"Inscrição Estadual do Substituto Tributário",0},; //17-
{"","IM","",0,"Inscrição Municipal",0},; //18-
{"","CNAE","",0,"CNAE Fiscal",0},; //19-
{"","CRT","",0,"Código de Regime Tributário",1}}) //20-
AADD(aDest,{{"","CNPJ","dest",20,"CNPJ",0},; //1-
{"","CPF","",0,"CPF",0},; //2-
{"","idEstrangeiro","",0,"",0},; //3-
{"","xNome","",0,"Nome / Razão Social",0},; //4-
{"","xLgr","enderDest",15,"Endereço",0},; //5- tratamento especial
{"","nro","",0,"Endereço",0},; //6- tratamento especial
{"","xCpl","",0,"Endereço",0},; //7- tratamento especial
{"","xBairro","",0,"Bairro / Distrito",0},; //8-
{"","cMun","",0,"Município",7},; //9-
{"","xMun","",0,"Município",-10},; //10-
{"","UF","",0,"UF",0},; //11-
{"","CEP","",0,"CEP",0},; //12- tratamento especial
{"","cPais","",0,"País",4},; //13-
{"","xPais","",0,"País",-7},; //14-
{"","fone","",0,"Telefone",0},; //15- tratamento especial
{"","indIEDest","",0,"Indicador IE",2},; //16- tratamento especial
{"","IE","",0,"Inscrição Estadual",0},; //17-
{"","ISUF","",0,"Inscrição SUFRAMA",0},; //18-
{"","IM","",0,"IM",0},; //19-
{"","email","",0,"E-mail",0}}) //20-
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML}
AADD(aTotais,{{"0.00","vBC","Base de Cálculo ICMS"},; //1-
{"0.00","vICMS","Valor do ICMS"},; //2-
{"0.00","vICMSDeson","Valor do ICMS Desonerado"},; //3-
{"0.00","vFCPUFDest","Valor Total ICMS FCP"},; //4-
{"0.00","vBCST","Base de Cálculo ICMS ST"},; //5-
{"0.00","vST","Valor ICMS Substituição"},; //6-
{"0.00","vProd","Valor Total dos Produtos"},; //7-
{"0.00","vFrete","Valor do Frete"},; //8-
{"0.00","vSeg","Valor do Seguro"},; //9-
{"0.00","vDesc","Valor Total dos Descontos"},; //10-
{"0.00","vII","Valor Total do II"},; //11-
{"0.00","vIPI","Valor Total do IPI"},; //12-
{"0.00","vPIS","Valor do PIS"},; //13-
{"0.00","vCOFINS","Valor da COFINS"},; //14-
{"0.00","vOutro","Outras Despesas Acessórias"},; //15-
{"0.00","vNF","Valor Total da NFe"}}) //16-
* Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}
AADD(aTransp,{{"","modFrete","transp",17,"Modalidade do Frete",1},; //1-
{"","CNPJ","transporta",8,"CNPJ",0},; //2-
{"","CPF","",0,"CPF",0},; //3-
{"","xNome","",0,"Razão Social / Nome",0},; //4-
{"","IE","",0,"Inscrição Estadual",0},; //5-
{"","xEnder","",0,"Endereço Completo",0},; //6-
{"","xMun","",0,"Município",0},; //7-
{"","UF","",0,"UF",0},; //8-
{"",'placa','veicTransp',11,'Placa',0},; //9-
{"","UF","",0,"UF",0},; //10-
{"","RNTC","",0,"RNTC",0},; //11-
{"","qVol","vol",17,"Quantidade",0},; //12-
{"","esp","",0,"Espécie",0},; //13-
{"","marca","",0,"Marca dos Volumes",0},; //14-
{"","nVol","",0,"Volume",0},; //15-
{"","pesoL","",0,"Peso Líquido",0},; //16-
{"","pesoB","",0,"Peso Bruto",0}}) //17-
* Conteudo elementos da Matriz = {VALOR_TAG,TAG}
AADD(aCobr,{{"","nDup"},; //1-
{"","dVenc"},; //2-
{"","vDup"},; //3-
{"","nDup"},; //4-
{"","dVenc"},; //5-
{"","vDup"},; //6-
{"","nDup"},; //7-
{"","dVenc"},; //8-
{"","vDup"},; //9-
{"","nDup"},; //10-
{"","dVenc"},; //11-
{"","vDup"},; //12-
{"","nDup"},; //13-
{"","dVenc"},; //14-
{"","vDup"},; //15-
{"","nDup"},; //16-
{"","dVenc"},; //17-
{"","vDup"},; //18-
{"","nDup"},; //19-
{"","dVenc"},; //20-
{"","vDup"},; //21-
{"","nDup"},; //22-
{"","dVenc"},; //23-
{"","vDup"},; //24-
{"","nDup"},; //25-
{"","dVenc"},; //26-
{"","vDup"},; //27-
{"","nDup"},; //28-
{"","dVenc"},; //29-
{"","vDup"}}) //30-
// Conteudo elementos da Matriz = {VALOR_TAG,TAG,LABEL_HTML,TAM_LABEL}
For p_:= 1 To nTotPro
AADD(aDet,{{"","cProd","Código do Produto",0},; //1-
{"","cEAN","Código EAN Comercial",0},; //2-
{"","xProd","fixo-prod-serv-descricao",0},; //3-
{"","NCM","Código NCM",0},; //4-
{"","NVE","",0},; //5-
{"","CEST","Código CEST",0},; //6-
{"","EXTIPI","Código EX da TIPI",0},; //7-
{"","CFOP","CFOP",0},; //8-
{"","uCom","Unidade Comercial",0},; //9-
{"","qCom","Quantidade Comercial",0},; //10-
{"","vUnCom","Valor unitário de comercialização",0},; //11-
{"","vProd","fixo-prod-serv-vb",0},; //12-
{"","cEANTrib","Código EAN Tributável",0},; //13-
{"","uTrib","Unidade Tributável",0},; //14-
{"","qTrib","Quantidade Tributável",0},; //15-
{"","vUnTrib","Valor unitário de tributação",0},; //16-
{"","vFrete","Valor Total do Frete",0},; //17-
{"","vSeg","Valor do Seguro",0},; //18-
{"","vDesc","Valor do Desconto",0},; //19-
{"","vOutro","Outras Despesas Acessórias",0},; //20-
{"","indTot","Indicador de Composição do Valor Total da NF-e",1},; //21-
{"","nItemPed","Item do pedido de compra",0},; //22-
{"","xPed","Número do pedido de compra",0}}) //23-
AADD(aTrib, {{"","vTotTrib","Valor Aproximado dos Tributos",0}}) //1-
AADD(aMedicamentos, {{"","Lote",'Nro. do Lote', 0},; //1-
{"","qLote",'Quantidade de produtos no lote', 0},; //2-
{"","dFab",'Data de fabricaçã', 0},; //3-
{"","dVal",'Data de validade', 0},; //4-
{"","vPMC",'Preço Máximo Consumido', 0},; //5-
{"","infAdProd",'Descrição', 0}}) //6-
AADD(aICMS,{{"","orig","Origem da Mercadoria",1},; //1- ICMS Normal e ST
{"","CST","Tributação do ICMS",2},; //2-
{"","CSOSN","Código de Situação da Operação",3},; //3-
{"","modBC","Modalidade Definição da",1},; //4-
{"","pRedBC","Percentual Redução",0},; //5-
{"","vBC","Base de Cálculo",0},; //6-
{"","pICMS","Alíquota do",0},; //7-
{"","vICMS","Valor do",0},; //8-
{"","vICMSDeson","",0},; //9-
{"","motDesICMS","",0},; //10-
{"","modBCST","Modalidade de determinação da BC do ICMS ST",1},; //11-
{"","pMVAST","Percentual Margem Valor Adicionado do ICMS ST",0},; //12-
{"","pRedBCST","Percentual da Redução de BC do ICMS ST",0},; //13-
{"","vBCST","Valor da BC do ICMS ST",0},; //14-
{"","pICMSST","Alíquota do imposto do ICMS ST",0},; //15-
{"","vICMSST","Valor do ICMS ST",0},; //16-
{"","vBCSTRet","Valor da BC do ICMS ST retido",0},; //17-
{"","vICMSSTRet","Valor do ICMS ST retido",0},; //18-
{"","vICMSOp","",0},; //19-
{"","pDif","",0},; //20-
{"","vICMSDif","",0},; //21-
{"","pCredSN","Alíquota aplicável de cálculo do crédito",0},; //22-
{"","vCredICMSSN","Valor 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-
Next p_
nIni := At('',cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //emit
GeraBlocoEmit(cParte)
nIni := At('
',cParte)
cParte:= SubStr(cParte, 1, nIni - 1) //dest
GeraBlocoDest(cParte)
nIni := At('
', cFile)
cParte:= SubStr(cFile, nIni)
nIni := At(' |