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é+