Página 11 de 21
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 16:01
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.
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 16:49
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!
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 17:09
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
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 17:22
por Marcelo.1505
Segue.
O Emulador esta Online, e aguardando comandos. E a consulta é feita!
Deu o erro anexo.
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 17:26
por alaminojunior
Não ví erro algum.
Ele carregou a DLL, emitiu o comando e recebeu a resposta, conforme exibida no alert !
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 17:31
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!
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 17:42
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!
SAT-Fiscal a mistica está desvendada.
Enviado: 21 Set 2015 17:45
por alaminojunior
Agora já não sei dizer.
SAT-Fiscal a mistica está desvendada.
Enviado: 22 Set 2015 12:18
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
SAT-Fiscal a mistica está desvendada.
Enviado: 22 Set 2015 12:23
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.
SAT-Fiscal a mistica está desvendada.
Enviado: 22 Set 2015 17:29
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
SAT-Fiscal a mistica está desvendada.
Enviado: 23 Set 2015 16:14
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
SAT-Fiscal a mistica está desvendada.
Enviado: 08 Out 2015 18:17
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.
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Nov 2015 15:47
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?
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Nov 2015 16:08
por Ana Julia
Pessoal
Como usar esta função HB_Pointer2String no xbase++?