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 »

Edvaldo, não é possível ! rsrsrsrs
Tente rodar este código mais enxuto.

Lembrando, que a SAT.DLL tem de estar junto na pasta.
Assim que executar, vai perceber o led AC piscar.
Em seguida, tem que mostrar o alert com o retorno, aguardando um OK.

Código: Selecionar todos

***********************************************************************************
* Chamadas para DLL Funções de manipulação do cupom fiscal eletrônico Sweda
***********************************************************************************

Function ConsultarSAT()
Local cString:= SATCONSULTAR(Random()), aString:= HB_ATOKENS(cString, [|])

alert(cString)

Return

#pragma BEGINDUMP

   #include "hbapi.h"
   #include "windows.h"

   typedef LPSTR (WINAPI *_CONSULTARSAT)          ( INT nRandom );
   typedef LPSTR (WINAPI *_ATIVARSAT)             ( INT nRandom, INT   nSubComando , LPSTR cCodAtivacao, LPSTR cCNPJ, INT nUF );
   typedef LPSTR (WINAPI *_ASSOCIARASSINATURASAT) ( INT nRandom, LPSTR cCodAtivacao, LPSTR cCNPJ, LPSTR cAssCNPJ );
   typedef LPSTR (WINAPI *_CONSULTARSECAOSAT)     ( INT nRandom, LPSTR cCodAtivacao, LPSTR cNumSecao );
   typedef LPSTR (WINAPI *_TESTEFIMAFIMSAT)       ( INT nRandom, LPSTR cCodAtivacao, LPSTR cDadosVenda);
   typedef LPSTR (WINAPI *_ENVIARVENDASAT)        ( INT nRandom, LPSTR cCodAtivacao, LPSTR cDadosVenda);
   typedef LPSTR (WINAPI *_CANULTIMAVENDASAT)     ( INT nRandom, LPSTR cCodAtivacao, LPSTR cChave, LPSTR cDadosVenda);
   typedef LPSTR (WINAPI *_CONSULTARSTATUSSAT)    ( INT nRandom, LPSTR cCodAtivacao);
   typedef LPSTR (WINAPI *_ATUALIZARSOFTWARE)     ( INT nRandom, LPSTR cCodAtivacao);
   typedef LPSTR (WINAPI *_EXTRAIRLOGS)           ( INT nRandom, LPSTR cCodAtivacao);

    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 );
       }
   }

   HB_FUNC( SATATIVAR )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _ATIVARSAT pFunc;
           pFunc = (_ATIVARSAT) GetProcAddress(handle, "AtivarSAT");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parni(2), hb_parc(3), hb_parc(4), hb_parni(5)) );
           FreeLibrary( handle );
       }
   }

   HB_FUNC( SATASSOCIARASSINATURA )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _ASSOCIARASSINATURASAT pFunc;
           pFunc = (_ASSOCIARASSINATURASAT) GetProcAddress(handle, "AssociarAssinatura");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3), hb_parc(4)) );
           FreeLibrary( handle );
       }
      }

   HB_FUNC( SATCONSULTARNUMEROSESSAO )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _CONSULTARSECAOSAT pFunc;
           pFunc = (_CONSULTARSECAOSAT) GetProcAddress(handle, "ConsultarNumeroSessao");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3)) );
           FreeLibrary( handle );
       }
   }

   HB_FUNC( SATTESTEFIMAFIM )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _TESTEFIMAFIMSAT pFunc;
           pFunc = (_TESTEFIMAFIMSAT) GetProcAddress(handle, "TesteFimAFim");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3)) );
           FreeLibrary( handle );
       }
   }

   HB_FUNC( SATENVIARDADOSVENDA )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _ENVIARVENDASAT pFunc;
           pFunc = (_ENVIARVENDASAT) GetProcAddress(handle, "EnviarDadosVenda");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3)) );
           FreeLibrary( handle );
       }
   }
   HB_FUNC( SATCANCELARULTIMAVENDA )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _CANULTIMAVENDASAT pFunc;
           pFunc = (_CANULTIMAVENDASAT) GetProcAddress(handle, "CancelarUltimaVenda");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2), hb_parc(3), hb_parc(4)) );
           FreeLibrary( handle );
       }
   }

   HB_FUNC( SATCONSULTARSTATUSOPERACIONAL )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _CONSULTARSTATUSSAT pFunc;
           pFunc = (_CONSULTARSTATUSSAT) GetProcAddress(handle, "ConsultarStatusOperacional");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
           FreeLibrary( handle );
       }
      }

   HB_FUNC( SATATUALIZARSOFTWARE )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _ATUALIZARSOFTWARE pFunc;
           pFunc = (_ATUALIZARSOFTWARE) GetProcAddress(handle, "AtualizarSoftwareSAT");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
           FreeLibrary( handle );
       }
   }

   HB_FUNC( SATEXTRAIRLOGS )
   {
       HINSTANCE handle = LoadLibrary("sat.dll");

       if (handle)
       {
           _EXTRAIRLOGS pFunc;
           pFunc = (_EXTRAIRLOGS) GetProcAddress(handle, "ExtrairLogs");
           hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
           FreeLibrary( handle );
       }
   }

 #pragma ENDDUMP
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, não era possível mesmoooooorsrsrsrs. o programa estava certinho desde o primeiro exemplo que usei, porém o erro que detectei só existe usando o simulador da secretaria. Fiz um teste usando SAT Dimep e retorno a resposta do SAT beleza. Vou cancelar todas as rotinas com DllCall e passar a utilizar esta disponibilizada, embora não tenha testado na prática, mais quando o fizer postarei aqui o resultado. Vocês todos estão de parabéns mais uma vez. muito obrigado a todos.
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,

edvaldo
No meu caso funciona com a dll oficial e dimep, mas notei que você usou uma função random que desconheço seu funcionamento.

A minha, quando não era passado parâmetro retornava qualquer valor pela função seconds. O prblema é que o valor passado para as funções do SAT exigiam ter 6 digitos, nem 5, nem 7.

Quando puder verifique. Verifique também a dll oficial que deve possuir uns 37k de tamanho e data de criação de 10 de 2013.
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.
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, fiquei sabendo desta função aqui mesmo no fórum e já tinha percebido que o meu simular rodava com qualquer numero aleatório deste que não se repita. Mas vou testar pra ver se é isso pois preciso usar o programa com o simulador primeiramente e só depois com o SAT.
Diego Papale
Usuário Nível 1
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.

Mensagem por Diego Papale »

Boa tarde,

Edivaldo, também estou com o mesmo problema, pelo que pude analisar até aqui, quando envio um comando para dll, por exemplo a consulta de status, depois em seguida envio outro comando, por exemplo o de envio da venda, nesta segunda requisição a resposta da dll não retorna e o sistema trava. Para um melhor entendimento basta utilizar a função de consulta uma vez e logo em seguida tentar novamente com um botão na aplicação por exemplo, na segunda tentativa o sistema não obtêm resposta.
xHarbour 1.2.1 / Borland C++ Compiler 5.5 / MySQL
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

SAT-Fiscal a mistica está desvendada.

Mensagem por Jairo Maia »

Olá Pessoal,

Isto não é uma resposta aos postes acima. É apenas um adicional que talvez ajude. O número de sessão não pode se
repetir no intervalo de 100 sessões enviadas.

Por favor aos amigos, leiam também os postes anteriores dos colegas.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, não terminei ainda de fazer a mudança no programa para a nova forma de ler a DLL, mas já tinha percebido algo parecido com outros testes. Uma coisa eu acho que pode ser melhorado que é o carregamento da DLL toda vez que se envia um comando, isto costuma dar resultados imprevisíveis, acho que o melhor a fazer é carregar a DLL na entrada do programa e fechar, descarregar a DLL somente na saída do programa. Mas como disse ainda não testei.
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 »

Edvaldo escreveu: Uma coisa eu acho que pode ser melhorado que é o carregamento da DLL toda vez que se envia um comando, isto costuma dar resultados imprevisíveis, acho que o melhor a fazer é carregar a DLL na entrada do programa e fechar, descarregar a DLL somente na saída do programa. Mas como disse ainda não testei.
É uma ideia interessante ! Talvez proporcione mais agilidade ?

Nos testes que fiz, instanciando a DLL à cada chamada e fechando em seguida, percebi que é muito rápido, e não houveram problemas, ainda.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, não sei bem a razão mas sempre que fiz carregamento de DLL toda vez que preciva usar as funções da mesma, tive alguns problemas que só foram resolvidos com o carregamento da DLL uma única vez. Não sei ainda se vai ser o caso aqui pois ainda não fiz as alterações.
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

edvaldo
Afinal, resolvemos o seu problema?
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.
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, acredito que sim. Estou usando a dll da daruma mas amanhã estarei testando uma nova instalação totalmente com as rotinas deste fórum, apesar de não conseguir fazer funcionar com o simulador mais tive bons resultados usando o equipamento SAT Dimep. Amanhã postarei o resultado definitivo.
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, amigos, a rotina está funcionando corretamente, porém necessita de ajustes os quais tentei fazer mas não consegui.
1- A rotina ConsultarSat está faltando um parâmetro que é o código de ativação tentei assim mas não compila (não cria o arquivo .obj):
typedef LPSTR (WINAPI *_CONSULTARSAT) ( INT nRandom, LPSTR cCodAtivacao );

HB_FUNC( SATCONSULTAR )
{
HINSTANCE handle = LoadLibrary("Sat.dll");

if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parni(2)) );
FreeLibrary( handle );
}
}

2-Tentei incluir a função para trocar o código de ativação mais também não compila:
typedef LPSTR (WINAPI *_TROCARATIVACAOSAT) ( INT nRandom, LPSTR nCNPJ, LPSTR nTipo, LPSTR cCodVelho, ILPSTR cCodNovo);

HB_FUNC( SATTROCARATIVACAO )
{
HINSTANCE handle = LoadLibrary("sat.dll");

if (handle)
{
_TROCARATIVACAOSAT pFunc;
pFunc = (_TROCARATIVACAOSAT) GetProcAddress(handle, "AtivarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parni(2), hb_parc(3), hb_parc(4), hb_parni(5)) );
FreeLibrary( handle );
}
}

3-Tentei ainda chamar uma função da dll da daruma que está me dando problemas e também não compila: (esta função imprime um cupom através do xml)
typedef LPSTR (WINAPI *_IMPRIMIRCFESAT) ( LPSTR nXml, LPSTR cTipo);

HB_FUNC( SATIMPRIMIRCFE )
{
HINSTANCE handle = LoadLibrary("DarumaFrameWork.dll");

if (handle)
{
_IMPRIMIRCFESAT pFunc;
pFunc = (_EXTRAIRLOGS) GetProcAddress(handle, "iImprimirCFe_SAT_Daruma");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
FreeLibrary( handle );
}
}
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,

edvaldo
A pressa é inimiga da programação.
2-Tentei incluir a função para trocar o código de ativação mais também não compila:

Código: Selecionar todos

...
typedef LPSTR (WINAPI *_TROCARATIVACAOSAT) ( INT nRandom, LPSTR nCNPJ, LPSTR nTipo, LPSTR cCodVelho, [b]ILPSTR[/b] cCodNovo);
...
O que é ILPSTR?

Código: Selecionar todos

typedef LPSTR (WINAPI *_CONSULTARSAT) ( INT nRandom, LPSTR cCodAtivacao );

HB_FUNC( SATCONSULTAR )
...
Você define como LPSTR o segundo parâmetro.

Código: Selecionar todos

...
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parni(2)) );
...
E usa a função que critica inteiro para criticar uma string, coloque hb_parc(2).

3-Tentei ainda chamar uma função da dll da daruma que está me dando problemas e também não compila: (esta função imprime um cupom através do xml)

Código: Selecionar todos

...
_IMPRIMIRCFESAT pFunc; 
pFunc = (_EXTRAIRLOGS) GetProcAddress(handle, "iImprimirCFe_SAT_Daruma");
...
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.
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,

edvaldo
A pressa é inimiga da programação.
2-Tentei incluir a função para trocar o código de ativação mais também não compila:

Código: Selecionar todos

...
typedef LPSTR (WINAPI *_TROCARATIVACAOSAT) ( INT nRandom, LPSTR nCNPJ, LPSTR nTipo, LPSTR cCodVelho, ILPSTR cCodNovo);
...
O que é ILPSTR?

Código: Selecionar todos

typedef LPSTR (WINAPI *_CONSULTARSAT) ( INT nRandom, LPSTR cCodAtivacao );

HB_FUNC( SATCONSULTAR )
...
Você define como LPSTR o segundo parâmetro.

Código: Selecionar todos

...
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parni(2)) );
...
E usa a função que critica inteiro para criticar uma string, coloque hb_parc(2).

3-Tentei ainda chamar uma função da dll da daruma que está me dando problemas e também não compila: (esta função imprime um cupom através do xml)

Código: Selecionar todos

...
_IMPRIMIRCFESAT pFunc; 
pFunc = (_EXTRAIRLOGS) GetProcAddress(handle, "iImprimirCFe_SAT_Daruma");
...
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.
Edvaldo
Usuário Nível 1
Usuário Nível 1
Mensagens: 32
Registrado em: 17 Fev 2016 12:09
Localização: ubatuba

SAT-Fiscal a mistica está desvendada.

Mensagem por Edvaldo »

Ok, ref. o item 1, fiz a alteração e antes não funcionava no simulador e após a alteração não funciona nem no simulador e nem no equipamento SAT. A rotina é compilada porém dar um erro de execução do Windows e só fechando.
typedef LPSTR (WINAPI *_CONSULTARSAT) ( INT nRandom, LPSTR cCodAtivacao);

HB_FUNC( SATCONSULTAR )
{
HINSTANCE handle = LoadLibrary("Sat.dll");

if (handle)
{
_CONSULTARSAT pFunc;
pFunc = (_CONSULTARSAT) GetProcAddress(handle, "ConsultarSAT");
hb_retc( ( LPSTR ) pFunc(hb_parni(1), hb_parc(2)) );
FreeLibrary( handle );
}
}

Ref. o item 2, o erro é apenas de digitação o correto é LPSTR, mas conntinua sem compilar e não cria o arquivo .Obj.
Ref. o item 3, não entendi bem qual a correção a ser feita.

Obrigado
Responder