Oi, Fladimir
Depois de um largo lapso de tempo, voltei a mexer nesta rotina de acesso aos portais da NFE, que você desenvolveu, mas notei que eles não mais permitem passar a chave da NFE, restando-nos digitá-la ou passar por <Control> + "C", e depois <Control> + "V" já dentro do site das Receitas Federal ou Estaduais.
Assim, alterei um pouco a rotina que iniciamos neste tópico e que exponho novamente abaixo, para quem quiser aproveitá-la também, pois está funcionando bem até quando fechamos o navegador IE e que deveria voltar a rotina Main() que a chamou, quando apresenta a seguinte mensagem de erro fatal:
Código: Selecionar todos
"Error Base/1005 Classe NIL has no property VALUE
Arguments: < [1] = Type U [2] = Type C Val:
314161671810101010101010010101010101001 >"
Obs: A chave informada acima é fictícia.
Como podem ver no fonte, a pretensão seria voltar com outra chave e outro portal estadual, por exemplo.
Quando a rotina funcionar sem erro, minha ideia é pegar a chave das NFE e o Estado Emissor, no caso "SP", do arquivos de NFE emitidas e passá-los ao sistema.
Código: Selecionar todos
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// NFe_ChecaPortal - Função para checar o numero do Danfe nos portais Nacional ou Estado de São Paulo/Minas Gerais
/// Esta função faz com que abra as paginas dos portais de consulta das NFes e preencha os campos das chaves automaticamente.
/// Como os Portais não estão preenchendo com a chave da NFE passamos a mesma com "Control C" e digitamos somente o Capcha
///
/// Parâmetros: f_cChave > Numero da chave (Danfe) no formato caracter
/// f_nPortal > Portal a abrir - Formato Numerico
/// 1- Portal Nacional
/// 2- Portal do estado de São Paulo
/// 3- Portal do Estado de Minas Gerais
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
FUNCTION main() // os parâmetros serão informados aqui
local chave1 := " " // futuramente entrará como parâmetro da rotina
local portal := 1 // idem idem
do while .t.
set cursor on
nfe_checaportal(chave1,portal)
inkey(0)
if lastkey() == 27
exit
endif
enddo
setmode(25,80)
set cursor off
return
FUNCTION NFe_ChecaPortal(f_cChave, f_nPortal)
/// Se quiser testar chaves válidas, digitá-las nos portais, esta rotina está testando apenas o acesso aos mesmos
Local oOle, oOleDoc := Array(2)
local chave1 := f_cchave // para o portal Nacional
local chave2 := "35130600255889000158550040000376731016519440" // chave inválida - colocar uma chave válida para o Portal NFE de SP se quiser testar NFE daquela UF
local chave3 := "31140914314050000581550030000933581950935886" // chave inválida - colocar uma chave válida para o Portal NFE de MG se quiser testar NFE daquela UF
if f_nPortal = NIL
f_nPortal := 1
endif
If f_cChave = NIL
f_cChave := ""
else
@ 24,0
@ 24, 0 say "Nacional= 1, SP = 2 MG = 3"
@ 05,10 say "Chave1: " get chave1
@ 06,10 say "Chave2: " get chave2
@ 07,10 say "Chave3: " get chave3
clear gets
@ 10,10 say "Portal: " get f_nportal pict "9" valid str(f_nportal,1) $ "123"
read
if f_nportal == 1
f_cchave := chave1
elseif f_nportal == 2
f_cchave := chave2
else
f_cchave := chave3
endif
@ 15,10 say "Chave.: " get f_cchave
read
@ 24,0
Endif
oOle := CreateObject("InternetExplorer.Application")
oOle:Visible := .t. // Apresenta o Browser
oOle:ToolBar := .f. // Desativa a barra de ferramentas
oOle:StatusBar := .f. // Desativa a barra de status
oOle:MenuBar := .f. // desativa a barra de menu
If f_nPortal == 1 // Nacional
oOle:Navigate2("http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=")
Elseif f_nPortal == 2 // SP
oOle:Navigate("https://nfe.fazenda.sp.gov.br/ConsultaNFe/consulta/publica/ConsultarNFe.aspx")
else // MG
oOle:Navigate("http://nfe.fazenda.mg.gov.br/consulta/Welcome.do;jsessionid=357F8A586FA7EFA4849563070E68289A.nfenode211")
EndIf
WHILE oOle:Busy
inkey(.5)
END
If f_nPortal == 1
oOle := oOle:Document()
oOle:All:Item("ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta",0):Value := f_cChave
Else
oOle := oOle:Document()
oOle:All:Item("ctl00$ContentMain$tbxIdNFe"):Value := f_cChave
EndIf
setmode(25,80)
set cursor on
return .t.