SAT ELGIN SMART
Enviado: 07 Ago 2023 13:30
- Boa tarde pessoal, alguem tem e poderia ceder os fontes de comunicação com o equipamento SAT em harbour 3.2 utilizando a dll do acbr ou comunicação direta?
HASA
HASA
Código: Selecionar todos
#include "hbclass.ch"
#include "error.ch"
#define DC_CALL_CDECL 0x0010 // __cdecl
#define DC_CALL_STD 0x0020 // __stdcall
#ifdef _XHARBOUR_
#define ACBrLIBSat "ACBrSAT32.dll"
#define DLL_OSAPI DC_CALL_STD
#else
#if defined( __PLATFORM__WINDOWS )
#define ACBrLIBSat "ACBrSAT32.dll"
#define DLL_OSAPI DC_CALL_STD
#else
#define ACBrLIBSat "ACBrSAT32.so"
#define DLL_OSAPI DC_CALL_CDECL
#endif
#endif
#define STR_LEN 256
Function SatDemo ()
local sat
local vendaRetorno, strIniVenda
local hIni, hIniVenda
LOCAL cSection
sat := ACBrSat():New("", "")
// Sessão Chave Valor
// Configurações de log da Lib
sat:ConfigGravarValor("Principal", "LogNivel", "4") // logParanoico
sat:ConfigGravarValor("Principal", "LogPath", hb_dirBase())
//Configurações do Sat
sat:ConfigGravarValor("SAT", "Modelo", "1") // satDinamico_cdecl
sat:ConfigGravarValor("SAT", "NomeDLL", "C:\SAT\SAT.dll")
sat:ConfigGravarValor("SAT", "CodigoDeAtivacao", "sefaz1234")
sat:ConfigGravarValor("SAT", "SignAC", "111111111111122222222222222111111111111112222222222222211111111111111222222222222221111111111111122222222222222111111111111112222222222222211111111111111222222222222221111111111111122222222222222111111111111112222222222222211111111111111222222222222221111")
// Softhouse
sat:ConfigGravarValor("SATConfig", "infCFe_versaoDadosEnt", "0.07")
sat:ConfigGravarValor("SATConfig", "ide_CNPJ", "16716114000172")
sat:ConfigGravarValor("SATConfig", "ide_numeroCaixa", "0")
// Emitente
sat:ConfigGravarValor("SATConfig", "emit_CNPJ", "14200166000166")
sat:ConfigGravarValor("SATConfig", "emit_IE", "111111111111")
sat:ConfigGravarValor("SATConfig", "emit_IM", "")
sat:ConfigGravarValor("SATConfig", "emit_cRegTrib", "0") // RTSimplesNacional
sat:ConfigGravarValor("SATConfig", "emit_cRegTribISSQN", "0") // RTISSMicroempresaMunicipal
sat:ConfigGravarValor("SATConfig", "emit_indRatISSQN", "0") // irSim
// Extrato
sat:ConfigGravarValor("Extrato", "Tipo", "0") // teFortes
sat:ConfigGravarValor("Extrato", "MostraPreview", "1") // True
// Salvando configurações
sat:ConfigGravar("")
?sat:Nome
?sat:Versao
sat:Inicializar()
?sat:ConsultarStatusOperacional()
// Gerando ini venda
hIniVenda := Hash()
hIniVenda["infCFe"] := Hash()
hIniVenda["infCFe"]["versao"] := "0.07"
hIniVenda["Destinatario"] := Hash()
hIniVenda["Destinatario"]["CNPJCPF"] := "05481336000137"
hIniVenda["Destinatario"]["xNome"] := "D.J. SYSTEM"
hIniVenda["Entrega"] := Hash()
hIniVenda["Entrega"]["xLgr"] := "Rua Cel. Aureliano de Camargo"
hIniVenda["Entrega"]["nro"] := "973"
hIniVenda["Entrega"]["xCpl"] := ""
hIniVenda["Entrega"]["xBairro"] := "Centro"
hIniVenda["Entrega"]["xMun"] := "Tatui"
hIniVenda["Entrega"]["UF"] := "SP"
hIniVenda["Produto001"] := Hash()
hIniVenda["Produto001"]["cProd"] := "1189"
hIniVenda["Produto001"]["infAdProd"] := "Teste de Produto"
hIniVenda["Produto001"]["cEAN"] := ""
hIniVenda["Produto001"]["xProd"] := "OVO VERMELHO"
hIniVenda["Produto001"]["NCM"] := "04072100"
hIniVenda["Produto001"]["CFOP"] := "5102"
hIniVenda["Produto001"]["uCom"] := "DZ"
hIniVenda["Produto001"]["Combustivel"] := "0"
hIniVenda["Produto001"]["qCom"] := "510"
hIniVenda["Produto001"]["vUnCom"] := "2,70"
hIniVenda["Produto001"]["indRegra"] := "A"
hIniVenda["Produto001"]["vDesc"] := "0"
hIniVenda["Produto001"]["vOutro"] := "0"
hIniVenda["Produto001"]["vItem12741"] := "137,00"
hIniVenda["ObsFiscoDet001001"] := Hash()
hIniVenda["ObsFiscoDet001001"]["xCampoDet"] := "Teste"
hIniVenda["ObsFiscoDet001001"]["xTextoDet"] := "Texto Teste"
hIniVenda["ICMS001"] := Hash()
hIniVenda["ICMS001"]["Origem"] := "0"
hIniVenda["ICMS001"]["CSOSN"] := "500"
hIniVenda["PIS001"] := Hash()
hIniVenda["PIS001"]["CST"] := "01"
hIniVenda["COFINS001"] := Hash()
hIniVenda["COFINS001"]["CST"] := "01"
hIniVenda["Total"] := Hash()
hIniVenda["Total"]["vCFeLei12741"] := "137,00"
hIniVenda["DescAcrEntr"] := Hash()
hIniVenda["DescAcrEntr"]["vDescSubtot"] := "7,00"
hIniVenda["Pagto001"] := Hash()
hIniVenda["Pagto001"]["cMP"] := "01"
hIniVenda["Pagto001"]["vMP"] := "1400"
hIniVenda["DadosAdicionais"] := Hash()
hIniVenda["DadosAdicionais"]["infCpl"] := "Teste emissao CFe/SAT"
hIniVenda["ObsFisco001"] := Hash()
hIniVenda["ObsFisco001"]["xCampo"] := "ObsFisco 1"
hIniVenda["ObsFisco001"]["xTexto"] := "Teste ObsFisco 1"
strIniVenda := hb_iniWriteStr(hIniVenda)
// Venda
?"Ini Venda"
?strIniVenda
?""
?"-------------------------------------------------------------------------------------------------------------"
?""
vendaRetorno := sat:CriarEnviarCFe(strIniVenda)
?vendaRetorno
?""
?"-------------------------------------------------------------------------------------------------------------"
?""
hIni := hb_iniReadStr(vendaRetorno)
cSection := hIni["ENVIO"]
if cSection["CodigoDeRetorno"] != "6000"
?cSection["Resultado"]
else
?"Impressão Preview"
sat:ImprimirExtratoVenda(cSection["XML"], "")
?"Impressão PDF"
?sat:GerarPDFExtratoVenda(cSection["XML"], "")
end if
sat:DesInicializar()
sat:Destroy()
sat := nil
return NIL
********************************************************************************
CREATE CLASS ACBrSat
VISIBLE:
METHOD New() CONSTRUCTOR
METHOD New(eArqConfig, eChaveCrypt) CONSTRUCTOR
DESTRUCTOR Destroy
METHOD Nome
METHOD Versao
METHOD ConfigLer(eArqConfig)
METHOD ConfigGravar(eArqConfig)
METHOD ConfigLerValor(eSessao, eChave)
METHOD ConfigGravarValor(eSessao, eChave, eValor)
METHOD Inicializar
METHOD DesInicializar
METHOD AssociarAssinatura(CNPJvalue, assinaturaCNPJs)
METHOD BloquearSAT()
METHOD DesbloquearSAT()
METHOD TrocarCodigoDeAtivacao(codigoDeAtivacaoOuEmergencia, opcao, novoCodigo)
METHOD ConsultarSAT()
METHOD ConsultarStatusOperacional()
METHOD ConsultarNumeroSessao(cNumeroDeSessao)
METHOD AtualizarSoftwareSAT()
METHOD ComunicarCertificadoICPBRASIL(certificado)
METHOD ExtrairLogs(eArquivo)
METHOD TesteFimAFim(eArquivoXmlVenda)
METHOD GerarAssinaturaSAT(eCNPJSHW, eCNPJEmitente)
METHOD CriarCFe(eArquivoIni)
METHOD CriarEnviarCFe(eArquivoIni)
METHOD EnviarCFe(eArquivoXml)
METHOD CancelarCFe(eArquivoXml)
METHOD ImprimirExtratoVenda(eArqXMLVenda, eNomeImpressora)
METHOD ImprimirExtratoResumido(eArqXMLVenda, eNomeImpressora)
METHOD ImprimirExtratoCancelamento(eArqXMLVenda, eArqXMLCancelamento, eNomeImpressora)
METHOD GerarImpressaoFiscalMFe(eArqXMLVenda)
METHOD GerarPDFExtratoVenda(eArqXMLVenda, eNomeArquivo)
METHOD GerarPDFCancelamento(eArqXMLVenda, eArqXMLCancelamento, eNomeArquivo)
METHOD EnviarEmail(eArqXMLVenda, sPara, sAssunto, eNomeArquivo, sMensagem, sCC, eAnexos)
END CLASS
METHOD New(eArqConfig, eChaveCrypt) CLASS ACBrSat
local hResult, buffer, bufferLen, oErr
::hHandle := DllLoad(ACBrLIBSat)
if ::hHandle = nil
oErr := ErrorNew()
oErr:Severity := ES_ERROR
oErr:Description := "Erro a carregar a dll [" + ACBrLIBSat + "]"
Throw(oErr)
endif
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_Inicializar", hb_StrToUTF8(eArqConfig), hb_StrToUTF8(eChaveCrypt))
::CheckResult(hResult)
RETURN Self
METHOD Destroy CLASS ACBrSat
DllCall(::hHandle, DLL_OSAPI, "SAT_Finalizar")
DllUnload(::hHandle)
RETURN
METHOD CheckResult(hResult) CLASS ACBrSat
local buffer, bufferLen, oErr
if hResult >= 0
RETURN nil
endif
bufferLen := STR_LEN
buffer := Space(bufferLen)
DllCall(::hHandle, DLL_OSAPI, "SAT_UltimoRetorno", @buffer, @bufferLen)
if bufferLen > STR_LEN
buffer := Space(bufferLen)
DllCall(::hHandle, DLL_OSAPI, "SAT_UltimoRetorno", @buffer, @bufferLen)
endif
oErr := ErrorNew()
oErr:Severity := ES_ERROR
oErr:Description := hb_UTF8ToStr(buffer)
Throw(oErr)
RETURN nil
METHOD ProcessResult(buffer, bufferLen) CLASS ACBrSat
if bufferLen > STR_LEN
buffer := Space(bufferLen)
DllCall(::hHandle, DLL_OSAPI, "SAT_UltimoRetorno", @buffer, @bufferLen)
endif
RETURN buffer
METHOD Nome CLASS ACBrSat
local hResult, buffer, bufferLen, ret
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_Nome", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD Versao CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_Versao", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ConfigLer(eArqConfig) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConfigLer", hb_StrToUTF8(eArqConfig))
::CheckResult(hResult)
RETURN nil
METHOD ConfigGravar(eArqConfig) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConfigGravar", hb_StrToUTF8(eArqConfig))
::CheckResult(hResult)
RETURN nil
METHOD ConfigLerValor(eSessao, eChave) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConfigLerValor", hb_StrToUTF8(eSessao), hb_StrToUTF8(eChave), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ConfigGravarValor(eSessao, eChave, eValor) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConfigGravarValor", hb_StrToUTF8(eSessao), hb_StrToUTF8(eChave), hb_StrToUTF8(eValor))
::CheckResult(hResult)
RETURN nil
METHOD Inicializar CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_InicializarSAT")
::CheckResult(hResult)
RETURN nil
METHOD DesInicializar CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_DesInicializar")
::CheckResult(hResult)
RETURN nil
METHOD AssociarAssinatura(CNPJvalue, assinaturaCNPJs) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_AssociarAssinatura", hb_StrToUTF8(CNPJvalue), hb_StrToUTF8(assinaturaCNPJs), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD BloquearSAT() CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_BloquearSAT", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD DesbloquearSAT() CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_DesbloquearSAT", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD TrocarCodigoDeAtivacao(codigoDeAtivacaoOuEmergencia, opcao, novoCodigo)
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_TrocarCodigoDeAtivacao", hb_StrToUTF8(codigoDeAtivacaoOuEmergencia), opcao, hb_StrToUTF8(novoCodigo), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ConsultarSAT() CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConsultarSAT", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ConsultarStatusOperacional() CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConsultarStatusOperacional", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ConsultarNumeroSessao(cNumeroDeSessao) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ConsultarNumeroSessao", cNumeroDeSessao, @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD AtualizarSoftwareSAT() CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_AtualizarSoftwareSAT", @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ComunicarCertificadoICPBRASIL(certificado) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ComunicarCertificadoICPBRASIL", hb_StrToUTF8(certificado), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ExtrairLogs(eArquivo) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ExtrairLogs", hb_StrToUTF8(eArquivo))
::CheckResult(hResult)
RETURN nil
METHOD TesteFimAFim(eArquivoXmlVenda) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_TesteFimAFim", hb_StrToUTF8(eArquivoXmlVenda), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD GerarAssinaturaSAT(eCNPJSHW, eCNPJEmitente) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_GerarAssinaturaSAT", hb_StrToUTF8(eCNPJSHW), hb_StrToUTF8(eCNPJEmitente), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD CriarCFe(eArquivoIni) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_CriarCFe", hb_StrToUTF8(eArquivoIni), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD CriarEnviarCFe(eArquivoIni) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_CriarEnviarCFe", hb_StrToUTF8(eArquivoIni), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD EnviarCFe(eArquivoXml) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_EnviarCFe", hb_StrToUTF8(eArquivoXml), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD CancelarCFe(eArquivoXml) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_CancelarCFe", hb_StrToUTF8(eArquivoXml), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD ImprimirExtratoVenda(eArqXMLVenda, eNomeImpressora) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ImprimirExtratoVenda", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(eNomeImpressora))
::CheckResult(hResult)
RETURN nil
METHOD ImprimirExtratoResumido(eArqXMLVenda, eNomeImpressora) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ImprimirExtratoResumido", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(eNomeImpressora))
::CheckResult(hResult)
RETURN nil
METHOD ImprimirExtratoCancelamento(eArqXMLVenda, eArqXMLCancelamento, eNomeImpressora) CLASS ACBrSat
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_ImprimirExtratoCancelamento", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(eArqXMLCancelamento), hb_StrToUTF8(eNomeImpressora))
::CheckResult(hResult)
RETURN nil
METHOD GerarImpressaoFiscalMFe(eArqXMLVenda) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_GerarImpressaoFiscalMFe", hb_StrToUTF8(eArqXMLVenda), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD GerarPDFExtratoVenda(eArqXMLVenda, eNomeArquivo) CLASS ACBrSat
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_GerarPDFExtratoVenda", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(eNomeArquivo), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD GerarPDFCancelamento(eArqXMLVenda, eArqXMLCancelamento, eNomeArquivo)
local hResult, buffer, bufferLen
bufferLen := STR_LEN
buffer := Space(bufferLen)
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_GerarPDFCancelamento", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(eArqXMLCancelamento), hb_StrToUTF8(eNomeArquivo), @buffer, @bufferLen)
::CheckResult(hResult)
RETURN ::ProcessResult(buffer, bufferLen)
METHOD EnviarEmail(eArqXMLVenda, sPara, sAssunto, eNomeArquivo, sMensagem, sCC, eAnexos)
local hResult
hResult := DllCall(::hHandle, DLL_OSAPI, "SAT_EnviarEmail", hb_StrToUTF8(eArqXMLVenda), hb_StrToUTF8(sPara), hb_StrToUTF8(sAssunto), hb_StrToUTF8(eNomeArquivo), hb_StrToUTF8(sMensagem), hb_StrToUTF8(sCC), hb_StrToUTF8(eAnexos))
::CheckResult(hResult)
RETURN nil