SAT-Fiscal a mistica está desvendada.
Enviado: 11 Jun 2015 12:14
alguém me ajuda?! Eles não me aceitaram ainda! =/
Em homenagem a Paulo Cesar Toledo
https://pctoledo.org/
Também me deparei com isso.eduardomc00 escreveu:Galera, boa tarde....
Alguém consegue utilizar a DLL em (x)harbour puro?
a função DLLCALL() só devolve valor inteiro...
alguém pode me ajudar?!
Código: Selecionar todos
ret:= dllcall(h1,32,"ConsultarSAT",r)
xRet:= HB_Pointer2String(ret,100)Código: Selecionar todos
DBSELECTAREA( "cur_job" )
aRetornoSAT := EnviarDadosVenda( RandomSAT( 999999 ), "xxxxyyyyyzzzz", GeraXML_SAT( "cur_job" ) )
cSecao := aRetornoSAT[1]
cSatus := aRetornoSAT[4]
cXML64 := HB_BASE64Decode( aRetornoSAT[7] )
cChave := aRetornoSAT[8]
IF "SUCESSO" $ UPPER( cSatus )
ENDIF
Código: Selecionar todos
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
///////////////////////////////////////
FUNCTION ConsultarSAT()
///////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATConsultar( RandomSAT( 999999 ) )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF ConsultarSAT()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//////////////////////////////////////////////////////////////////////////
FUNCTION ConsultarStatusOperacionalSAT( nSessionRandom, codigoDeAtivacao )
//////////////////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATConsultarStatusOperacional( nSessionRandom, codigoDeAtivacao )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF ConsultarStatusOperacionalSAT()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
///////////////////////////////////////////////////////////////////////////
FUNCTION AtivarSAT( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
///////////////////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATAtivar( numeroSessao, subComando, codigoDeAtivacao, CNPJ, cUF )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF AtivarSAT()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//////////////////////////////////////////////////////////////////////////////
FUNCTION AssociarAssinaturaSAT( numeroSessao, codigoDeAtivacao, CNPJ, CNPJSH )
//////////////////////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATAssociarAssinatura( numeroSessao, codigoDeAtivacao, CNPJ, CNPJSH )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF AssociarAssinaturaSAT()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//////////////////////////////////////////////////////////////////////////////
FUNCTION ConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
//////////////////////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATConsultarNumeroSessao( nSessionRandom, codigoAtivacao, numeroSessao )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF ConsultarNumeroSessao()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
////////////////////////////////////////////////////////////
FUNCTION TesteFimAFim( numeroSessao, codigoAtivacao, dados )
////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATTesteFimAFim( numeroSessao, codigoAtivacao, dados )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF TesteFimAFim()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
////////////////////////////////////////////////////////////////
FUNCTION EnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
////////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATEnviarDadosVenda( numeroSessao, codigoAtivacao, dados )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.len(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF EnviarDadosVenda()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
////////////////////////////////////////////////////////////////////////////////
FUNCTION CancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
////////////////////////////////////////////////////////////////////////////////
LOCAL cString
LOCAL aString
cString := SATCancelarUltimaVenda( numeroSessao, codigoAtivacao, chaveAcesso, dados )
aString := StringToArray( cString, "|" )
RETURN IIF(VALTYPE(aString)#"A".or.LEN(aString)<1,{"0","","SAT-CFe: Sem Retorno","",""},aString)
////////////////////////////////////////////////////////////////////////////////////////////////
// EOF CancelarUltimaVenda()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//////////////////////////////
FUNCTION GeraXML_SAT( cAlias )
//////////////////////////////
LOCAL cXML := ""
LOCAL cCNPJContribuinte := ""
LOCAL cCNPJSofterHouse := ""
LOCAL cIEContribuinte := ""
LOCAL cIMContribuinte := ""
LOCAL cSign := ""
LOCAL nItem := 0
DBSELECTAREA(cAlias)
IF WSet( LPK_B_PC_TEC )
cCNPJContribuinte := "08723218000186"
cIEContribuinte := "149.626.224.113"
cCNPJSofterHouse := "16716114000172"
cSign := "SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT"
ELSE
ENDIF
DBGOTOP()
cXML := '<CFe>'
cXML += '<infCFe versaoDadosEnt="0.06">'
SAT_incluiTag( @cXML, "ide")
SAT_incluiTag( @cXML, "CNPJ" , cCNPJSofterHouse )
SAT_incluiTag( @cXML, "signAC" , cSign )
SAT_incluiTag( @cXML, "numeroCaixa" , "099" )
SAT_incluiTag( @cXML, "/ide")
SAT_incluiTag( @cXML, "emit")
SAT_incluiTag( @cXML, "CNPJ" , ALLTRIM( Clear_Slashs( cCNPJContribuinte ) ) )
SAT_incluiTag( @cXML, "IE" , ALLTRIM( Clear_Slashs( cIEContribuinte) ) )
// SAT_incluiTag( @cXML, "IM" , Clear_Slashs( cIMContribuinte) )
// SAT_incluiTag( @cXML, "cRegTrib" , NTRIM(SetaFil( GF_COD_REG_TRIB )))
SAT_incluiTag( @cXML, "cRegTribISSQN" ,"1" )
SAT_incluiTag( @cXML, "indRatISSQN" ,"N" )
SAT_incluiTag( @cXML, "/emit")
SAT_incluiTag( @cXML, "dest" )
IF LEN(ALLTRIM( Clear_Slashs(cur_job->cnpj_cpf)) ) == 14
SAT_incluiTag( @cXML, "CNPJ" , ALLTRIM( Clear_Slashs( cur_job->cnpj_cpf) ) )
ELSEIF LEN(ALLTRIM( Clear_Slashs(cur_job->cnpj_cpf)) ) == 11
SAT_incluiTag( @cXML, "CPF" , ALLTRIM( Clear_Slashs( cur_job->cnpj_cpf) ) )
ENDIF
SAT_incluiTag( @cXML, "/dest" )
WHILE !EOF()
cXML+='<det nItem="'+NTRIM( ++nItem )+'">'
SAT_incluiTag( @cXML, "prod" )
SAT_incluiTag( @cXML, "cProd" , Clear_Text_2_NFe( cur_job->cod_p ) )
IF !EMPTY( Clear_Text_2_NFe( cur_job->cod_ean13 ) )
SAT_incluiTag( @cXML, "cEAN" , Clear_Text_2_NFe( cur_job->cod_ean13 ) )
ENDIF
SAT_incluiTag( @cXML, "xProd" , Clear_Text_2_NFe( cur_job->descricao ) )
SAT_incluiTag( @cXML, "NCM" , Clear_Text_2_NFe( cur_job->ncm_sh) )
SAT_incluiTag( @cXML, "CFOP" , ALLTRIM( Clear_Slashs( cur_job->cfop) ) )
SAT_incluiTag( @cXML, "uCom" , Clear_Text_2_NFe( cur_job->unidade ) )
SAT_incluiTag( @cXML, "qCom" , sFvalor(cur_job->quantidade, 4) )
SAT_incluiTag( @cXML, "vUnCom" , sFvalor(cur_job->vl_u_nff, 3) )
SAT_incluiTag( @cXML, "indRegra" , "A" )
SAT_incluiTag( @cXML, "/prod" )
SAT_incluiTag( @cXML, "imposto" )
SAT_incluiTag( @cXML, "vItem12741", "1.00" )
SAT_incluiTag( @cXML, "ICMS" )
IF ASCAN( { "00","020","090" }, RIGHT( cur_job->sit_trib, 2 ) ) > 0
SAT_incluiTag( @cXML, "ICMS00" )
// CST 00, 20, 90
SAT_incluiTag( @cXML, "Orig" , LEFT(cur_job->cod_orig,1))
SAT_incluiTag( @cXML, "CST" , RIGHT( cur_job->sit_trib, 2 ) )
SAT_incluiTag( @cXML, "pICMS" , ALLTRIM(TRANSFORM( cur_job->icms_nff, "999.99" )))
// SAT_incluiTag( @cXML, "vICMS" , ALLTRIM(TRANSFORM( cur_job->vl_icms_it, "999999999999.99" )))
SAT_incluiTag( @cXML, "/ICMS00" )
ELSEIF ASCAN( { "40","41","50","60" }, RIGHT( cur_job->sit_trib,2 ) ) > 0
SAT_incluiTag( @cXML, "ICMS40" )
// CST 40, 41, 50, 60
SAT_incluiTag( @cXML, "Orig" , LEFT(cur_job->cod_orig,1)) // * 1 * //
SAT_incluiTag( @cXML, "CST" , RIGHT( cur_job->sit_trib,2 ) ) // * 41 * //
SAT_incluiTag( @cXML, "/ICMS40" )
ELSEIF ASCAN( { "102","300","500" }, cur_job->csosn_v ) > 0
SAT_incluiTag( @cXML, "ICMSSN102" )
// CSOSN 102, 300, 500
SAT_incluiTag( @cXML, "Orig" , LEFT(cur_job->cod_orig,1))
SAT_incluiTag( @cXML, "CSOSN" , cur_job->csosn_v)
SAT_incluiTag( @cXML, "/ICMSSN102" )
ELSEIF ASCAN( { "900" }, cur_job->csosn_v ) > 0
SAT_incluiTag( @cXML, "ICMSSN900" )
// CSOSN 900
SAT_incluiTag( @cXML, "Orig" , LEFT(cur_job->cod_orig,1))
SAT_incluiTag( @cXML, "CSOSN" , cur_job->csosn_v)
SAT_incluiTag( @cXML, "pICMS" , cur_job->aliq_cr_sn )
SAT_incluiTag( @cXML, "vICMS" , cur_job->v_cr_sn_it )
SAT_incluiTag( @cXML, "/ICMSSN900" )
ENDIF
SAT_incluiTag( @cXML, "/ICMS" )
SAT_incluiTag( @cXML, "PIS" )
SAT_incluiTag( @cXML, "PISAliq" )
SAT_incluiTag( @cXML, "CST" , cur_job->cst_pis ) // * 01 * //
SAT_incluiTag( @cXML, "vBC" , ALLTRIM(TRANSFORM( cur_job->vl_t_it, "999999999999.99" ))) // * 1.00 * //
SAT_incluiTag( @cXML, "pPIS" , ALLTRIM(TRANSFORM( cur_job->pis, "999.9999" ))) // * 1.0000 * //
SAT_incluiTag( @cXML, "/PISAliq" )
SAT_incluiTag( @cXML, "/PIS" )
SAT_incluiTag( @cXML, "COFINS" )
SAT_incluiTag( @cXML, "COFINSAliq" )
SAT_incluiTag( @cXML, "CST" , cur_job->cst_cofins )
SAT_incluiTag( @cXML, "vBC" , ALLTRIM(TRANSFORM( cur_job->vl_t_it, "999999999999.99" )))
SAT_incluiTag( @cXML, "pCOFINS" , ALLTRIM(TRANSFORM( cur_job->cofins, "999.9999" )))
SAT_incluiTag( @cXML, "/COFINSAliq" )
SAT_incluiTag( @cXML, "/COFINS" )
SAT_incluiTag( @cXML, "/imposto" )
SAT_incluiTag( @cXML, "/det" )
DBSKIP()
ENDDO
SAT_incluiTag( @cXML, "total" )
SAT_incluiTag( @cXML, "vCFeLei12741","1.00" )
SAT_incluiTag( @cXML, "/total" )
SAT_incluiTag( @cXML, "pgto" )
SAT_incluiTag( @cXML, "MP" )
SAT_incluiTag( @cXML, "cMP" , "01") // * 1 * //
SAT_incluiTag( @cXML, "vMP" , sFvalor(cur_job->vl_u_nff, 2)) // * mesmo que vItem * //
SAT_incluiTag( @cXML, "/MP" )
SAT_incluiTag( @cXML, "/pgto" )
cXML += '</infCFe>'
cXML += '</CFe>'
RETURN( cXML )
//////////////
// EOF GeraXML_SAT()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//////////////////////////////////////////
FUNCTION SAT_incluiTag( cXML, cTag,cValor)
//////////////////////////////////////////
IF cValor = Nil
cXML += '<'+cTag+'>'
ELSEIF EMPTY(cValor)
IF cTag == 'nro'
cXML+= '<'+cTag+'>'+cValor+'</'+cTag+'>'
ELSE
cXML+= '<'+cTag+' />'
ENDIF
ELSE
cXML+= '<'+cTag+'>'+cValor+'</'+cTag+'>'
ENDIF
RETURN( NIL )
/////////////
// EOF SAT_IncluiTag()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
/////////////////////////////
FUNCTION RandomSAT( nMaximo )
/////////////////////////////
LOCAL nRandom
LOCAL nTemporal
nMaximo = if( nMaximo == NIL, 65535, nMaximo )
IF nRandom == NIL
nRandom = seconds()
ENDIF
nTemporal = ( nRandom * seconds() ) % ( nMaximo + 1 )
nTemporal = if( nTemporal < 1, 1, nTemporal )
nRandom = nTemporal + seconds()
IF nTemporal<100000
ntemporal:= ntemporal + 99999
ENDIF
RETURN( nTemporal)
//////////////////
// EOF RandomSAT()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
/////////////////////////////////////////////
FUNCTION StringToArray( cString, cSeparator )
/////////////////////////////////////////////
LOCAL nPos
LOCAL aString := {}
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 )
ENDDO
RETURN ( aString )
//////////////////
// EOF StringToArray()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//////////////////////////////////////////
STATIC FUNCTION sFvalor( nVar, nDecimals )
//////////////////////////////////////////
LOCAL cReturn
// NDEFAULT nDecimals TO 4
IF nDecimals == 4
cReturn := ALLTRIM(TRANSFORM(nVar, "999999999999.9999"))
ELSEIF nDecimals == 3
cReturn := ALLTRIM(TRANSFORM(nVar, "999999999999.999"))
ELSEIF nDecimals == 2
cReturn := ALLTRIM(TRANSFORM(nVar, "999999999999.99"))
ENDIF
RETURN( cReturn )
/////////////////
// EOSF sFvalor()
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
//:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
#ifdef __GUI_GT_WVW__ // __XHARBOUR__
#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);
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 );
}
}
#pragma ENDDUMP
#endif