Página 13 de 21
SAT-Fiscal a mistica está desvendada.
Enviado: 27 Jan 2016 13:48
por paulovirt
Caro Andril
...continuando a saga...
Dessa vez compilou de boa, porém na hora de executar, deu este erro:
Error BASE/1099 Argument error: HB_Pointer2String Arguments: ( [ 1] = Type: C Val [ 2] = Type: N Val: 1000)
Error at ...: HB_POINTER2STRING(0) in Module:
Called from : MAIN(37) in Module: ECF.PRG
SAT-Fiscal a mistica está desvendada.
Enviado: 27 Jan 2016 13:55
por alaminojunior
Passou parâmetro incorreto para a função HB_PointerToString
Confere aí.
Você precisa passar para ela um inteiro que é o ponteiro com o endereço das informações.
Ele é o retorno de:
Código: Selecionar todos
DLLCall(h1,32,"ConsultarStatusOperacional",Random(), CCHAVE_SAT)
Você esqueceu de declarar uma variável para receber este retorno.
SAT-Fiscal a mistica está desvendada.
Enviado: 27 Jan 2016 18:20
por Jairo Maia
Olá alaminojunior,
Como você fez para gerar a chave de vinculação do software com certificado A3? Para certificado A1 o fabricante do Tanka disponibilizou um utilitário que faz isso (e serve para qualquer sat), mas quanto ao A3 você desenvolveu alguma coisa ou tem alguma dica?
Depois de tanta coisa agora só preciso resolver isso. Se você ou algum colega puder dar alguma dica seria uma coisa a mais solucionada.
SAT-Fiscal a mistica está desvendada.
Enviado: 27 Jan 2016 18:25
por alaminojunior
Nesse exato momento estou quase na cadeira do dentista, mas se não me engano existe um aplicativo no site da Tanca que faz isso, e é o que usamos.
SAT-Fiscal a mistica está desvendada.
Enviado: 27 Jan 2016 18:57
por Jairo Maia
Olá alaminojunior,
Obrigado por responder.
É que este aplicativo da Tanka (que tenho também) gera a chave somente com certificado A1. Estou precisando uma solução para certificado A3.
Valeu, obrigado. Vou continuar tentando.
SAT-Fiscal a mistica está desvendada.
Enviado: 27 Jan 2016 20:36
por alaminojunior
Me lembro que o nome tem algo a ver com Assinador ... , e funciona com A3
Amanhã no escritório te passo com exatidão.
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Jan 2016 02:29
por paulovirt
Meus caros colegas
Finalmente, após a ajuda de vocês consegui montar o código que se comunica com o SAT e "trata" as respostas. Já efetuei alguns testes para este comando simples (status operacional) e todos deram certo, informando se carregou a DLL, qual resposta veio, etc.
Segue abaixo o código, caso alguém tenha interesse em utilizar ou mesmo melhorar. Está bem simples, sem recursos gráficos. Vou transferir em breve para o sistema principal, assim que terminar os testes e conseguir carregar o XML e enviar ao SAT, desafio este grandioso e que conto com a ajuda de vocês.
Código: Selecionar todos
Function Main()
*** CODIGO BASICO PARA TESTES COM SAT DA SWEDA
*** AUTOR: PAULO FARIAS
*** CONTRIBUICOES (VIA FORUM CLIPPER ONLINE)
** ALAMINO JUNIOR
** ROCHINHA
** ANDRIL
Clear
#command DEFAULT := [, := ];
=> ;
:= IIF( = NIL, , ) ;
[; := IIF( = NIL, , ) ]
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.)
M->retorno:=""
M->h1:=""
M->cchave_sat:="container" // CHAVE DE ATIVACAO DO SAT
h1:=LoadLibrary("sat.dll") // CARREGAMENTO DA DLL SAT.DLL
If h1<=0
@ 01,01 Say "Sat.dll nao foi carregada"
Endif
@ 03,01 Say "Chave" get cchave_sat
Read
retorno:=DLLCall(h1,32,"ConsultarStatusOperacional",Random(), CCHAVE_SAT)
// COMANDO ENVIADO AO SAT
xRet:= HB_Pointer2String(retorno,1000)
// MONTA ARRAY COM INFORMACOES
xTxt:= StringToArray( trim(xRet), "|" )
// CONTRIBUICAO DO ROCHINHA
@ 10,01 say "RETORNO:"
If xTxt[2] != '10000'
// '10000' RESPOSTA COM SUCESSO
@ 10,01 Say (xTxt[3] + ' - ' + xTxt[2])
inkey(0)
return .F.
Else
@ 10,01 Say (xTxt[3] + ' - ' + xTxt[2])
inkey(0)
return .F.
Endif
if !empty(xTxt[5])
@ 01,01 Say (xTxt[5] + ' - ' + xTxt[4])
inkey(0)
endif
@ 01,01 Say valtoprg(xTxt)
// MATRIZ COM INFORMACOES PERDIDAS
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 := ";"
****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 )
***********************************************************************************************************************
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Jan 2016 08:06
por casesistemas
Bom Dia
Jairo
Usamos este para gerar a assinatura com A3
http://www.projetoacbr.com.br/forum/top ... s-a3-em-c/
Att
Joao Carlos
CASE Sistemas
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Jan 2016 09:50
por Jairo Maia
Olá casesistemas,
Muito obrigado pela dica. Usei o ACSN_AssinaSAT da ACSN e validou. Finalmente. Muito obrigado.
:-Y
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Jan 2016 11:23
por betovsp
Bom dia.
Gostaria de pedir ajuda novamente aos amigos.
AlaminoJunior vc poderia me ajudar, vejo que você entende bastante de Cf-e SAT.
A única coisa que preciso é que vc verifique meu xml, pois a conexão com o SAT meu sistema já faz, mas retorna o erro na função EnviarDadosVenda():
(6010|1999|Rejeição:Erro não identificado), esse erro foi tirado do log do SAT Elgin.
Código: Selecionar todos
<?xml version="1.0" encoding="UTF-8" ?>
- <CFe>
- <infCFe versaoDadosEnt="0.06">
- <ide>
<CNPJ>05009035000105</CNPJ>
<signAC>UXNfiCOIAZ2XfEgvppeeaEXeBB4smzAf2GeEjrbCy+2LwFnjn4nEv+tn2Sxp9j834r0aebXeP17XBcExSjCdy2O/OXopVOWSXz6eya9AVVb0AhT7IF+zT7URR2lYm8kOgQoYTbaP13iO2ba7kqO1LlB4WspF+TAYAmOmYOrwToQ8PmL3/lank86ZxMp6vOqOXLugrbO4umfS0btp7u+ZpVhSWCbkEHVI+N1ZL6S0iCABQG0WFyjTKjKViVloiZ/FKzkV14Jy2g66zE9/9o1mtJoGA0IKVtGOU4mwh1xAvZfIkiT/4hlsx4LzRrn1DKpMUsxEs6JF3XSSgNCbiuuzFA==</signAC>
<numeroCaixa>001</numeroCaixa>
</ide>
- <emit>
<CNPJ>05009035000105</CNPJ>
<IE>582622325111</IE>
<indRatISSQN>N</indRatISSQN>
</emit>
- <dest>
<CNPJ>14111050875</CNPJ>
<xNome>CONSUMIDOR FINAL</xNome>
</dest>
- <det nItem="1">
- <prod>
<cProd>209115</cProd>
<xProd>VELA 14 DIAS</xProd>
<NCM>34060000</NCM>
<CFOP>5102</CFOP>
<uCom>UN</uCom>
<qCom>1.0000</qCom>
<vUnCom>12.00</vUnCom>
<indRegra>A</indRegra>
<vDesc>0.00</vDesc>
<vOutro>0.00</vOutro>
</prod>
- <imposto>
<vItem12741>3.86</vItem12741>
- <ICMS>
- <ICMSSN102>
<Orig>0</Orig>
<CSOSN>102</CSOSN>
</ICMSSN102>
</ICMS>
- <PIS>
- <PISSN>
<CST>49</CST>
</PISSN>
</PIS>
- <COFINS>
- <COFINSSN>
<CST>49</CST>
</COFINSSN>
</COFINS>
</imposto>
</det>
- <total>
<vCFeLei12741>3.86</vCFeLei12741>
</total>
- <pgto>
- <MP>
<cMP>01</cMP>
<vMP>12.00</vMP>
</MP>
</pgto>
- <infAdic>
<infCpl>Val. Aprox.Tributos:R$ 3.86 (32.20%)Fonte:IBPT</infCpl>
</infAdic>
</infCFe>
</CFe>
SAT-Fiscal a mistica está desvendada.
Enviado: 28 Jan 2016 18:18
por alaminojunior
A única coisa que preciso é que vc verifique meu xml
Beto, boa noite !
Confesso que olhei o seu XML, mas sinceramente ... rsrsrsrs é muita coisa para olhar, e meus lindos olhos castanhos podem me trair.
Recomendo sempre nestes casos, gerar o log do aparelho e visualiza-lo.
Ele lhe dará a resposta exata do que precisa tratar.
Boa sorte.
SAT-Fiscal a mistica está desvendada.
Enviado: 02 Fev 2016 01:27
por rochinha
Amiguinhos,
Os erros desconhecidos são de dificil identificação, mas são relacionados a escrita errada de TAGs.
Exemplo se existir uma TAG chamada ORochinhaELegal e ela for formatada como ORochinhaeleGAL provoca o erro.
TAGs com campos numéricos exigem tamanhos de digitos de centavos especificos depois da virgula, conforme os manuais.
TAGs com ZERO, exemplo <vDESC>0</vDesc> nem são necessários mas causam erros.
Caracteres especiais no conteúdo também causam erros.
Existe um numero reduzido de CFOPs e CSTs/CSOSNs que podem ser usados, ou seja, estar contidos no XML.
SAT-Fiscal a mistica está desvendada.
Enviado: 04 Fev 2016 15:45
por alaminojunior
Não sei qual a experiência dos colegas, mas venho sofrendo com um problema com arquivos XML´s maiores que 50 Kbytes.
O fluxo é o seguinte:
Eu monto o arquivo XML com aproximadamente uns 50 Kb, dependendo da quantidade de itens ;
Envio para o SAT, EnviarDadosVenda ;
Em seguida, pego o retorno deste método ;
Ex.
xRet:= HB_Pointer2String( retorno de EnviarDadosVenda , tamanho em nbytes ) esse último parâmetro é o bicho
Aqui já fica meio obscura a coisa, pois não dá para saber de antemão qual o tamanho da string que a função anterior retorna.
Com isso, eu faço um cálculo um tanto estrambólico tentando adivinhar esse tamanho. Pelo que vi, não pode ser menor e nem muito maior.
Neste ponto está o problema: pois se for um cupom com muitos itens (uns 100 aprox. que dá ~ 60 Kbytes) neste ponto o sistema trava, e deixa a tela toda esbranquiçada.
Esse método (HB_Pointer2String) retorna como eu disse, uma string (que preciso depois submeter ao StringToArray, para organizar os dados) um pouco maior que o XML de origem, pois o de retorno vem com outros campos e assinaturas, etc ...
Alguém faz ideia do que poderia ser ?
SAT-Fiscal a mistica está desvendada.
Enviado: 04 Mar 2016 04:46
por paulovirt
Meus caros colegas
A batalha continua. Já consegui implementar as funções de teste do meu SAT graças a ajuda de vocês. Sem ela, nada teria acontecido.
Meu sistema já gera O XML da venda, porém estou em dúvida sobre onde ou como informar esse arquivo e enviá-lo ao SAT, conforme o exemplo abaixo:
Código: Selecionar todos
retorno:=DLLCall(h1,32,"EnviarDadosVenda",Random(), CCHAVE_SAT, dados)
Este exemplo peguei aqui mesmo no fórum, seguindo o que eu já vinha utilizado para outras funções. Porém, essa variável "dados", como posso informar o arquivo XML da venda por meio dela?
SAT-Fiscal a mistica está desvendada.
Enviado: 04 Mar 2016 07:25
por alaminojunior
Bom dia !
O parâmetro 'dados' é o conteúdo do arquivo XML.