Página 12 de 21

SAT-Fiscal a mistica está desvendada.

Enviado: 28 Nov 2015 18:58
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( ... )

SAT-Fiscal a mistica está desvendada.

Enviado: 25 Jan 2016 13:30
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>

SAT-Fiscal a mistica está desvendada.

Enviado: 25 Jan 2016 17:20
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.

SAT-Fiscal a mistica está desvendada.

Enviado: 25 Jan 2016 17:53
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é+

SAT-Fiscal a mistica está desvendada.

Enviado: 25 Jan 2016 20:32
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.

SAT-Fiscal a mistica está desvendada.

Enviado: 25 Jan 2016 21:38
por paulovirt
Beleza, aguardo ansioso pela ajuda e cooperação

SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 11:51
por alaminojunior
Vamos lá meu caro.
O que você já conseguiu fazer ?

PS. Nos diga o que você usa para tal: xHarbour ?

SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 16:05
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.

SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 16:23
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.


SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 16:42
por paulovirt
Estou testando, mas deu erro nessa função, na hora de compilar:

StringToArray

SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 16:52
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 ) 

SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 17:28
por paulovirt
...agora deu erro na...

hwg_processmessage()

O compilador também não entendeu:

DEFAULT cSeparator := ";"

SAT-Fiscal a mistica está desvendada.

Enviado: 26 Jan 2016 17:44
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()

SAT-Fiscal a mistica está desvendada.

Enviado: 27 Jan 2016 04:35
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
***********************************************************************************************************************

SAT-Fiscal a mistica está desvendada.

Enviado: 27 Jan 2016 08:19
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é+