Jorge Andrade Posted May 28, 2019 Report Share Posted May 28, 2019 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, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 28, 2019 Report Share Posted May 28, 2019 Eu tenho interesse. Como faço para começar? Jorge Andrade 1 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted May 28, 2019 Author Report Share Posted May 28, 2019 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, . Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 28, 2019 Report Share Posted May 28, 2019 Eu uso o ACBr Monitor faz muito tempo e gosto muito dele, se a DLL ou LIB tiver todos os recursos do monitor e as atualizações simultâneas as do monitor eu migrarei. Confirme, por favor, com o RAFAEL sobre as atualizações. Jorge Andrade 1 Quote Link to comment Share on other sites More sharing options...
miragerr Posted May 28, 2019 Report Share Posted May 28, 2019 Ola...Boa noite Também tenho interesse. Jorge Andrade 1 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted May 30, 2019 Author Report Share Posted May 30, 2019 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, Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted May 31, 2019 Author Report Share Posted May 31, 2019 Mais uma atualização. Ontem, eu e o Rafael ficamos até certa, desenvolvendo uma classe para uso das DLL's, já tenho algo rascunhado e devo testar no decorrer do dia, , em caso de dificuldade, peço ao Oscar e Jackson participar dos testes. []s, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted May 31, 2019 Report Share Posted May 31, 2019 Estou a disposição. Você conferiu com o Rafael se as atualizações serão simultâneas as do monitor no site do ACBr? Quote Link to comment Share on other sites More sharing options...
miragerr Posted May 31, 2019 Report Share Posted May 31, 2019 Ola... Bom dia Tambem estou a disposição, e realmente o que o oRibeiro falou, tem procedimento, pois se o componente é atualizado e a DLL não... fica complicado. Fico no aguardo Quote Link to comment Share on other sites More sharing options...
william Posted May 31, 2019 Report Share Posted May 31, 2019 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. Quote Link to comment Share on other sites More sharing options...
aferra Posted May 31, 2019 Report Share Posted May 31, 2019 Dependendo do horário, também estou a disposição. mas teria que ver sobre essa atualização senão morre na praia. Quote Link to comment Share on other sites More sharing options...
Wellington Vieira Posted May 31, 2019 Report Share Posted May 31, 2019 Olá Boa tarde, Também tenho interesse, principalmente pelo ACBRBOLETO, estou a disposição.. Obrigado. Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted May 31, 2019 Author Report Share Posted May 31, 2019 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 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted June 10, 2019 Author Report Share Posted June 10, 2019 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, Quote Link to comment Share on other sites More sharing options...
mmatos566 Posted June 15, 2019 Report Share Posted June 15, 2019 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. Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted June 15, 2019 Author Report Share Posted June 15, 2019 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, Quote Link to comment Share on other sites More sharing options...
sygecom Posted June 15, 2019 Report Share Posted June 15, 2019 Eu também tenho interesse no ACBRBOLETO Quote Link to comment Share on other sites More sharing options...
miragerr Posted August 11, 2019 Report Share Posted August 11, 2019 Ola, Bom dia a todos Alguma novidade sobre a DLL do ACBR para a NFe ? Fico no aguardo Quote Link to comment Share on other sites More sharing options...
Ariston Santos Posted August 11, 2019 Report Share Posted August 11, 2019 Também tenho interesse. Me coloco à disposição para ajudar no que for possível. Envie para: suporte@arsoft-ap.com.br ou ariston.ap@bol.com.br Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted August 12, 2019 Author Report Share Posted August 12, 2019 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, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 13, 2019 Report Share Posted September 13, 2019 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/ Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted September 13, 2019 Author Report Share Posted September 13, 2019 Oscar, é a mesma que eu postei aqui, embora postei a classe criada pelo Rafael Dias, embora, o exemplo é para quem usa o INI. []s, Quote Link to comment Share on other sites More sharing options...
oribeiro Posted September 13, 2019 Report Share Posted September 13, 2019 Muito bom saber que esse assunto está andando. Vamos tentar montar exemplos de NFe com as libs. Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted September 17, 2019 Author Report Share Posted September 17, 2019 esse projeto jah tem em java, VB e C#(C-Sharp), acho que o xharbour eh a bola da vez bom uma pergunta, para testar o exemplo SAT que encontra-se na pasta harbour eh preciso o acbr monitor? Não, a DLL é justamente pra vc não ter que usar o monitor. Jmsilva 1 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted September 17, 2019 Author Report Share Posted September 17, 2019 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 Jmsilva 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.