SAT-Fiscal a mistica está desvendada.
Moderador: Moderadores
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
SAT-Fiscal a mistica está desvendada.
Amiguinhos,
Verifique a existencia de uma SAT.DLL na pasta de seu sistema e retire-a. Faça a chamada somente a SAT.DLL que estiver na pasta C:\SAT.
Baixe a ultima versão do emulador e copia as .DLLs(SAT e SAT_Equip) para C:\SAT e continue a trabalhar.
Mostre o seu código completo do tratamento com o SAT.
Verifique a existencia de uma SAT.DLL na pasta de seu sistema e retire-a. Faça a chamada somente a SAT.DLL que estiver na pasta C:\SAT.
Baixe a ultima versão do emulador e copia as .DLLs(SAT e SAT_Equip) para C:\SAT e continue a trabalhar.
Mostre o seu código completo do tratamento com o SAT.
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Diego Papale
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 11 Mar 2016 09:21
- Localização: Marília/SP
SAT-Fiscal a mistica está desvendada.
Boa tarde,
Retirei as dlls como pedido e não obtive sucesso... refiz as minhas rotinas pra simplificar, pois o código do meu sistema é muito extenso e contém várias classes... o erro de travamento na segunda tentativa de chamada das funções permanece.
Obs.: a função abaixo que define o número randômico eu fiz controlando por banco de dados e retorna corretamente o número tanto que funciona sempre na primeira vez, você pode substituir pela função citada aqui no fórum que não tem diferença nos resultados... eu controlo por banco de dados porque como já dito, este número não pode se repetir nas últimas 100 tentativas e além disso preciso fazer o controle por SAT, pois existem clientes que possuem mais de um.
Retirei as dlls como pedido e não obtive sucesso... refiz as minhas rotinas pra simplificar, pois o código do meu sistema é muito extenso e contém várias classes... o erro de travamento na segunda tentativa de chamada das funções permanece.
Obs.: a função abaixo que define o número randômico eu fiz controlando por banco de dados e retorna corretamente o número tanto que funciona sempre na primeira vez, você pode substituir pela função citada aqui no fórum que não tem diferença nos resultados... eu controlo por banco de dados porque como já dito, este número não pode se repetir nas últimas 100 tentativas e além disso preciso fazer o controle por SAT, pois existem clientes que possuem mais de um.
Código: Selecionar todos
#include "Fivewin.ch"
#include "\sis\fsql901\include\tip.ch"
STATIC hLib
* ===================================================================
CLASS SAT
* ===================================================================
METHOD New() CONSTRUCTOR
ENDCLASS
* ===================================================================
METHOD New() CLASS SAT
* ===================================================================
local nSerie := 123456789 // Número de série do equipamento
local aRet := {}
local cRet
hLib := LoadLibrary("C:\SAT\SAT.dll")
TRY
errorsys()
cRet := SATCONSULTAR( RandomSAT( nSerie ) )
if !Empty(cRet)
aRet := HB_ATOKENS(cRet, [|])
If aRet[2] == '08000' // Sat em operação
Msg(Alltrim(aRet[3]))
else
break
endif
else
break
endif
CATCH
Msg("SAT não está em operação.")
END
FreeLibrary(hLib)
Return Self
* ========================================================================
Function RandomSAT( nSerie )
* ========================================================================
local nRandom := HB_RandomInt(0, 899999) // este valor acrescido 100 mil nunca vai passar de 999999
local aRet := array(2)
/* Abre arquivo que será utilizado para conferir a sessão */
sessao_sat():fast()
sessao_sat():Exec("SELECT * FROM sessao_sat WHERE numserie = " + Alltrim(str(nSerie)))
do WHILE .T.
nRandom += 100000 // sempre adiciono 100 mil porque precisa ter 6 digitos e
// se gerar um numero menor que 100 mil terá zeros a esquerda
// e no momento de eu passar p/ SAT vai desconsiderar e ficar errado
// não tem como jogar com strzero porque ficaria com menos de 6 dig.
if sessao_sat():reccount() > 0
if sessao_sat():Exec("SELECT numsessao FROM sessao_sat WHERE numsessao = " + clip2sql(nRandom) + " AND " +;
"numserie=" + Alltrim(str(nSerie)))
nRandom := HB_RandomInt(0, 899999) // zera variável quando tem um número igual
else
// retorna o menor código e o total de regitros
aRet := Retsql("SELECT COUNT(*), MIN(recno_) FROM sessao_sat WHERE numsessao=" + Alltrim(str(nSerie)), 2)
if aRet[1] >= 100
Query("DELETE FROM sessao_sat WHERE recno_ = " + Alltrim(str(aRet[2]))) // exclui código mais antigo
endif
Query("INSERT INTO sessao_sat(numsessao, numserie) VALUES("+Alltrim(str(nRandom))+"," +;
Alltrim(str(nSerie)) + ")") // adiciona novo código
exit
endif
else
// adiciona código inicial
Query("INSERT INTO sessao_sat(numsessao, numserie) VALUES("+Alltrim(str(nRandom))+"," +;
Alltrim(str(nSerie)) + ")")
exit
endif
Enddo
RETURN nRandom
DLL32 FUNCTION SATConsultar( numeroSessao AS _INT ) AS STRING FROM "ConsultarSAT" LIB hLib
xHarbour 1.2.1 / Borland C++ Compiler 5.5 / MySQL
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
SAT-Fiscal a mistica está desvendada.
Amiguinhos,
Diego Papale
Mude a linha:
Para:
No caso de xHarbour, muitos amigos se deram bem usando as funções CallDLL().
Verifique.
Diego Papale
Mude a linha:
Código: Selecionar todos
DLL32 FUNCTION SATConsultar( numeroSessao AS _INT ) AS STRING FROM "ConsultarSAT" LIB hLib
Código: Selecionar todos
DLL32 FUNCTION SATConsultar( numeroSessao AS _INT ) AS STRING PASCAL FROM "ConsultarSAT" LIB hLib
Verifique.
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Diego Papale
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 11 Mar 2016 09:21
- Localização: Marília/SP
SAT-Fiscal a mistica está desvendada.
Bom dia, já tinha utilizado o retorno STRING PASCAL e desta forma o sistema trava logo na primeira tentativa de chamada da função, porém no emulador o processo parece estar concluído, no painel do emulador mostra como se a consulta tivesse sido realizada com sucesso, utilizando somente STRING eu consigo o resultado satisfatório na primeira vez mas na segunda o sistema trava no retorno, mais uma vez lembrando no emulador parece estar ok... Com relação ao uso da função CallDll(), eu fiz na seguinte sintaxe:
... Onde o hLib foi carregado a dll da pasta c:\sat e o nSessao é um numero que não se repete com exatamente 6 dígitos, está correta essa sintaxe?
Obs.: Não funcionou desta forma, causa travamento e nem chega a dar sinal no emulador.
Obrigado!
Código: Selecionar todos
pFunc := GetProcAddress( hLib, "ConsultarSAT" )
cRet := CallDll( pFunc, nSessao )Obs.: Não funcionou desta forma, causa travamento e nem chega a dar sinal no emulador.
Obrigado!
xHarbour 1.2.1 / Borland C++ Compiler 5.5 / MySQL
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
SAT-Fiscal a mistica está desvendada.
Amiguinhos,
Puxa que transtorno né? Você já tentou desinstalar o JAVA e reinstalar novamente?
Quanto ao numero de sessão ter seis dígitos ele precisa mesmo ter 6 ou seja, 100000 ou maior, não serve 001234 mesmo que seja em string.
Puxa que transtorno né? Você já tentou desinstalar o JAVA e reinstalar novamente?
Quanto ao numero de sessão ter seis dígitos ele precisa mesmo ter 6 ou seja, 100000 ou maior, não serve 001234 mesmo que seja em string.
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
Diego Papale
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 11 Mar 2016 09:21
- Localização: Marília/SP
SAT-Fiscal a mistica está desvendada.
Obrigado pelas respostas rochinha,
Já conferi diversas vezes a versão do java... tudo parece estar correto tanto que funciona na primeira chamada das minhas funções, talvez o problema seja somente no emulador.
Já conferi diversas vezes a versão do java... tudo parece estar correto tanto que funciona na primeira chamada das minhas funções, talvez o problema seja somente no emulador.
xHarbour 1.2.1 / Borland C++ Compiler 5.5 / MySQL
-
Diego Papale
- Usuário Nível 1

- Mensagens: 9
- Registrado em: 11 Mar 2016 09:21
- Localização: Marília/SP
SAT-Fiscal a mistica está desvendada.
Para outros usuários que futuramente venham a ter problemas como os que citei, compramos um equipamento para homologação aqui na empresa e não constatamos nenhum erro, funcionou perfeitamente, portanto o emulador é útil para o desenvolvimento mas ocorrem muitos erros quando utilizado com xHarbour, o melhor na minha opinião é utilizar um equipamento para testes finais.
xHarbour 1.2.1 / Borland C++ Compiler 5.5 / MySQL
SAT-Fiscal a mistica está desvendada.
Boa noite a todos
Desde já agradeço imensamente pela ajuda que tive no desenvolvimento do meu SAT.
Estava usando normalmente as chamadas as rotinas do SAT em C aqui postada até que atualizei o fivewin para versão 16.01, xharbour para 1.2.3 e Embarcadero C++ 7.00 for win 32. Agora quando faço chamada por exemplo: Retorno:=SATCONSULTAR(Random()), entra uma mensagem de erro do Windows "Borland Windows Custom Control Library parou de funcionar. Um problema fez com que o programa parasse de funcionar corretamente. O Windows fechará o programa e o notificará caso uma solução esteja disponível."
Acredito que o erro acontece por aqui:
HB_FUNC( SATCONSULTAR )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1)) );
FreeLibrary( handle );
}
}
Continuo usando as mesmas chamadas em C na versão antiga 10.2 sem problemas e na nova versão estou usando as chamadas com DllCall.
Obrigado
Desde já agradeço imensamente pela ajuda que tive no desenvolvimento do meu SAT.
Estava usando normalmente as chamadas as rotinas do SAT em C aqui postada até que atualizei o fivewin para versão 16.01, xharbour para 1.2.3 e Embarcadero C++ 7.00 for win 32. Agora quando faço chamada por exemplo: Retorno:=SATCONSULTAR(Random()), entra uma mensagem de erro do Windows "Borland Windows Custom Control Library parou de funcionar. Um problema fez com que o programa parasse de funcionar corretamente. O Windows fechará o programa e o notificará caso uma solução esteja disponível."
Acredito que o erro acontece por aqui:
HB_FUNC( SATCONSULTAR )
{
HINSTANCE handle = LoadLibrary("sat.dll");
if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1)) );
FreeLibrary( handle );
}
}
Continuo usando as mesmas chamadas em C na versão antiga 10.2 sem problemas e na nova versão estou usando as chamadas com DllCall.
Obrigado
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
SAT-Fiscal a mistica está desvendada.
Amiguinhos,
Aparentemente este erro não tem relação direta com suas chamadas ao SAT, mas controle "a la Borland" em suas dialogos. Verifique.
Aparentemente este erro não tem relação direta com suas chamadas ao SAT, mas controle "a la Borland" em suas dialogos. Verifique.
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
SAT-Fiscal a mistica está desvendada.
Ok, Como faço para parar a rotina após a execução de uma linha para saber onde está o erro?
Obrigado
Obrigado
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
SAT-Fiscal a mistica está desvendada.
Amiguinhos,
No meu código, quando quero descobrir um ponto de travamento eu coloco alguns marcadores.
exemplo:
No meu código, quando quero descobrir um ponto de travamento eu coloco alguns marcadores.
exemplo:
Código: Selecionar todos
function blablabla( seila )
local algo := ...
...
?procline(),"1"
...
?procline(),"2"
...
...
?procline(),"x"
...
return algo
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
SAT-Fiscal a mistica está desvendada.
Ok, ok. Seria assim?
HB_FUNC( SATCONSULTAR )
{
?procline(),"1"
HINSTANCE handle = LoadLibrary("Sat.dll");
?procline(),"2"
if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
?procline(),"3"
hb_retc( ( LPSTR ) pFunc(hb_parni(1)) );
FreeLibrary( handle );
}
}
Obrigado
HB_FUNC( SATCONSULTAR )
{
?procline(),"1"
HINSTANCE handle = LoadLibrary("Sat.dll");
?procline(),"2"
if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
?procline(),"3"
hb_retc( ( LPSTR ) pFunc(hb_parni(1)) );
FreeLibrary( handle );
}
}
Obrigado
SAT-Fiscal a mistica está desvendada.
Esqueci de comentar que a consulta é registrada no simulador do sat ou seja a consulta foi efetuada no simulador mas o retorno não é enviado ao programa.
Obrigado
Obrigado
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
SAT-Fiscal a mistica está desvendada.
Amiguinhos,
Edvaldo
Não será necessário colocar nada neste local. O retorno desta função será uma string com seus itens separados por |(pipe). Desta forma você poderá manipular o resultado.
Voce consegue visualizar o retorno?, ou seja, ver o conteúdo do retorno:
Alguma coisa tem de retornar.
Edvaldo
Código: Selecionar todos
Ok, ok. Seria assim?
HB_FUNC( SATCONSULTAR )
{
?procline(),"1"
HINSTANCE handle = LoadLibrary("Sat.dll");
?procline(),"2"Voce consegue visualizar o retorno?, ou seja, ver o conteúdo do retorno:
Código: Selecionar todos
...
? SatConsultar( ...
...
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
SAT-Fiscal a mistica está desvendada.
Ok, não consigo ver o retorno pois o erro acontece quando a função é chamada assim:
MsgRun("Consulta ao SAT","Aguarde...", {|| Retorno:=SATCONSULTAR(Random()) })
Ok, agora tem coisa errada mesmo e é na minha programação pois hoje instalei a nova versão com o SAT da Tanca e está rodando sem problemas.
Vou ver melhor o que está acontecendo e retorno com o resultado.
Peço desculpas por enquando
Muito obrigado.
MsgRun("Consulta ao SAT","Aguarde...", {|| Retorno:=SATCONSULTAR(Random()) })
Ok, agora tem coisa errada mesmo e é na minha programação pois hoje instalei a nova versão com o SAT da Tanca e está rodando sem problemas.
Vou ver melhor o que está acontecendo e retorno com o resultado.
Peço desculpas por enquando
Muito obrigado.