SAT-Fiscal a mistica está desvendada.

Fórum sobre desenvolvimento de software para atender as exigências da legislação fiscal e tributária (NFe, NFCe, NFSe, SPEED, Projeto ACBr, TEF, ECD, EFD, etc.)

Moderador: Moderadores

Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

SAT-Fiscal a mistica está desvendada.

Mensagem por alaminojunior »

Código: Selecionar todos

Por ser modo Console? Não consigo enxergar onde esta o meu erro... Sorry
Funciona em modo console perfeitamente.

Mande para mim uma rotina simples, contendo apenas consulta de status do sat, que vou testar aqui.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Marcelo.1505
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 16 Set 2015 10:16
Localização: Valinhos

SAT-Fiscal a mistica está desvendada.

Mensagem por Marcelo.1505 »

Legal...

Deixei somente a consulta do SAT.

Segue código, lembrando que esta utilizando como base as funções do rochinha!

Código: Selecionar todos

#include "hmg.ch"
#include "dll.ch"

function Main()
 PUBLIC hACBrDLL
 cPath := cFilePath( GetModuleFileName( GetInstance() ) ) // Pega o caminho exato onde se encontra o sistema.

  ? "SAT.dll carregada",;
 hACBrDLL := LoadLibrary( cPath+"SAT.DLL" )

 ? "ConsultarSAT",;
 ConsultarSAT( Random( 999999 ) ) //[3]

 return nil


Function ConsultarSAT( nSessionRandom )
 cString := SATConsultar( nSessionRandom )
 return StringToArray( cString, "|" ) 

DLL32 FUNCTION SATConsultar( nSessionRandon AS _INT ) AS STRING PASCAL FROM "ConsultarSAT" LIB hACBrDLL



Function Random( nMaximo )
 static nRandom
 local nTemporal
 nMaximo = if( nMaximo == NIL, 65535, nMaximo )
 if nRandom == NIL
   nRandom = seconds()
 endif
 nTemporal = ( nRandom * seconds() ) % ( nMaximo + 1 )
 nTemporal = if( nTemporal < 1, 1, nTemporal )
 nRandom = nTemporal + seconds()
 RETURN int( nTemporal )


function StringToArray( cString, cSeparator ) 
 LOCAL nPos 
 LOCAL aString := {} 
 DEFAULT cSeparator := ";" 
 cString := ALLTRIM( cString ) + cSeparator 
 DO WHILE .T. 
   nPos := AT( cSeparator, cString ) 
   IF nPos = 0 
    EXIT 
   ENDIF 
   AADD( aString, SUBSTR( cString, 1, nPos-1 ) ) 
   cString := SUBSTR( cString, nPos+1 ) 
 ENDDO 
 RETURN ( aString ) 
Tem tbm o DLL.CH que é utilizado.

Código: Selecionar todos

#ifndef _DLL_CH
#define _DLL_CH

#define VOID    0
#define BYTE    1
#define CHAR    2
#define WORD    3
#define INT     4
#define BOOL    5
#define HDC     6
#define LONG    7
#define STRING  8
#define LPSTR   9
#define PTR    10

#xcommand DLL FUNCTION <FuncName>( [ <uParam1> AS <type1> ] ;
                                   [, <uParamN> AS <typeN> ] ) ;
             AS <return> [<pascal:PASCAL>] LIB <*DllName*> ;
       => ;
          function <FuncName>( [<uParam1>] [,<uParamN>] ) ;;
             local hDLL := LoadLibrary( <(DllName)> ) ;;
             local cFarProc ;;
             local uResult ;;
             if hDLL != 0 ;;
                cFarProc = GetProcAddress( hDLL, <(FuncName)>, [<.pascal.>], <return>, <type1> [,<typeN>] ) ;;
                uResult = CallDLL( cFarProc, [<uParam1>] [,<uParamN>] ) ;;
                FreeLibrary( hDLL ) ;;
             end ;;
          return uResult

#endif


#xcommand DLL32 [<static:STATIC>] FUNCTION <FuncName>( [ <uParam1> AS <type1> ] ;
                           [, <uParamN> AS <typeN> ] ) ;
      AS <return> [<pascal:PASCAL>] [ FROM <SymName> ] LIB <*DllName*> ;
   => ;
     [<static>] function <FuncName>( [NOREF(<uParam1>)] [,NOREF(<uParamN>)] ) ;;
      local hDLL := If( ValType( <DllName> ) == "N", <DllName>, LoadLib32( <(DllName)> ) ) ;;
      local uResult ;;
      local cFarProc ;;
      if Abs( hDLL ) <= 32 ;;
        MsgAlert( "Error code: " + LTrim( Str( hDLL ) ) + " loading " + <DllName> ) ;;
      else ;;
        cFarProc = GetProc32( hDLL,;
        If( [ Empty( <SymName> ) == ] .t., <(FuncName)>, <SymName> ),;
        [<.pascal.>], <return> [,<type1>] [,<typeN>] ) ;;
        uResult = CallDLL32( cFarProc [,<uParam1>] [,<uParamN>] ) ;;
        If( ValType( <DllName> ) == "N",, FreeLib32( hDLL ) ) ;;
      end ;;
     return uResult
E o erro apresentado após compilar na HMG Roberto Lopez é esse, conforme o error.log:
hbmk2: Processando arquivo de configura‡Æo: C:\hmg.3.0.35\harbour\bin\hbmk.cfg
hbmk2: Harbour: Compilando m¢dulos...
Harbour 2.0.0 (Rev. 13372)
Copyright (c) 1999-2010, http://www.harbour-project.org/

J:/HMG/SAT/SAT.prg(22) Error E0030 Syntax error "syntax error at '('"

1 error

No code generated.
hbmk2: Erro: Executando o compilador Harbour (interno): 1
(C:\hmg.3.0.35\harbour\bin\harbour.exe) -n2 J:/HMG/SAT/SAT.prg /q -o.hbmk\win\mingw\ -iC:/hmg.3.0.35/harbour/include -iJ:/HMG/SAT -iC:/hmg.3.0.35//include -iJ:/HMG/SAT -iJ:/HMG/SAT/


O Erro esta na função DLL32 ou algo relacionado a ela, ou "meu compilador não a entende"?

Obrigado!
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

SAT-Fiscal a mistica está desvendada.

Mensagem por alaminojunior »

Pegue o arquivo em anexo e renomeie para exe, e execute na sua máquina.
Nos retorne o resultado.

Código: Selecionar todos

FUNCTION sat_status
Local r:=  HB_RandomInt(999999) , xRet, cSessao, cMensagem, cResp
SetMode(25,80)
h1:= LoadLibrary("SAT.DLL")
if h1 = 0
   alert( 'dll não carregada !' )
   return .f.
endif	
ret:= dllcall(h1,32,"ConsultarSAT",r)
xRet:= HB_Pointer2String(ret,100)
cSessao:= left(xRet,6)
cResp:= subs(xRet,8,5)
cMensagem:= subs(xRet,14)
if cResp = '08000'
   tone(196,5)
   tone(296,5)
   tone(396,5)
	alert( ValtoPrg(xRet) )
else
   alert( cResp )	
endif
freelibrary(h1)
return
Anexos
sat4.zip.txt
(416.02 KiB) Baixado 129 vezes
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Marcelo.1505
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 16 Set 2015 10:16
Localização: Valinhos

SAT-Fiscal a mistica está desvendada.

Mensagem por Marcelo.1505 »

Segue.
O Emulador esta Online, e aguardando comandos. E a consulta é feita!
Deu o erro anexo.
Anexos
erro sat.png
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

SAT-Fiscal a mistica está desvendada.

Mensagem por alaminojunior »

Não ví erro algum.
Ele carregou a DLL, emitiu o comando e recebeu a resposta, conforme exibida no alert !
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Marcelo.1505
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 16 Set 2015 10:16
Localização: Valinhos

SAT-Fiscal a mistica está desvendada.

Mensagem por Marcelo.1505 »

Exato, me perdoe!
Não havia me atendado no Emulador que respondeu perfeitamente!

Vou compilar aqui em minha maquina o seu código e posto o resultado!
Marcelo.1505
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 16 Set 2015 10:16
Localização: Valinhos

SAT-Fiscal a mistica está desvendada.

Mensagem por Marcelo.1505 »

Compilei seu código aqui, e... da erro.
Baixei novamente a SAT.DLL e troquei pra ver, e continua o mesmo erro. E não consulta nada!
Então pode ser algo na IDE que estou usando? Erro meu? Vide erro abaixo!
Anexos
erro sat.png
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

SAT-Fiscal a mistica está desvendada.

Mensagem por alaminojunior »

Agora já não sei dizer.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Marcelo.1505
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 16 Set 2015 10:16
Localização: Valinhos

SAT-Fiscal a mistica está desvendada.

Mensagem por Marcelo.1505 »

Ainda estou na Luta aqui.

Instalei a HMG em outro micro e dá o mesmo erro.
Baixei o Harbour Nightly e vou compilar nele. Alaminojunior, vc compilou o exemplo em qual versão?

Obrigado
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

SAT-Fiscal a mistica está desvendada.

Mensagem por alaminojunior »

Deve ser algum conflito com a Minigui.
Pois pelo visto, a transação SAT ocorre normalmente, o problema está no decorrer.

Eu uso xHarbour 1.2.3 com HwGUI

Experimente compilar com o Harbour em modo console.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Marcelo.1505
Usuário Nível 1
Usuário Nível 1
Mensagens: 12
Registrado em: 16 Set 2015 10:16
Localização: Valinhos

SAT-Fiscal a mistica está desvendada.

Mensagem por Marcelo.1505 »

Finalmente consegui realizar a consulta!
Após tentativas com a HMG Roberto Lopez 3.0.35 e 3.0.46, A Minigui Extended, e Harbour 2.0 (puro).
Funcionou compilando diretamente pelo prompt, utilizando harbour 3.2.
Porém, trocando a função LoadLibrary por hb_LibLoad e tbm DllCall por hb_DynCall.
A função hb_libload não retorna um numero inteiro e sim "0x003F416C"

Esse é só o começo da Jornada!! Mas agradeço imensamente aos colegas que me ajudaram.

Código que compilou e comunicou com o Emulador, versão 2.8.8 é esse:

Código: Selecionar todos

#include "hbwin.ch"
#include "hbdyn.ch"

function main()

ConsultaSAT()
@ 23,01 SAY "FIM DA EXECUCAO"
INKEY(0)

FUNCTION CONSULTASAT()
Local r:= HB_RandomInt(999999) , xRet, cSessao, cMensagem, cResp
SetMode(25,80)
h1:= HB_Libload("C:\SAT\SAT.DLL")

@ 01,01 SAY H1
INKEY(1)

ret:= HB_DynCall( {"ConsultarSAT",h1},r)

@ 02,01 SAY ret
INKEY(1)

xRet     := HB_Pointer2String(ret,100)
cSessao  := left(xRet,6)
cResp    := subs(xRet,8,5)
cMensagem:= subs(xRet,14)

@ 03,01 SAY XRET

if cResp = '08000'
 tone(196,5)
 tone(296,5)
 tone(396,5)
 alert( ValtoPrg(xRet) )
else
 alert( cResp )
endif
hb_LibFree(h1)
return
Abraços
julianocf
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 11 Ago 2011 14:52
Localização: Ubatuba SP

SAT-Fiscal a mistica está desvendada.

Mensagem por julianocf »

Rochinha e amigos, boa tarde!

Antes de mais nada obrigado pelas contribuições, sempre foram de extrema ajuda.

Agora, alguém conseguiu gerar a AssinaturaAC (signAC) usando e-CNPJ A3? Com o A1 eu consigo gerar usando o Openssl, ainda não pude testar, mas gera a cadeia de 344 caracteres corretamente.

Obrigado desde já,
Juliano
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por rochinha »

Amiguinhos,

É com grande satisfação que vejo a semente plantada a alguns anos ainda vertendo frutos.

Devo lembra-lhes que uso HARBOUR tradicional e FIVEWIN como interface. Portanto fiquem atentos aos comandos e funções passados e coloquem as similares de seus respectivos Harbour e (x)harbour.

Estou entrando na pegada do SAT novamente para desvendar mais...mistérios.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Ana Julia
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 28 Nov 2015 15:00
Localização: São Paulo/Sp

SAT-Fiscal a mistica está desvendada.

Mensagem por Ana Julia »

Pessoal

Olhei todo o forum e consegui implementar conforme os anexos pegando exemplos de vocês.

Porém estou com o erro em anexo de compilação.
Foi implementada no dll.ch a utilização da função DLL32

Será que estou indo pelo caminho certo?
Não sei mais o que fazer.

Poderiam me ajudar?
Anexos
dllch.jpg
compilador.jpg
fonte.jpg
Ana Julia
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 28 Nov 2015 15:00
Localização: São Paulo/Sp

SAT-Fiscal a mistica está desvendada.

Mensagem por Ana Julia »

Pessoal

Como usar esta função HB_Pointer2String no xbase++?
Responder