HERGON Posted December 30, 2020 Report Share Posted December 30, 2020 Bom dia Alguém já implementou, em xHarbour, boletos/remessa com ACBr utilizando a DLL? Hoje utilizo o ACBr Monitor, mas gostaria de migrar para DLL, se tiver algum exemplo para me basear. Agradeço qualquer ajuda. Herberson Gontijo Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 2, 2021 Report Share Posted January 2, 2021 #include "Struct.ch" #include "Fivewin.ch" //https://acbr.sourceforge.io/ACBrLib/MetodosBoleto.html Procedure Main() TACBrBol():New() Return /* TipoResposta: Define qual será o formato da resposta. 0 = Formato INI (Padrão); 1 = Formato XML; 2 = Formato JSON. CodificacaoResposta: Define qual será a codificação das respostas. 0 = UTF8 (Padrão); 1 = ANSI; LogNivel: Define qual o nível do log da biblioteca. 0 = Nenhum; 1 = Simples; 2 = Normal; 3 = Completo; 4 = Paranoico; LogPath: O Path onde será salvo o arquivo de log da biblioteca (Padrão Vazio) [Principal] TipoResposta=0 LogNivel=4 LogPath=c:\correio\ */ CLASS TACBrBol DATA hBol INIT Hash() DATA oBol DATA cFileIni METHOD New() CONSTRUCTOR METHOD Cedente() METHOD Banco() METHOD Conta() METHOD Config() METHOD Titulo(nI) METHOD Create_Ini() ENDCLASS **============================================================ METHOD New() CLASS TACBrBol Local nI Set Default To "c:\Temp\" ::cFileIni := "C:\Temp\Titulos.ini" //nome o onde quiser ::oBol := ACBrBoleto():New() //"C:\Temp\teste.INI",'') ::Config() ::Cedente() ::Banco() ::Conta() For nI:=1 to 4 //quantidade de boleto ::Titulo(nI) Next ::Create_Ini() ::oBol:LimparLista() //::oBol:SetDiretorioArquivo("c:\temp\","Boletopdf") ::oBol:IncluirTitulos(::cFileIni) ::oBol:GerarPDF() //::oBol:Imprimir() ::oBol:GerarRemessa("c:\temp\",::cFileIni,"File.REM") //::oBol:LerRetorno("C:\temp\","file.ret") ::oBol:LimparLista() ::oBol := nil MsgInfo("Boletos gerado com sucesso !") Return Self **============================================================ METHOD Config() CLASS TACBrBol ::oBol:ConfigGravarValor("Principal","LogNivel","4") ::oBol:ConfigGravarValor("Principal","LogPath","c:\temp\") ::oBol:ConfigGravarValor("Sistema","Nome","meu soft") ::oBol:ConfigGravarValor("Sistema","Versao","1.0") ::oBol:ConfigGravarValor("Sistema","Data","29/09/2020") ::oBol:ConfigGravarValor("Sistema","Descricao","Escreve aqui qq coisa") ::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","DirLogo","C:\Temp\") ::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","MostrarPreview","1") ::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","MostrarProgresso","1") //duas formas, aqui ou pelo metodo :SetDiretorioArquivo( ::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","NomeArquivo","c:\temp\Bol_PDF.pdf") ::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","NumeroCopias","1") //::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","PrinterName","Sua_impressora") //::oBol:ConfigGravarValor("BoletoBancoFCFortesConfig","SoftwareHouse","Sua_Empresa") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","DataArquivo","29/09/2020") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","DirArqRemessa","C:\Temp\") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","DirArqRetorno","C:\Temp\") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","DirHomologacao","0") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","ImprimirMensagemPadrao","1") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","LayoutRemessa","1") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","LeCedenteRetorno","0") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","NomeArqRemessa","File_Remessa") ::oBol:ConfigGravarValor("BoletoDiretorioConfig","NomeArqRetorno","File_Retorno") //::oBol:ConfigGravarValor("BoletoDiretorioConfig","NomeroArquivo","0") ::oBol:ConfigGravar() ::oBol:ConfigLer() Return Nil **============================================================ METHOD Cedente() CLASS TACBrBol ::hBol["Cedente"] := Hash() ::hBol["Cedente","Nome"] := "SAO JOAO LTDA." ::hBol["Cedente","CNPJCPF"] := "35373107000160" ::hBol["Cedente","Logradouro"] := "Rua Evaristo Mendes" ::hBol["Cedente","Numero"] := "200" ::hBol["Cedente","Bairro"] := "Centro" ::hBol["Cedente","Cidade"] := "Tatui" ::hBol["Cedente","CEP"] := "18.270-000" ::hBol["Cedente","Complemento"] := "Sala 10" ::hBol["Cedente","UF"] := "SP" ::hBol["Cedente","RespEmis"] := "0" ::hBol["Cedente","TipoPessoa"] := "1" ::hBol["Cedente","CodigoCedente"] := "123456" ::hBol["Cedente","LayoutBol"] := "1" ::hBol["Cedente","CaracTitulo"] := "0" ::hBol["Cedente","TipoCarteira"] := "0" ::hBol["Cedente","TipoDocumento"] := "0" ::hBol["Cedente","Modalidade"] := "17" ::hBol["Cedente","CodTransmissao"] := "10" ::hBol["Cedente","Convenio"] := "123456" Return nil /* LayoutBol:= 0 - 6 0= 1=c/canhoto-bloco 2=dois boletos s/recibo 3=dois boletos c/recibo 4=um boletos c/recibo */ **============================================================ METHOD Banco() CLASS TACBrBol ::hBol["Banco"] := Hash() ::hBol["Banco","Numero"] := "001" ::hBol["Banco","CNAB"] := "1" ::hBol["Banco","IndiceACBr"] := "1" ::hBol["Banco","NumeroCorrespondente"] := "200" ::hBol["Banco","VersaoArquivo"] := "0" ::hBol["Banco","VersaoLote"] := "0" Return nil **============================================================ METHOD Conta() CLASS TACBrBol ::hBol["Conta"] := Hash() ::hBol["Conta","Conta"] := "011234567" ::hBol["Conta","DigitoConta"] := "1" ::hBol["Conta","Agencia"] := "0734" ::hBol["Conta","DigitoAgencia"] := "2" ::hBol["Conta","DigitoVerificadorAgenciaConta"] := "0" Return nil METHOD Titulo(nCt) CLASS TACBrBol Local cTitulo := "Titulo"+AllTrim(Str(nCt,2)) ::hBol[cTitulo] := Hash() ::hBol[cTitulo,"NumeroDocumento"] := "000010" ::hBol[cTitulo,"NossoNumero"] := "0000001" ::hBol[cTitulo,"Carteira"] := "20" ::hBol[cTitulo,"ValorDocumento"] := "100,50" ::hBol[cTitulo,"Vencimento"] := "10/09/2010" ::hBol[cTitulo,"ValorMoraJuros"] := "0,50" ::hBol[cTitulo,"DataDocumento"] := "10/08/2010" ::hBol[cTitulo,"DataProcessamento"] := "10/08/2010" ::hBol[cTitulo,"DataAbatimento"] := "05/09/2010" ::hBol[cTitulo,"DataDesconto"] := "07/09/2010" ::hBol[cTitulo,"DataMoraJuros"] := "12/09/2010" ::hBol[cTitulo,"DiasDeProtesto"] := "0" ::hBol[cTitulo,"DataProtesto"] := "10/10/2010" ::hBol[cTitulo,"DataMulta"] := "10/10/2010" ::hBol[cTitulo,"ValorAbatimento"] := "5,00" ::hBol[cTitulo,"ValorDesconto"] := "0,50" ::hBol[cTitulo,"ValorMoraJuros"] := "0,55" ::hBol[cTitulo,"ValorIOF"] := "3,50" ::hBol[cTitulo,"ValorOutrasDespesas"] := "2,50" ::hBol[cTitulo,"MultaValorFixo"] := "0" ::hBol[cTitulo,"PercentualMulta"] := "05,00" ::hBol[cTitulo,"LocalPagamento"] := "Pagável em qualquer agência bancária mesmo após o vencimento" ::hBol[cTitulo,"Especie"] := "DM" ::hBol[cTitulo,"EspecieMod"] := "R$" ::hBol[cTitulo,"Sacado.NomeSacado"] := "Sacado Teste" ::hBol[cTitulo,"Sacado.CNPJCPF"] := "999.999.999.99" ::hBol[cTitulo,"Sacado.Pessoa"] := "0" ::hBol[cTitulo,"Sacado.Logradouro"] := "Rua Jose Rodrigues" ::hBol[cTitulo,"Sacado.Numero"] := "100" ::hBol[cTitulo,"Sacado.Bairro"] := "Jardim Moderno" ::hBol[cTitulo,"Sacado.Complemento"] := "Casa" ::hBol[cTitulo,"Sacado.Cidade"] := "Tatui" ::hBol[cTitulo,"Sacado.UF"] := "SP" ::hBol[cTitulo,"Sacado.CEP"] := "18277.500" ::hBol[cTitulo,"Sacado.Email"] := "teste@email.com" ::hBol[cTitulo,"Sacado.SacadoAvalista.NomeAvalista"] := "Nome do Avalista" ::hBol[cTitulo,"Sacado.SacadoAvalista.CNPJCPF"] := "9999999999" ::hBol[cTitulo,"Sacado.SacadoAvalista.Logradouro"] := "Rua das Flores" ::hBol[cTitulo,"Sacado.SacadoAvalista.Numero"] := "99" ::hBol[cTitulo,"Sacado.SacadoAvalista.Complemento"] := "Casa" ::hBol[cTitulo,"Sacado.SacadoAvalista.Bairro"] := "Centro" ::hBol[cTitulo,"Sacado.SacadoAvalista.Cidade"] := "Tatui" ::hBol[cTitulo,"Sacado.SacadoAvalista.UF"] := "SP" ::hBol[cTitulo,"Sacado.SacadoAvalista.CEP"] := "9999999" ::hBol[cTitulo,"Sacado.SacadoAvalista.Email"] := "teste@email.com" ::hBol[cTitulo,"Sacado.SacadoAvalista.Fone"] := "(99)999999999" ::hBol[cTitulo,"Sacado.SacadoAvalista.InscricaoNr"] := "9999999" ::hBol[cTitulo,"Mensagem"] := "teste1|teste2" ::hBol[cTitulo,"Instrucao1"] := "10" ::hBol[cTitulo,"Instrucao2"] := "11" ::hBol[cTitulo,"Aceite"] := "1" ::hBol[cTitulo,"OcorrenciaOriginal.TipoOcorrencia"] := "0" ::hBol[cTitulo,"Parcela"] := "1" ::hBol[cTitulo,"TotalParcelas"] := "1" ::hBol[cTitulo,"SeuNumero"] := "000020" ::hBol[cTitulo,"TipoDiasProtesto"] := "1" ::hBol[cTitulo,"TipoImpressao"] := "1" ::hBol[cTitulo,"CodigoMora"] := "1" ::hBol[cTitulo,"TipoDesconto"] := "0" ::hBol[cTitulo,"TipoDesconto2"] := "0" Return nil **============================================================ METHOD Create_Ini() CLASS TACBrBol Local oIni,oGrupo,oData If File(::cFileIni) FErase(::cFileIni) Endif //gera o arquivo ini para ler e gerar o boleto INI oIni FILE ::cFileIni For EAch oGrupo IN ::hBol For EAch oData IN oGrupo:Value SET SECTION oGrupo:Key ENTRY oData:Key TO Trim(oData:Value) OF oIni Next Next ENDINI Return Nil Veja se ajuda ! Veja no mettodo New() chama ::oBol:GerarRemessa("c:\temp\",::cFileIni,"File.REM") Quote Link to comment Share on other sites More sharing options...
HERGON Posted January 5, 2021 Author Report Share Posted January 5, 2021 Bom dia Obrigado pela resposta Jmsilva, será de grande ajuda. Infelizmente não tenho a LIB do ACBr para testar. Vou tentar conseguir, mas o fonte que disponibilizou facilitará muito o meu trabalho, o que agradeço mais uma vez. Herberson Gontijo Quote Link to comment Share on other sites More sharing options...
sygecom Posted January 6, 2021 Report Share Posted January 6, 2021 Acredito que esse metodo postado pelo colega, usa o ACBRMONITOR e não a DLL, mas não tenho certeza, a ultima vez que pesquisei no Nov/2020 ainda não tinha versão do ACBR BOLETO para DLL. Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 7, 2021 Report Share Posted January 7, 2021 5 horas atrás, sygecom disse: Acredito que esse metodo postado pelo colega, usa o ACBRMONITOR e não a DLL, mas não tenho certeza, a ultima vez que pesquisei no Nov/2020 ainda não tinha versão do ACBR BOLETO para DLL. Amigo vc equivocou-se, usa apenas a dll e o prg que é fornecido com a dll. Está rotina NÃO USA O ACBRMONITOR. Quote Link to comment Share on other sites More sharing options...
sygecom Posted January 8, 2021 Report Share Posted January 8, 2021 Que ótimo mestre, essa DLL para boletos conseguimos assinando o plano de suporte do ACBR? Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 8, 2021 Report Share Posted January 8, 2021 40 minutos atrás, sygecom disse: Que ótimo mestre, essa DLL para boletos conseguimos assinando o plano de suporte do ACBR? Sim amigo, está tudo lá, aliás foi o único produto que usei da acbr até agora, funciona bem, está implantado no cliente. Muito bom. Quote Link to comment Share on other sites More sharing options...
sygecom Posted January 8, 2021 Report Share Posted January 8, 2021 Valeu colega, poderia compartilhar como chama a DLL do ACBR no xbase ? Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted January 9, 2021 Report Share Posted January 9, 2021 13 horas atrás, sygecom disse: Valeu colega, poderia compartilhar como chama a DLL do ACBR no xbase ? Jovem, basta copiar a dll na mesma pasta do seu sistema, que a classe ACBrBoleto():New() que é fornecido com dll, disponível para download, faz o devido acesso. Ok. Quote Link to comment Share on other sites More sharing options...
sygecom Posted January 13, 2021 Report Share Posted January 13, 2021 Valeu mestre, tudo certo. Quote Link to comment Share on other sites More sharing options...
infosys2 Posted April 19, 2022 Report Share Posted April 19, 2022 Boa tarde! Estou tentando implementar o acbr boletos e estou sem conseguir gerar o numero de lote no arquivo de remessa sempre retoirna o mesmo numero de sequencial de arquivo lote. oBoleto:GerarRemessa(".\remessa\rem\",2 ,"arquivo.rem") * metoda estar assim METHOD GerarRemessa(eDir, eNumArquivo, eNomeArq) CLASS ACBrBoleto local hResult hResult := DllCall(::hHandle, DLL_OSAPI, "Boleto_GerarRemessa", hb_StrToUTF8(eDir), eNumArquivo, hb_StrToUTF8(eNomeArq)) ::CheckResult(hResult) RETURN nil Toda ajuda será bem vinda! 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.