Página 1 de 1

Problemas na Consulta Status MDFe

Enviado: 04 Jan 2018 22:18
por alaminojunior
Boa noite caros !

Estou tentando implementar a MDFe em meu sistema.
Estou usando o pacote da classe HBNFe criada pelos nossos colegas aqui do fórum, mais precisamente com a grande ajuda do Leonardo Sygecom.

Já conferi URL´s, tudo alinhado segundo a SEFAZ-RS.
Atualizados xsd´s.
Cadeias de certificados atualizadas conforme SEFAZ-RS.

Segue exemplo do xml criado para consulta, que comparei com o criado pelo ACBr (que funciona) e estão idênticos.
Certificado A1 testado e funcionando, pois com ACBr funciona, e consultas de status da NFe também retornam OK !

Código: Selecionar todos

<?xml version="1.0" encoding="UTF-8"?><soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"><soap12:Header><mdfeCabecMsg xmlns="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico"><cUF>35</cUF><versaoDados>3.00</versaoDados></mdfeCabecMsg></soap12:Header><soap12:Body><mdfeDadosMsg xmlns="http://www.portalfiscal.inf.br/mdfe/wsdl/MDFeStatusServico"><consStatServMDFe xmlns="http://www.portalfiscal.inf.br/mdfe" versao="3.00"><tpAmb>2</tpAmb><xServ>STATUS</xServ></consStatServMDFe></mdfeDadosMsg></soap12:Body></soap12:Envelope>
Trecho do código que faz a macumba toda.

Código: Selecionar todos

TRY
   oServerWS:= xhb_CreateObject( _MSXML2_ServerXMLHTTP )
   oServerWS:setOption( 3, 'CURRENT_USER\MY\'+cCERT )
   oServerWS:open('POST', cUrlWS, .F.)                        
   oServerWS:setRequestHeader('SOAPAction', cSoap )
   oServerWS:setRequestHeader('Content-Type','application/soap+xml; charset=utf-8')
CATCH
   aRETORNO['MSG']:='Não foi possível inicializar a conexão do webservice'
   RETURN(aRETORNO)
END
IF oServerWS=NIL
   aRETORNO['MSG']:='Não foi possível inicializar o objeto de conexão do webservice'
   RETURN(aRETORNO)
ENDIF
TRY
   oDOMDoc:= xhb_CreateObject( _MSXML2_DOMDocument )
   oDOMDoc:async = .F.
   oDOMDoc:validateOnParse  = .T.
   oDOMDoc:resolveExternals := .F.
   oDOMDoc:preserveWhiteSpace = .T.
   oDOMDoc:LoadXML(cXML)
CATCH
   aRETORNO['MSG']:='Não foi possível carregar o documento XML'
   RETURN(aRETORNO)
END   
IF oDOMDoc:parseError:errorCode <> 0
   aRETORNO['MSG']:='Não foi possível carregar o documento pois ele não corresponde ao seu Schema'+HB_OsNewLine()+;
                    ' Linha: '+STR(oDOMDoc:parseError:line)                                       +HB_OsNewLine()+;
                    ' Caractere na linha: '+STR(oDOMDoc:parseError:linepos)                       +HB_OsNewLine()+;
                    ' Causa do erro: '+oDOMDoc:parseError:reason                                  +HB_OsNewLine()+;
                    ' Code: '+STR(oDOMDoc:parseError:errorCode)
  RETURN(aRETORNO)
ENDIF
TRY
  oServerWS:send(oDOMDoc:xml)
CATCH e
   aRETORNO['MSG']:='Falha: Não foi possível conectar-se ao servidor do SEFAZ, Servidor inativou ou inoperante.'+HB_OsNewLine()+;
                    'Error: '+Transform(e:GenCode,nil)                                                      +';'+HB_OsNewLine()+;
                    'SubC: '+Transform(e:SubCode,nil)                                                       +';'+HB_OsNewLine()+;
                    'OSCode: '+Transform(e:OsCode,nil)                                                      +';'+HB_OsNewLine()+;
                    'SubSystem: '+Transform(e:SubSystem,nil)                                                +';'+HB_OsNewLine()+;
                    'Mensagem: '+e:Description
  RETURN(aRETORNO)
END
DO WHILE oServerWS:readyState <> 4
   millisec(500)
ENDDO
aRETORNO['MSG']:='Comunicação com o webservice finalizada com sucesso.'
aRETORNO['STATUS']:=.T.
aRETORNO['XML']:= oServerWS:responseText
RETURN(aRETORNO)
Debuguei esse trecho, e ele vai até o fim, e me retorna:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>404 - File or directory not found.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
<div class="content-container"><fieldset>
<h2>404 - File or directory not found.</h2>
<h3>The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable.</h3>
</fieldset></div>
</div>
</body>
</html>
Sinceramente, não sei mais para que lado correr !
Conto com a ajuda dos senhores.
Obrigado !

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 00:14
por JoséQuintas
Está pronto aqui, confirme.

https://github.com/JoseQuintas/sefazclass

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 00:26
por alaminojunior
Oi Quintas !

Nesse meio tempo, descobri que apesar da URL estar correta (no banco) eu estava passando a mesma com espaços como parâmetro.
Resolvido !

Confesso que baixei a SefazClass, mas como utilizo xHarbour, encontrei dificuldades com alguns erros que retornaram na compilação do exemplo de teste.
Prometo que irei testa-la melhor assim que apagar um incêndio aqui.

Muito obrigado.

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 09:32
por JoséQuintas
acabo de fazer ajustes pra compilar no XHarbour.
Um dos erros foi a limitação do FOR EACH, que no XHarbour não aceitou expressão: FOR EACH x IN a + b

Vou ser bem claro quanto ao win_OleCreateObject():

O mundo do XHarbour é uma merd. não existe padrão.
O XHarbour tinha a CreateObject(), mas não existe mais, trocaram por uma função que retorna NIL.
Cada LIB gráfica criou uma solução diferente com nome diferente.
Então, para essa função, cada um vai ter que descobrir o que usar no se conjunto de XHarbour+LIB.

No Fivewin, por exemplo, é CreateObject() mesmo.
Parece até de propósito, pra obrigar a usar o fivewin no XHarbour.
Deveria ser corrigido no XHarbour... mas como ninguém se importa com essa correção... é cada um descobrir o que usar no lugar.

Quanto à compilação com XHarbour, acabo de testar e tudo ok, só os alertas de uso perigoso, mas compila normal.
Vão ser resolvidos ao remover essa função, e cada um que resolva do jeito que deve ser com a LIB que usar.
A objetivo da SefazClass é pra usar Sefaz, e não pra tentar consertar o XHarbour !!!!
hbmk2 sefazclass.hbp -w0 -es0 -xhb
Warning W0001 Redefinition or duplicate definition of #define __ARCH32BIT__
Warning W8075 source\\ze_xharbour.prg 395: Suspicious pointer conversion in function GetParams
Warning W8075 source\\ze_xharbour.prg 404: Suspicious pointer conversion in function GetParams
Warning W8075 source\\ze_xharbour.prg 493: Suspicious pointer conversion in function GetParams
Warning W8075 source\\ze_xharbour.prg 500: Suspicious pointer conversion in function GetParams
Warning W8075 source\\ze_xharbour.prg 1051: Suspicious pointer conversion in function HB_FUN_CREATEOLEOBJECT
Warning W8075 source\\ze_xharbour.prg 1070: Suspicious pointer conversion in function HB_FUN_CREATEOLEOBJECT
Warning W8075 source\\ze_xharbour.prg 1108: Suspicious pointer conversion in function HB_FUN_GETOLEOBJECT
Warning W8075 source\\ze_xharbour.prg 1128: Suspicious pointer conversion in function HB_FUN_GETOLEOBJECT
Warning W8075 source\\ze_xharbour.prg 1255: Suspicious pointer conversion in function HB_FUN_TOLEAUTOX_ONERROR
Warning W8075 source\\ze_xharbour.prg 1273: Suspicious pointer conversion in function HB_FUN_TOLEAUTOX_ONERROR

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 09:37
por JoséQuintas
dir \xharbour\addons\sefazclass /s/b

d:\xharbour\addons\sefazclass\lib
d:\xharbour\addons\sefazclass\sefazclass.hbx
d:\xharbour\addons\sefazclass\lib\win
d:\xharbour\addons\sefazclass\lib\win\bcc
d:\xharbour\addons\sefazclass\lib\win\mingw
d:\xharbour\addons\sefazclass\lib\win\bcc\sefazclass.lib
d:\xharbour\addons\sefazclass\lib\win\mingw\libsefazclass.a

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 12:33
por alaminojunior
Bom dia !

Quintas, agradeço todo o esforço. Acho que me expressei mal.
Não é minha intenção ajustar o monje ao hábito rsrsrsrs
O que acontece é que por conta dessas incongruências, não conseguia compilar o exemplo.
Os colegas podem dizer o que quiserem sobre supostas deficiências do xHarbour, o que até entendo e concordo em parte. Porém, nos últimos quinze anos aproximadamente, ele vem me ajudando a manter o sustento da família e da empresa. Me atende no que me proponho a fazer. Me acostumei com ele, e estou muito a vontade.
O Harbour atual com seus penduricalhos (à exemplo do xH) pode até ser a nona maravilha do multiverso, e, apesar de não ter me dedicado muito ainda, me senti com dificuldades na adaptação à ele.

Mas ... devaneios a parte ...

Resolvi fazer mais umas tentativas aqui, compilando o test.prg que acompanha o pacote, em modo console, puro, sem mais nada.

Resumo da ópera:
Coloquei todos os prg´s, ch´s dentro de uma pasta exclusiva para rodar o teste.
Com HbMake fui montando o script de compilação.
Foi preciso juntar as lib´s HaruPdf e Zebra.
Deu um erro conforme uma das imagens anexas, relacionado ao trecho:
Primeira tentativa de compilação
Primeira tentativa de compilação

Código: Selecionar todos

FUNCTION JPEGImage()
#pragma __binarystreaminclude "jpatecnologia.jpg"        | RETURN %s
Como a chamada da função JPEGImage já estava comentada mais acima, comentei o trecho e sigamos em frente ...
Mas confesso que sou limitado e não entendi para que serve esse código.

Bom ...
Tudo relacionado, rodei o script ...
Algumas funções não encontradas, pois como você já bem citou, os nomes são diferentes de xH para H.
Feitos os ajustes, executável gerado e botei para executar o famigerado 'test.exe'
Selecionado o certificado.
Selecionada a UF.
Acionada Consulta Status NFE e temos o retorno conforme a imagem.
Sem título1.png
Este retorno, já obtive anos atrás em tentativa de rodar este teste.

O quê fazer ?

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 15:10
por JoséQuintas
Exato !!!!!
Esse é o ponto que mencionei.
A solução em XHarbour não é única, depende de que ferramentas está usando.
Em Visual Basic 6:

oObject := CreateObject( "MSXML2.ServerXMLHTTP" )
Em Harbour 3.4:

oObject := win_OleCreateObject( "MSXML2.ServerXMLHTTP" )
Em XHarbour de 2008:

oObject := CreateObject( "MSXML2.ServerXMLHTTP" )
Em XHarbour sozinho, ou HMG3, ou HMG Extended, ou HWGUI, ou OOHG:

???????????????????????????????????????????????????????????????

Questão a resolver: CADÊ O CREATEOBJECT DO XHARBOUR, ou o que usar no lugar.
Fonte atual do XHarbour oficial:

FUNCTION CreateObject()
RETURN NIL
Se usar função errada, dá esse erro que mencionou.
Qual é a correta?
Parece que na fivewin tem CreateObject(), e nas outras TOleAuto() ou xhb_CreateObject(), ou sei lá qual.

Vai ter que testar as opções disponíveis pra ver qual funciona.
A questão não é existir ou não o nome da função, a questão é descobrir qual delas funciona pra OLE do Windows.
Parece que as LIBs fizeram uma bagunça quanto a funcionar OLE ou Activex, e misturaram os nomes pra isso.

Por isso eu disse: é uma merd. bastaria a função correta no XHarbour e pronto.

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 16:26
por alaminojunior
Prosseguindo ...
Questão a resolver: CADÊ O CREATEOBJECT DO XHARBOUR, ou o que usar no lugar.
Para poder usar a tal CreateObject(), adicionei o '\xharbour\source\rtl\win32ole.prg' ao pacote.
Essa CreateObject está nele.
Feito isso, o exemplo funcionou a contento e mostrou o resultado esperado.

Não funcionou antes pois eu havia pego este mesmo arquivo do pacote antigo da HBNFe (W32OLE.PRG).
Agora substituindo por esta versão mais recente e atualizada, deu certo.

Agora a pergunta que não quer calar: Se meu xHarbour foi compilado com esta versão mais recente, porquê ainda preciso adicionar esse win32ole.prg ??

Outra pergunta: MSXML5 e MSXML6
Qual a diferença entre os dois ?
Porquê algumas rotinas usam um ou outro ?

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 20:28
por JoséQuintas
Se meu xHarbour foi compilado com esta versão mais recente, porquê ainda preciso adicionar esse win32ole.prg ??
Porque o mais recente não tem, REMOVERAM.
Outra pergunta: MSXML5 e MSXML6
Qual a diferença entre os dois ?
No Windows a Microsoft PULOU a versão 5, e colocou apenas no Office.
A versão 5 é a única que trabalha com assinatura.
Já a versão 6 é a mais atual, então, melhor ela pra validar XML, por exemplo.

Já na comunicação SOAP, depende da versão do outro lado.... tem hora que obriga a usar 5, tem hora que é 6.
No caso do Harbour a seleção é automática.
No caso do XHarbour é confirmar se precisa indicar versão ou não (http.6.0, http.5.0, http)

Apenas comentário:
No final de tudo, o único recurso que a SefazClass usa é o CreateObject().
MSXML6 faz parte do Windows, Capicom é liberado pra instalação, e MSXML5 é o único "diferente".
O resto é só ficar escolhendo naquele porrilhão de opções de endereços de internet e de serviços do governo.

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 20:43
por alaminojunior
Porque o mais recente não tem, REMOVERAM.
Removeram não. Está lá sim.

Já ajustei aqui.
Porém, ao trocar as chamadas para a versão da W32OLE.PRG antiga, para a versão atual win32ole.prg, algumas rotinas da NFe do meu sistema retornam erro.
No teste da SefazClass, a versão recente funcionou pelo menos na consulta de status, e consulta de NFe.
No meu sistema funciona na consulta de status e consulta de NFe, porém no envio retorna erro.

Estou mantendo a versão antiga até descobrir o pepino.

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 21:00
por JoséQuintas
Porém, ao trocar as chamadas para a versão da W32OLE.PRG antiga, para a versão atual win32ole.prg, algumas rotinas da NFe do meu sistema retornam erro.
Isso sim é mistério.
Por acaso usava diferente?

Problemas na Consulta Status MDFe

Enviado: 05 Jan 2018 21:08
por alaminojunior
Por acaso usava diferente?
Tem diferenças.
A CreateObject recente tem por exemplo mais parâmetros do que a CreateObject antiga do pacote HBNFe.

Problemas na Consulta Status MDFe

Enviado: 06 Jan 2018 10:11
por JoséQuintas
Pequena correção do que mencionei aqui.
Não uso XHarbour, então acaba sendo normal passar informação errada sobre o que não uso.
São 3 versões OFICIAIS de CreateObject() e 3 versões de TOleAuto(), por enquanto.... rs

xHarbour:
xharbour2.png
MINIGUI:
xharbour3.png
xharbour4.png

Problemas na Consulta Status MDFe

Enviado: 06 Jan 2018 10:20
por JoséQuintas
Ou melhor... 4... Fivewin também tem.

Então, por enquanto, 4 versões diferentes no XHarbour de CreateObject() e TOleAuto().

O problema não ocorre ao usar CreateObject(), e sim, ao usar o objeto indicado em CreateObject()

o := CreateObject( "MSXML2.ServerXMLHttp" )
o:Send() -------------> o erro ocorre aqui

No Harbour, é win_OleCreateObject(), que faz parte do Harbour, e que funciona.
No XHarbour..... sei lá qual vai entrar na compilação de cada um, se vai entrar a que funciona ou a que não funciona.

Problemas na Consulta Status MDFe

Enviado: 06 Jan 2018 10:28
por JoséQuintas
Acrescentando:

Se nas LIBs tem aquelas coisas pra ficar compatível com Harbour/xHarbour, que converte win_OleCreateObject() pra função da LIB....
As LIBs acabam estragando o Harbour também....

Por isso digo sempre:

As LIBs deveriam ser direcionadas pra Harbour.
Mais fácil converter Harbour pra XHarbour do que o contrário.

No Harbour é win_OleCreateObject(), nome único.
As Libs só precisariam um #translate pra converter isso pra XHarbour.

Já o contrário..... converter qual do xHarbour pra Harbour?