Página 6 de 24

Consulta optante do simples online

Enviado: 24 Jun 2016 13:51
por Wanderlei
Oi Toledo, se vc quiser compartilhar o que já tem, talvez possamos ajudar o finalizar a montagem do xml da NFe.

Consulta optante do simples online

Enviado: 24 Jun 2016 17:42
por ciacpd
Olá Pessoal,
Realizei pequenas alterações para compatibilizar com xharbour e FiveWin a consulta simples.
Deve ser criada uma dialog com os recursos informados ou então criar com o @Say/Get
Linkar a hbcc.lib

Código: Selecionar todos

// -------------------------------------------------------------------------- //
// Arquivo.....: ConsultaNfe.prg
// Criado em...: 02/05/2016 as 10:41:18
// Projeto.....: Consulta Simples
// Programador.: Daniel Denobie - denobie@hotmail.com
// Alterado por: Daniel Segura Fernandes ciacpd@hotmail.com
// Objetivo....: Compatibilizar com FiveWin xHarbour
// -------------------------------------------------------------------------- //
#include "FiveWin.ch"
#include "directry.ch"
#include "Fileio.ch"
#include "tip.ch"

#define _MSXML2_ServerXMLHTTP        'MSXML2.ServerXMLHTTP.5.0'

// -------------------------------------------------------------------------- //
FUNCTION Busca_NFe_Portal()
   
   Private cUrl := "http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8="
   Private cUrl1:= "http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8="
   Private cUrl2:= 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8%3d'

   Private oImgCaptcha, oCaptcha, cCaptcha:=space(6), oChave, cChave:=space(44),;
           cStringCookie, cViewState, cViewStateGenerator, cEeventValidation, cHiddenToken, cCodigo, cHtml
   Private cHiddenSom, oDlg, oServer

   Consulta()
   
   Define Dialog oDlg Resource 'GERNFE'

   Redefine Get oCaptcha Var cCaptcha ID 4001 Of oDlg
   Redefine Get oChave   Var cChave   ID 4002 Of oDlg

   Redefine Image oImgCaptcha FILENAME "captcha.png" ID 4004 Of oDlg Adjust

   Redefine BtnBmp ID 4005 Resource 'REFRESH16' Of oDlg Action Captcha(cHtml) //ImageNFE( oDlg, cCaptcha )
   Redefine Button ID 4003                      Of oDlg Action ( oDlg:End() )

   oDlg:lHelpIcon:=.f.
   Activate Dialog oDlg Centered On Init Captcha(cHtml) // ImageNFE( oDlg, cCaptcha )
   
   If ! Consulta1(cChave, cCaptcha)
      nmsgbox('Ocorreu um ERRO na consulta.', xSWH+' Informa.')
      return .f.
   Else
      nmsgbox('Consulta realizada com sucesso.', xSWH+' Informa.')
   EndIf

Return .t.
// -------------------------------------------------------------------------- //
Function Consulta()
   mensagem("Criando a conecção com o partal da NFe. Aguarde!!!")
   Try
      oServer:= CreateObject( _MSXML2_ServerXMLHTTP )
   Catch
      MsgInfo('Erro na Criação do Serviço', xSWH+' Informa.')
      mensagem("")
      Return .f.
   End
   Try
      oServer:Open( "GET", cUrl, .f. )
      oServer:SetRequestHeader( "Content-Type", "application/x-www-form-urlencoded" )
      oServer:SetRequestHeader( "Connection", "keep-alive" )
      oServer:Send()
      oServer:WaitForResponse( 10000 )
   Catch
      MsgInfo('Erro na Conexão com o Site', xSWH+' Informa.')
      mensagem("")
      Return .f.
   End
   cHtml:= oServer:ResponseBody
   cStringCookie:= oServer:getResponseHeader("Set-Cookie")
   mensagem('')
   MemoWrit("html_nfei.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)
         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)

   memowrit( 'html_nfef.txt' , cHtml )
   
   If ! Captcha(cHtml)
      Return .F.
   EndIf

Return .t.
// -------------------------------------------------------------------------- //
Function Captcha(cHtml)
   nIni  := At('data:image/png;base64,',  cHtml) + 22
   cHtml1:= SubStr(cHtml, nIni)
   nFim  := At('" style="border-width:0px;" />', cHtml1) - 2
   cFile:= SubStr(cHtml, nIni, nFim)
   txt_file:=fcreate("captcha.png", 0)
   If (!(ferror() = 0))
      MsgInfo("Erro de criacao do arquivo de imagem " + Str(ferror(), 3, 0))
      Return .f.
   EndIf
   cCodigo:= SubStr(cHtml, nIni, nFim)
   If Empty(cCodigo)
      MsgInfo("Erro de criacao do arquivo de imagem")
      Return .f.
   EndIf
   cDecoded      := HB_B64DECODE( cCodigo )
   FWrite(txt_file , cDecoded)
   FClose(txt_file)
   if valtype('oImgCaptcha') == 'O'
      cImgCaptcha:='captcha.png'
      oImgCaptcha:Hide()
      oImgCaptcha:LoadBmp( cImgCaptcha )
      oImgCaptcha:Show()
      oImgCaptcha:Refresh( .t. )
   endif
   sysrefresh()
   
Return .T.
// -------------------------------------------------------------------------- //
Function Consulta1(cChave, cCaptcha)
   Local oInternet, cParm, cRet:= cHtml:= ''

   If ! DigitoChave(cChave)
      Return Nil
   EndIf

   cParm:= { { "__EVENTARGUMENT", "" },;
             { "__EVENTTARGET", "" },;
             { "__EVENTVALIDATION", cEeventValidation },;
             { "__VIEWSTATE", cviewState },;
             { "__VIEWSTATEGENERATOR", cViewStateGenerator },;
             { "ctl00$ContentPlaceHolder1$btnConsultar", "Continuar" },;
             { "ctl00$ContentPlaceHolder1$captchaSom", cHiddenSom},;
             { "ctl00$ContentPlaceHolder1$token", cHiddenToken },;
             { "ctl00$ContentPlaceHolder1$txtCaptcha", cCaptcha },;
             { "ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta", cChave },;
             { "ctl00$txtPalavraChave", "" },;
             { "hiddenInputToUpdateATBuffer_CommonToolkitScripts", "1"}}
   Try
      oInternet:= TIPClientHTTP():New(cUrl, .f.)
   Catch
      MsgInfo('Erro na Criação do Serviço')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      If oInternet:POST(cParm)
         cRet:=oInternet:ReadAll()
      Else
      	 msgInfo('Erro no Post ' + cUrl , xSWH+' Informa.')
      	 Return .F.
      EndIf
   Else
      msgInfo('Erro na Conexão', xSWH+' Informa.')
      Return .f.
   EndIf
   oInternet:Close()
   If At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) > 0
		cPart:= Substr(cRet, (At('id="ctl00_ContentPlaceHolder1_bltMensagensErro" class="listaErro">', cRet) + 66))
		cPart:= Substr(cPart, (At('<li>', cPart) + 4))
      MsgInfo(Troca_Acento(SubStr(cPart, 1, (At('</li>', cPart) - 1))))
      Return .f.
   EndIf
   Try
      oInternet:= TIPClientHTTP():New(cUrl1, .f.)
      oInternet:nConnTimeout:= 10000
   Catch
      MsgInfo('Erro na Criação do Serviço', xSWH+' Informa.')
      Return .f.
   End
   oInternet:SetCookie(cStringCookie)
   If oInternet:Open()
      cHtml:=oInternet:ReadAll()
      cStringCookie:= oInternet:GetCookies()
   Else
      msgInfo('Erro na Conexão')
      Return .f.
   EndIf
   oInternet:Close()
   MemoWrit('result.htm', cHtml, .f.)

   If At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) > 0
      cPart:= Substr(cHtml, (At('id="ctl00_ContentPlaceHolder1_lblResultadoConsulta">', cHtml) + 52))
   	MsgInfo(SubStr(cPart, 1, (At('</span>', cPart) - 1)))
   	Return .f.
   EndIf
   //eleminas partes não usadas
   If ! Empty(cHtml)
	   nIni1  := At('<html><link ',  cHtml)
   	cParte := SubStr(cHtml, nIni1)
   	nIni1  := At('<div id="ctl00_ContentPlaceHolder1_divBotoesConsulta"',  cParte)
		cParte1:= SubStr(cParte, 1, nIni1 - 1)
		nFim1  := At('</form>', cParte1)
		cFile  := SubStr(cParte1, nFim1)
		MemoWrit('resulta.htm', cFile, .f.)
   Else
      Return .f.
   EndIf
   sysrefresh()
   Shellexecute( , "open" , 'resulta.htm' )
Return .T.
// -------------------------------------------------------------------------- //
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')
      Return .f.
   EndIf
Return .t.
// -------------------------------------------------------------------------- //
Function Troca_Acento(cTexto)
   cTexto := StrTran( cTexto, "ó", "ó" )
   cTexto := StrTran( cTexto, "á", "á" )
Return cTexto
// -------------------------------------------------------------------------- //


Consulta optante do simples online

Enviado: 27 Jul 2016 07:35
por Wanderlei
Oi Toledo, vc conseguiu terminar a montagem do xml da NF-e?

Consulta optante do simples online

Enviado: 27 Jul 2016 08:26
por Toledo
Amigos, faltou tempo mesmo, mas esta semana eu posto o código pronto.

Abraços,

Consulta optante do simples online

Enviado: 04 Ago 2016 11:48
por Toledo
Amigos, desculpe a demora, mas segue um demo de como importar o xML da NFe usando como base a página de consulta completa da SEFAZ.

Bom, como existe vários tipos de NFe, este demo importa o básico, então dependendo da NFe pode não funcionar corretamente.

Algumas TAGs também não foram incluídas neste demo (IPI, verAplic, infAdFisco, SignatureValue, KeyInfo, etc), ou por falta de exemplo ou por não ser apresentado na consulta da SEFAZ, então tem que ser implementado caso a caso.

Então façam testes com este demo, e se o xML não for importado corretamente, poste aqui a Chave da NFe para que eu possa fazer um teste.

Uma dica: para verificar se o xML foi importado corretamente, abrir o xML usando o Navegador de Internet (IE, Firefox, Chrome,etc), se o arquivo tiver algum problema, a estrutura do xML não será apresentada corretamente.

Abraços,

Consulta optante do simples online

Enviado: 04 Ago 2016 13:57
por rubens
:{ :{ :{ :{
:)) :)) :)) :))
:|< :|< :|< :|<

É claro que não poderíamos esperar menos do MESTRE !!!
Muito obrigado Toledo...
Para fim funcionou perfeitamente...
Agora é só implementar...

Os smilies representam exatamente como estou me sentindo... kkkk Estava num problemão...

Valeu... Obrigado...

Rubens

Consulta optante do simples online

Enviado: 08 Ago 2016 07:14
por Wanderlei
Toledo ficou ótimo a rotina, meus agradecimentos a você e ao Daniel por ter tido a gentileza de iniciar esta função, obrigado.

Consulta optante do simples online

Enviado: 11 Ago 2016 16:12
por Kapiaba
xmlnfe.png
Excelente idéia, thanks.

Consulta optante do simples online

Enviado: 16 Set 2016 14:23
por Poka
Olá a todos

Toledo, implementei a rotina no meu sistema e ficou muito bom, parabéns e obrigado por disponibilizar.
Uma dúvida, ao baixar uma nota de compra, parece que não está trazendo os valores de icms, icmsst dos itens, tem como implementar?

Obrigado

Poka

Consulta optante do simples online

Enviado: 16 Set 2016 14:29
por Toledo
Amigo, poste aqui a Chave da NFe ou envie por MP (Mensagem Privada) para mim, para que eu possa fazer um teste.

Abraços,

Consulta optante do simples online

Enviado: 18 Set 2016 10:53
por Poka
Olá Toledo

segue duas chaves

a diferença é só nos itens.
tem com cst 010 e cst 020


35160848709125000111550000000064431106954701

35160916888303000122550010001419571742957058

Obrigado

Poka

Consulta optante do simples online

Enviado: 04 Nov 2016 12:52
por rubens
Olá...

Estou com um problema para baixar no Server 2008. Dá a mensagem de
'Erro na Conexão com o Site'
Já baixei a segurança, consigo acessar internet n servidor, mas nao abre a conexão via Classe...
Alguém tem alguma dica...?´

E o problema é no windows server mesmo...
O meu servidor que é igualzinho funciona, em outro cliente com o server 2008 também...

Obg

Rubens

Consulta optante do simples online

Enviado: 07 Nov 2016 00:36
por fladimir
utilzo a Dll pra importar mas vou migrar para esta rotina por ficar mais direto e não depender de mais um componente de terceiros..

mas ao importar uma chave utilizando a Dll e com a rotina percebi algumas leves diferenças, 3 na verdade, 2 já corrigi 1 não entendi muito a lógica...

Qdo importo uma chave via Dll na TAG PIS e COFINS vem PISOutr e COFINSOutr sendo q o correto é PISAliq e COFINSAliq... ok só alterar e lá tb pra vir as tags dos percentuais pCOFINS e pPIS tem q trocar onde esta Aliquota (%) para Aliquota...

Fora isto preciso na TAG "transp" colocar a subTAG "veicTransp" q não tem e dentro dela "placa" e "UF"

Tentei adicionar as linhas abaixo

Código: Selecionar todos

*   Conteudo elementos da Matriz = {VALOR_TAG,TAG,TAG_PAI,Elemento_Final_TAG_PAI,LABEL_HTML,TAM_LABEL}

   AADD(aTransp,{{"","modFrete","transp",14,"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",7,"Placa",0},; //9-       ADICIONEI ESSAS 2 LINHAS
                 {"","UF","",0,"UF",0},; //9-                                 MAS NAO RESOLVEU
                 {"","qVol","vol",14,"Quantidade",0},; //9-
                 {"","esp","",0,"Espécie",0},; //10-
                 {"","marca","",0,"Marca dos Volumes",0},; //11-
                 {"","nVol","",0,"Volume",0},; //12-
                 {"","pesoL","",0,"Peso Líquido",0},; //13-
                 {"","pesoB","",0,"Peso Bruto",0}}) //14-
Alguém saberia?
mas não não fecha

Consulta optante do simples online

Enviado: 07 Nov 2016 12:10
por Daniel
Ola

Código: Selecionar todos

*   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-

Consulta optante do simples online

Enviado: 07 Nov 2016 13:10
por fladimir
Vlw Daniel

obrigado.