Jump to content
Fivewin Brasil

ACBRLIB ou melhor ACBRDLL


Jorge Andrade

Recommended Posts

Pessoal

Bom dia

 

Meses atrás, comentei sobre as DLL's do ACBR que já estão prontas, ACBREMAIL e ACBRSAT. Conversando com o pai da criança RAFAEL DIAS, ele se colocou a disposição para ajudar no que for possível para que possamos utilizar as DLL'S com o XHARBOUR,   sem a necessidade de usar o MONITOR ou mesmo compilar os componentes pelas ferramentas LAZARUS ou DELPHI.

Se alguém da comunidade, tiver tempo, interesse e vontade participar dos estudos e testes pra implementar tais processos, me avise que converso com ele e vemos uma forma de  passar todas as informações possiveis para a sua compreensão da ferramenta em relação as DLL's.

 

[]s,

Link to comment
Share on other sites

Opa! Blz Oscar, vou falar com o Rafael e ver o que ele precisa de informações do xHb para que possamos implementar as chamadas das funções das dll's.

Já passei pra ele os métodos e funções do xHb

Item Description
CallDll() Executes a function located in a dynamically loaded external library.
DllCall() Executes a function located in a dynamically loaded external library.
DllExecuteCall() Executes a DLL function via call template.
DllLoad() Loads a DLL file into memory.
DllPrepareCall() Creates a call template for an external DLL function.
DllUnload() Releases a dynamically loaded external DLL from memory.
FreeLibrary() Releases a dynamically loaded external DLL from memory.
GetLastError() Retrieves the error code of the last dynamically called DLL function.
GetProcAddress() Retrieves the memory address of a function in a dynamically loaded DLL.
HB_LibDo() Executes a function located in a dynamically loaded xHarbour DLL.
LibFree() Releases a dynamically loaded xHarbour DLL from memory.
LibLoad() Loads an xHarbour DLL file into memory.
LoadLibrary() Loads an external DLL file into memory.
SetLastError() Sets a numeric value as last error code.

e depois os parametros por função,

[]s,

.

Link to comment
Share on other sites

Atualizando o post.

 

Á todos, especialmente ao Oscar e o Jackson, conversei hoje com o Rafael e ele me disse que está terminando a DLL do ACBRBOLETO e  irá me contatar assim que terminar., então, além das citadas, teremos a de boleto junto.

Conforme ele me disse, que já andou verificando as funções e métodos e achou que será processo simples.

Obs: Quero agradecer ao Gilmer por permitir o post, embora seja relativo ao xHarbour/Fivewin, mas por envolver um aplicativo com várias funções concorrentes de outros no fórum.

[]s,

 

Link to comment
Share on other sites

pode até dar certo, mas quem vai ficar responsável pelas atualizações ? o acbr tem atualizações constantes de versões, ou seja a DLL vai ter que ser atualizada toda vez que sair uma nova versão do acbr...

lembro que em 2010 fizeram uma AcbrEcfDll e parou justamente por causa da falta de atualização.

Link to comment
Share on other sites

Pessoal, todas as vezes que o DFE sofrer alterações, as DLL's serão atualizadas tal qual o monitor, lembro que as DLL's, são justamente para não precisar utilizar o monitor, então, pense como se vc utilizasse a FLEXDOC ou qualquer outra DLL, todas as vezes que houve alterações dos documentos fiscais eletrônicos e a DLL for alterada, será necessário a sua atualização, desde de que ela seja recompilada.

Ele me passou já um esboço e vou compilar pra ver no que dá.

Sinceramente, fico muito feliz com o empenho dele em ajudar criando essa classe e logo devo disponibilizar aqui para apreciação e ajuda de todos.

[]s

 

Link to comment
Share on other sites

  • 2 weeks later...

Continuando. Estou efetuando os testes com a classe que o Rafael Dias disponibilizou, e criando todos os parametros  do arquivo INI de configuração da DLL, se alguém quiser passo por email (fnlinfsol@gmail.com ou skype fnlinf@hotmail.com, pois tentei anexar aqui sem sucesso.

De antemão, aviso que, somente usuários SAC tem direito a download das DLL's, portanto é, necessário aderir ao SAC pelo menos por um mês. Tentei disponibilizar para todos, como fiz meses atrás pro Rochinha, mas me solicitaram não fazer, tendo em vista que desprestigia os usuários SAC.

Lembro que não há limite de uso da DLL e que as demais para NF-e, MDF-e, CT-e e etc... estão sendo finalizadas.

 

[]s,

 

 

Link to comment
Share on other sites

tenho enteresse, porem sou novo, fique parado desde o inicio da nfce, to voltando, to começando com hminigui e pretendo fazer nfce, nfe, mais nao sei fazer, vejo falar deste monitor, e agora dll , preciso conhecer para testar e imprementar. como baixar e usar o menitor e a dll.

Link to comment
Share on other sites

Amigo, estou efetuando alguns testes com a classe que me foi disponibilizada, aqueles que me solicitaram eu repassei, já que não pude fazer up-load aqui e espero até a semana que vem, ter vários exemplos de uso da mesma,

Lembro que para efetuar download das DLL's é necessário ser usuário SAC no ACBR, nem que seja por um mês, onde poderá baixar o monitor atualizado semanalmente dentro do período de assinatura e atualizações das DLL's.

No site do ACBR, fiz uma postagem sobre o assunto, tal qual aqui.

[]s,

 

Link to comment
Share on other sites

  • 1 month later...

Classe do Sat:

 

#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
   #ifdef __PLATFORM__WINDOWS ///#if defined( __PLATFORM__WINDOWS )
      #define ACBrLIBSat "ACBrSAT32.dll"
      #define DLL_OSAPI DC_CALL_STD
   #else
      #define ACBrLIBSat "ACBrSAT32.dll"

 

 

A classe da Nfe ainda não tenho.
      #define DLL_OSAPI DC_CALL_STD
   #endif
#endif

#define STR_LEN 256

CREATE CLASS ACBrSat
HIDDEN:
    VAR hHandle

    METHOD CheckResult(hResult)
    METHOD ProcessResult(buffer, bufferLen)

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

PROCEDURE 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_CancelarCFe", 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

 

Demo para quem usar geração em TXT:

 

Function Main ()
   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()

   // 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 := nil
    
return NIL

Exemplos:

   sat := ACBrSat():New("", "")
   sat:ConfigGravarValor("Principal", "LogNivel", "4")
   sat:ConfigGravarValor("SAT", "Modelo", "2")

   sat:ConfigGravarValor("SAT", "ArqLog", "C:\windows\temp\satlog")
   sat:ConfigGravarValor("SAT", "NomeDLL", "C:\ACBrMonitorPLUS\SAT\elgin\dllsat.dll")
   sat:ConfigGravarValor("SAT", "CodigoDeAtivacao", "123456789")
   sat:ConfigGravarValor("SAT", "SignAC", "SGR-SAT SISTEMA DE GESTAO E RETAGUARDA DO SAT")
   sat:ConfigGravarValor("SATConfig", "ide_numeroCaixa", "3") //ide_numeroCaixa Define o numero de caixa padrão da CFe.
   sat:ConfigGravarValor("SATConfig", "ide_tpAmb", "0") //ide_tpAmb  taProducao = 0  taHomologacao = 1
   sat:ConfigGravarValor("SATConfig", "EhUTF8", "") //EhUTF8 Define se devemos utilizar codificação UTF8 ao se comunicar com o SAT.
   sat:ConfigGravarValor("SATConfig", "infCFe_versaoDadosEnt", "0,07") //infCFe_versaoDadosEnt Define qual será a versão do CFe utilizada.Ex.: 0,07 ou 0,08
   sat:ConfigGravarValor("SATConfig", "PaginaDeCodigo", "0") //PaginaDeCodigo Define a pagina de código que se deve utilizar ao se comunicar com o SAT.

   sat:ConfigGravarValor("SATConfigArquivos", "PastaCFeVenda", "X:\acbr\NFESAI\AUTORIZA\59") //PastaCFeVenda Define o caminho onde será salvos os arquivos de venda.
   sat:ConfigGravarValor("SATConfigArquivos", "SalvarCFe","0" ) //SalvarCFe Define se será salvo o arquivo de venda.
   sat:ConfigGravarValor("SATConfigArquivos", "SalvarCFeCanc", "0") //SalvarCFeCanc Define se será salvo o arquivo de cancelamento.
   sat:ConfigGravarValor("SATConfigArquivos", "SalvarEnvio", "0") //SalvarEnvio Define se será salvo o arquivo de envio para o sat.

  //sat:ConfigGravarValor("SATConfigArquivos", "SepararPorCNPJ", "0") //SepararPorCNPJ Define se deverá separar os arquivos por CNPJ.
  //sat:ConfigGravarValor("SATConfigArquivos", "SepararPorModelo", "0") //SepararPorModelo Define se deverá separar os arquivos por modelo.
  //sat:ConfigGravarValor("SATConfigArquivos", "SepararPorAno", "0") //SepararPorAno Define se deverá separar os arquivos por ano.
  //sat:ConfigGravarValor("SATConfigArquivos", "SepararPorMes", "0") //SepararPorMes Define se deverá separar os arquivos por mês.
  //sat:ConfigGravarValor("SATConfigArquivos", "SepararPorDia", "0") //SepararPorDia Define se deverá separar os arquivos por dia.

   sat:ConfigGravarValor("SATConfig", "ide_CNPJ", "14200166000166") //ide_CNPJ Exemplo da elgin: 16716114000172 Define o padrão CNPJ do emitente da CFe.
   sat:ConfigGravarValor("SATConfig", "emit_IE", "144842258111") //emit_IE Define o IE padrão do emitente do CFe.
   //sat:ConfigGravarValor("SATConfig", "emit_IM", "inscricao municipal do emitente") //emit_IM Define o IM padrão do emitente do CFe.
   sat:ConfigGravarValor("SATConfig", "emit_cRegTrib","0") //emit_cRegTrib RTSimplesNacional = 0 RTRegimeNormal = 1
   sat:ConfigGravarValor("SATConfig", "emit_cRegTribISSQN", "6") //emit_cRegTribISSQN RTISS MicroempresaMunicipal = 0
   sat:ConfigGravarValor("SATConfig", "emit_indRatISSQN", "0") //emit_indRatISSQN  Define indicador de rateio do desconto sobre subtotal entre itens sujeitos a

   sat:ConfigGravarValor("SATConfig", "emit_CNPJ", "16716114000172") //emit_CNPJ Exemplo da elgin: 14200166000166 Define o CNPJ padrão do emitente da CFe.

   sat:ConfigGravarValor("SATRede", "tipoInter", "0") //0 = infETHE
   sat:ConfigGravarValor("SATRede", "tipoLan", "0")  
   
   sat:ConfigGravarValor("Extrato", "LarguraBobina", "302") //LarguraBobina Define a largura da bobina.
    sat:ConfigGravarValor("Extrato", "MargemSuperior", "2") //MargemSuperior Define a margem superior da impressão.
   sat:ConfigGravarValor("Extrato", "MargemInferior", "4") //MargemInferior Define a margem inferior da impressão.
    sat:ConfigGravarValor("Extrato", "MargemEsquerda", "2") //MargemEsquerda Define a margem esquerda da impressão.
    sat:ConfigGravarValor("Extrato", "MargemDireita", "2") //MargemDireita Define a margem direita da impressão.
   sat:ConfigGravarValor("Extrato", "Tipo", "0") //TipoDefine o tipo de impressão a ser utilizada.tpFortes = 0 tpEscPos = 1
   //sat:ConfigGravarValor("Extrato", "Impressora", "nome a impressora para emissão do cupom") //Impressora Define o nome da impressora padrão a ser utilizada pela impressão.
   sat:ConfigGravarValor("Extrato", "ImprimeChaveEmUmaLinha", "0") //ImprimeChaveEmUma Define se deve imprimir a chave do CFe em apenas uma linha.

 

 

 

Dll's Necessárias , a quais podems ser baixadas por qualquer usuário Sac do Acbr.

ACBrSAT32.dll
ACBrSAT64.dll

libeay32.dll
libexslt.dll
libiconv.dll
libxml2.dll
libxslt.dll
msvcr120.dll
ssleay32.dll

 

Obs: A classe da NF-e ainda não tenho.

[]s, 

 

Link to comment
Share on other sites

  • 1 month later...

O ACBr lançará oficialmente amanhã uma biblioteca que pode ser agregada ao sistema sem a necessidade do uso do monitor.

Acredito que, com ela, será possível o próprio sistema configurar as pastas dos arquivos e certificado digital que será utilizado por cada empresa sem a necessidade de se instalar vários monitores ACBrs.

Parece muito interessante!

Se quiser ir se familiarizando, veja o link:

https://acbr.sourceforge.io/ACBrLib/BemVindo.html

Exemplos de programação de SAT usando a biblioteca:

http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Harbour/Sat/

 

Link to comment
Share on other sites

 

Jorge eh que não entendi essa frase. por isso perguntei:

O ACBr lançará oficialmente amanhã uma biblioteca que pode ser agregada ao sistema sem a necessidade do uso do monitor. Acredito que, com ela, será possível o próprio sistema configurar as pastas dos arquivos e certificado digital que será utilizado por cada empresa sem a necessidade de se instalar vários monitores ACBrs.

e continuo sem entender

Te explico amigo. A partir do momento que vc passar a usar as DLL's, não será mais necessário vc ativar o monitor, pq ficará por sua conta enviar os comandos para a dll, então em tempo de execução ou dinamicamente vc invoca/carrega/load na dll e envia os comandos conforme a sua necessidade, como se estivesse enviando para o monitor e ela fizesse parte do seu sistema. 

Os exemplos acima da dll sat, o Rafael Dias (Acbr) criou um classe em Harbour/Xharbour para facilitar o uso da dll, eu deixei uns exemplos acima de envio de comandos e ele fez um exemplo de geração e envio de uma venda sat,  como se estivesse gerando um arquivo INI para o monitor.

Se quiser mais informações me chame no skype: fnlinf

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...