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
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,

Ana Julia,
O xBase++ faz parte de um mundo paralelo ao Harbour. Enquanto o Harbour corre em um lado como compilador compatível com xBase puro o xBase++ corre pelo lado de compilador compatível com sua linguagem própria.

Os códigos podem até ser semelhantes, mas os recursos contidos em cada um não são.

Para que voce possa implementar a idéia usando xBase++ voce deverá verificar como o xBase++ trabalha em relação ao acesso a funções contidas em DLLs de terceiros. O xcommand usado para criar uma função no Harbour( ...DLL32 Function... ) é apenas uma forma de diminuir o código e deixar mais bonito e entendível.

A base do Harbour para acesso a chamadas de funções em DLLs é amparada pelo uso de funções como CallDLL() ou DLLCall().

No caso do xBase++( como não tenho mais a instalação demonstrativa ) voce deverá estudar os exemplos de chamadas em DLLs à partir do próprio xBase++.

Pelo que sei a maioria de funções do xBase++ são encontradas no Harbour, mas o contrário não.

Exemplo do que você poderia usar, carregando diretamente a DLL e chamar as funções da SAT.DLL diretamente, sem uso de wraps com DLL32 Function:

Código: Selecionar todos

   nDllHandle := DllLoad( "SAT.DLL")
   if nDllHandle <= 0
      msgbox( "SAT.DLL nao foi carregada" )
      RETURN .t.
   endif

   nSATRetorno := SATEnviar( ... )
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.
betovsp
Usuário Nível 1
Usuário Nível 1
Mensagens: 4
Registrado em: 09 Set 2005 13:34

SAT-Fiscal a mistica está desvendada.

Mensagem por betovsp »

Olá Rochinha e demais amigos
Estou com dois problemas e gostaria da ajuda de vocês.
O primeiro, em anexo estou encaminhando xml gerado pelo meu AC para análise de V.Sas., pois não consigo transmiti-lo pelo sistema do SAT.
O segundo é que não consigo comunicação com o sat, a função ConsultarSAT() retorna vazio, ou seja, não consegue comunicação.
Estou usando sat Elgin, com as funções tiradas daqui do post e dll da própria Elgin, pois no emulador também não consegui comunicação.
Desde já agradeço.

Código: Selecionar todos

- <CFe>
- <infCFe versaoDadosEnt="0.06">
- <ide>
  <CNPJ>07287459000167</CNPJ> 
  <signAC>G5lRJzh9VVWZOyA7cK+vH4H1TK2wQHV1oulHc0HgbUZlW83BLhlVmmBFMD5meHfNrCjyv2J/VLb8zVN7CPPxcIpAthU75tj5J1ldnkYYwdU6Hy9hcMDWpuWwJJznb7JHS0gqOr7M7VfYixMSxcM+kmr30hBJS7q+9g8p8lvTlEig+WDN9Eng06KSuXwfaB3/jw+FSsAsqkjP61wIaBsB26glYZltfC671OrIigtNUrO0LLj9zNUW8XNGb4Jb1ubQfa1gOPVT5VcZbYA8pPsJ82+cHtLi5aCO3yXOkxIibnjBSr7/OuwFNsQQXcJ3pm08xtR6Dqg0CdTJIz5s8+j6+Q==</signAC> 
  <numeroCaixa>001</numeroCaixa> 
  </ide>
- <emit>
  <CNPJ>07287459000167</CNPJ> 
  <IE>582689410112</IE> 
  <indRatISSQN>N</indRatISSQN> 
  </emit>
  <dest /> 
- <det nItem="1">
- <prod>
  <cProd>000765</cProd> 
  <cEAN>0000000000765</cEAN> 
  <xProd>ABO</xProd> 
  <NCM>34060000</NCM> 
  <CFOP>5102</CFOP> 
  <uCom>UN</uCom> 
  <qCom>1.0000</qCom> 
  <vUnCom>000000000005.00</vUnCom> 
  <indRegra>A</indRegra> 
  </prod>
- <imposto>
  <vItem12741>1.61</vItem12741> 
- <ICMS>
- <ICMS00>
  <Orig>0</Orig> 
  <CST>00</CST> 
  <pICMS>18.00</pICMS> 
  </ICMS00>
  </ICMS>
- <PIS>
- <PISAliq>
  <CST>01</CST> 
  <vBC>5.00</vBC> 
  <pPIS>0.0065</pPIS> 
  </PISAliq>
  </PIS>
- <COFINS>
- <COFINSAliq>
  <CST>01</CST> 
  <vBC>5.00</vBC> 
  <pCOFINS>3.0000</pCOFINS> 
  </COFINSAliq>
  </COFINS>
  </imposto>
  </det>
  <total /> 
- <pgto>
- <MP>
  <cMP>01</cMP> 
  <vMP>5.00</vMP> 
  </MP>
  </pgto>
  </infCFe>
  </CFe>
Abraços.

Beto
betovsp@hotmail.com
(16)9112-5798
FWH 9.08 @SAY Xharb 1.2.1
Ribeirão Preto/SP
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por paulovirt »

Meus prezados
Estou numa sinuca de bico. Meu sistema já vinha operando normalmente nos ECFs convencionais via DLL, até que surgiu o SAT. Adquiri um aparelho para um cliente e pedi a ele uns dias para esmiuçar o equipamento.
O problema é que esses "alguns dias" já viraram mais de três meses. Não consigo quase nada com o SAT. Consegui ativá-lo com muita dificuldade, mas na hora de me comunicar com ele por meu sistema, quase nada acontece.
A princípio tentei algo como "Consultar status operacional". Envio o comando mas não sei como obter o retorno, pois diferente do ECF, ele parece que não gera arquivo retorno ou outro tipo de informação.
Então gerei o XML e utilizei o programa exemplo da Sweda. O resultado é que ele retorna "erro desconhecido". Já não sei mais o que fazer. Se alguém possuir um código em xharbour pronto com o SAT funcionando, me interesso em adquirir, pois não to mais conseguindo ver outra saída.
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Chegou a fazer testes com o emulador do SAT v2.8.10 ou superior para ver se consegue algum retorno do emulador. Tem o ACBrMonitorPlus que trabalha com SAT, tenta utilizá-lo inicialmente até ganhar fôlego para partir para sua própria integração.
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
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 »

paulovirt escreveu:Meus prezados
Estou numa sinuca de bico. Meu sistema já vinha operando normalmente nos ECFs convencionais via DLL, até que surgiu o SAT. Adquiri um aparelho para um cliente e pedi a ele uns dias para esmiuçar o equipamento.
O problema é que esses "alguns dias" já viraram mais de três meses. Não consigo quase nada com o SAT. Consegui ativá-lo com muita dificuldade, mas na hora de me comunicar com ele por meu sistema, quase nada acontece.
A princípio tentei algo como "Consultar status operacional". Envio o comando mas não sei como obter o retorno, pois diferente do ECF, ele parece que não gera arquivo retorno ou outro tipo de informação.
Então gerei o XML e utilizei o programa exemplo da Sweda. O resultado é que ele retorna "erro desconhecido". Já não sei mais o que fazer. Se alguém possuir um código em xharbour pronto com o SAT funcionando, me interesso em adquirir, pois não to mais conseguindo ver outra saída.
Boa noite !

Amanhã cedo estarei no escritório, então posso ajudá lo.

Me chame e depois vamos postando aqui para os demais colegas.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por paulovirt »

Beleza, aguardo ansioso pela ajuda e cooperação
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 »

Vamos lá meu caro.
O que você já conseguiu fazer ?

PS. Nos diga o que você usa para tal: xHarbour ?
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por paulovirt »

Olá amigo!

Então, eu utilizo XHARBOUR. Montei toda a estrutura para gerar o XML em meu sistema principal. Em um código à parte, gerei alguns comandos como testes, assim como fiz na época que desenvolvi para o ECF, conforme o código abaixo:

Function Main()

*** CÓDIGO BÁSICO PARA TESTES COM SAT DA SWEDA
*** AUTOR: PAULO FARIAS

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_CODEPAGE_PTISO


SET DATE BRITISH
SET ESCAPE ON
SET CENTURY ON
SET CURSOR ON
SET DELETE ON
SET WRAP ON
SET EPOCH TO 1954
SETCANCEL(.F.)


h1:=LoadLibrary("sat.dll") // CARREGAMENTO DA DLL SAT.DLL

cchave_sat:="container" // CHAVE DE ATIVAÇÃO DO SAT

DLLCall(h1,32,"ConsultarStatusOperacional",Randomico(), CCHAVE_SAT)


Inkey(0)


Function Randomico(nMaximo) // NUMERO RANDOMICO PARA OS COMANDOS
static nRandomico
local nTemporal
nMaximo = if(nMaximo == NIL, 65535, nMaximo)

If nRandomico == NIL
nRandomico = seconds()
Endif

nTemporal = (nRandomico * seconds()) % (nMaximo + 1)
nRandomico = (nTemporal + seconds() )
Return int(nTemporal)


Bom, este seria o código básico, mas não sei como obter, por exemplo, o retorno do SAT, pois no ECF, tanto eram gerados arquivos de retorno, quanto caixas de diálogo.
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

Function Main()

*** CÓDIGO BÁSICO PARA TESTES COM SAT DA SWEDA
*** AUTOR: PAULO FARIAS

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_CODEPAGE_PTISO


SET DATE BRITISH
SET ESCAPE ON
SET CENTURY ON
SET CURSOR ON
SET DELETE ON
SET WRAP ON
SET EPOCH TO 1954
SETCANCEL(.F.)


h1:=LoadLibrary("sat.dll") // CARREGAMENTO DA DLL SAT.DLL
// precisa checar o valor de h1, para ter certeza de que a DLL foi carregada
cchave_sat:="container" // CHAVE DE ATIVAÇÃO DO SAT

DLLCall(h1,32,"ConsultarStatusOperacional",Randomico(), CCHAVE_SAT)
// aqui precisa precisa saber o retorno desta função também
// use retorno:= DLLCall(h1,32,"ConsultarStatusOperacional",Randomico(), CCHAVE_SAT)
// o retorno desta função, é o ponteiro com o endereço das informações que pediu 

xRet:= HB_Pointer2String(retorno,1000)// depois dê uma lida a respeito desta função no manual do xHarbour, para entender o 2º parâmetro
*** monta array com informações
xTxt:= StringToArray( trim(xRet), "|" ) // essa é contribuição do Rochinha
if xTxt[2] != '10000' // '10000' seria o retorno com sucesso para este método da SAT.DLL, ATENÇÃO POIS CADA MÉTODO TEM UM RETORNO DIFERENTE PARA SUCESSO NA OPERAÇÃO 
   msgstop(xTxt[3] + ' - ' + xTxt[2])
   return .F.
endif
if !empty(xTxt[5])
   msgstop(xTxt[5] + ' - ' + xTxt[4]) // exibe mensagem sefaz
endif
alert( valtoprg(xTxt) ) // xTxt é uma matriz com as informações pedidas
return .T.

Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por paulovirt »

Estou testando, mas deu erro nessa função, na hora de compilar:

StringToArray
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 »

Desculpe.

Código: Selecionar todos

Function StringToArray( cString, cSeparator ) 
LOCAL nPos, nCount:= 0
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 ) 
   nCount ++
   if nCount = 5
      hwg_processmessage()
      nCount = 0
   endif   
ENDDO 
RETURN ( aString ) 
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por paulovirt »

...agora deu erro na...

hwg_processmessage()

O compilador também não entendeu:

DEFAULT cSeparator := ";"
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 »

Essa hwg_processmessage() pode tirar.

Já a DEFAULT ...
Coloque o seguinte código lá no começo do seu prg

Código: Selecionar todos

#command DEFAULT <param> := <val> [, <paramn> := <valn> ];
=> ;
         <param> := IIF(<param> = NIL, <val>, <param> ) ;
         [; <paramn> := IIF(<paramn> = NIL, <valn>, <paramn> ) ]
Também pode trocar as msgstop por alert()
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por paulovirt »

Amigos...acho que ta quase lá... (primeira etapa).

Porém, na hora de compilar, retornou o seguinte erro:

xHarbour Compiler build 1.0.0 (SimpLex)
Copyright 1999-2007, http://www.xharbour.org http://www.harbour-project.org/
Compiling 'ECF.PRG' AND generating prepocessed output to 'ECF.ppo'...
ECF.PRG(76) Error E0030 Syntax error: "syntax error at 'CSEPARATOR'"
error

No code generated

Aparentemente um erro de sintaxe CSEPARATOR. Mas não consegui achar. Portanto, segue abaixo o código-fonte, que eu já tinha desenvolvido e com os complementos passados pelo companheiro alaminojunior, com apoio de material do Rochinha

Código: Selecionar todos

Function Main()

#command DEFAULT  :=  [,  :=  ];
=> ;
          := IIF( = NIL, ,  ) ;
         [;  := IIF( = NIL, ,  ) ]


*** CÓDIGO BÁSICO PARA TESTES COM SAT DA SWEDA
*** AUTOR: PAULO FARIAS

REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
REQUEST HB_CODEPAGE_PTISO

SET DATE BRITISH
SET ESCAPE ON
SET CENTURY ON
SET CURSOR ON
SET DELETE ON
SET WRAP ON
SET EPOCH TO 1954
SETCANCEL(.F.)

cseparator:=""
retorno:=""

h1:=LoadLibrary("sat.dll") // CARREGAMENTO DA DLL SAT.DLL
// precisa checar o valor de h1, para ter certeza de que a DLL foi carregada
cchave_sat:="container" // CHAVE DE ATIVAÇÃO DO SAT

DLLCall(h1,32,"ConsultarStatusOperacional",Random(), CCHAVE_SAT)
// aqui precisa precisa saber o retorno desta função também
// use retorno:= DLLCall(h1,32,"ConsultarStatusOperacional",Random(), CCHAVE_SAT)
// o retorno desta função, é o ponteiro com o endereço das informações que pediu 

xRet:= HB_Pointer2String(retorno,1000)// depois dê uma lida a respeito desta função no manual do xHarbour, para entender o 2º parâmetro
*** monta array com informações
xTxt:= StringToArray( trim(xRet), "|" ) // essa é contribuição do Rochinha
if xTxt[2] != '10000' // '10000' seria o retorno com sucesso para este método da SAT.DLL, ATENÇÃO POIS CADA MÉTODO TEM UM RETORNO DIFERENTE PARA SUCESSO NA OPERAÇÃO 
@ 10,1 say (xTxt[3] + ' - ' + xTxt[2])
   return .F.
endif
if !empty(xTxt[5])
@ 11,1 say (xTxt[5] + ' - ' + xTxt[4])
endif
alert( valtoprg(xTxt) ) // xTxt é uma matriz com as informações pedidas
return .T.




***********************************************************************************************************************

Function Random(nMaximo) // NUMERO RANDOMICO PARA OS COMANDOS

static nRandomico
local nTemporal
nMaximo = if(nMaximo == NIL, 65535, nMaximo)

If nRandomico == NIL
nRandomico = seconds()
Endif

nTemporal = (nRandomico * seconds()) % (nMaximo + 1)
nRandomico = (nTemporal + seconds() )
Return int(nTemporal)



***********************************************************************************************************************
Function StringToArray( cString, cSeparator ) 

LOCAL nPos, nCount:= 0
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 ) 
   nCount ++
   if nCount = 5
*      hwg_processmessage()
      nCount = 0
   endif   
ENDDO 
RETURN ( aString ) 

***********************************************************************************************************************
Fico no aguardo

Abraços

Paulo
***********************************************************************************************************************
Avatar do usuário
ANDRIL
Usuário Nível 5
Usuário Nível 5
Mensagens: 1297
Registrado em: 06 Jul 2004 00:44
Contato:

SAT-Fiscal a mistica está desvendada.

Mensagem por ANDRIL »

Tenta assim:

Código: Selecionar todos

Function StringToArray( cString, cSeparator ) 

LOCAL nPos, nCount:= 0
LOCAL aString := {} 
//DEFAULT cSeparator := ";"
****ALTERACAO AQUI****
cSeparator:=if(empty(cSeparator),";",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 ) 
   nCount ++
   if nCount = 5
*      hwg_processmessage()
      nCount = 0
   endif   
ENDDO 
RETURN ( aString ) 
Até+
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
Responder