Ir para conteúdo
  • Cadastre-se

dev botao

Exemplo Harbour Acbrlib Boleto


Nlfo
Ver Solução Respondido por Rafael Dias,
  • Este tópico foi criado há 1618 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Administradores

Boa tarde

As libs para  xHarbour foram feitas em parceria com o colega @jorge andrade, se tiver interesse podemos lhe auxiliar a iniciar também.

Att.

Consultora SAC ACBr

Juliana Tamizou

Gerente de Projetos ACBr / Diretora de Marketing AFRAC
Ajude o Projeto ACBr crescer - Seja Pro

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Você pode baixar os Demos e classes, pelo SVN, usando essa URL

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

No Link abaixo, tem instruções de como baixar os fontes

https://www.projetoacbr.com.br/fontes/

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

Olá estou fazendo um teste para gerar uma html de boletos, apresenta a seguinte mensagem:

"|Error /0  Nome do cedente não informado (Quit)                                  |
|Error /0  Nome do cedente não informado  "

Gostaria de saber como resolver no boleto.ini esta assim:

[Cedente]
Nome=Empresa teste
CNPJCPF=99.999.999/9999-99
Logradouro=Rua Evaristo Mendes 

Obrigado JMSilva

 

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Por favor anexe o INI que está enviando...

Também anexe o INI de configuração (ACBrLib.ini)
Se possível, habilite o Log da DLL, e também anexe o mesmo...

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Moderadores
11 minutos atrás, Silva José disse:

Bom dia

Para passar os dados do cedente utilize o método ConfigurarDados, passando o arquivo .ini como parâmetro:

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

Para passar os dados do Título utilize o método:

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

  • Curtir 1
Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, José M. S. Junior disse:

Bom dia

Para passar os dados do cedente utilize o método ConfigurarDados, passando o arquivo .ini como parâmetro:

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

Para passar os dados do Título utilize o método:

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

Júnior, está dando pau no acesso:

503 Service Unavailable

No server is available to handle this request.

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, José M. S. Junior disse:

Pode ser algo no acesso local... Veja a definição do método:

image.png

Abriu no IE. Obrigado

  • Curtir 1

Jorge Andrade

 

"Quem tem medo de perguntar, está fadado a eternizar-se na dúvida - [Jorge Andrade]";
 

"A soberba,  é o sentimento caracterizado pela pretensão de superioridade sobre as demais pessoas, levando a manifestações ostensivas de arrogância, por vezes sem fundamento algum em fatos ou variáveis reais - [Desconhecido";
 

"Aquele  que pesquisa antes de indagar, tem a grande chance de dirimir as suas dúvidas, fixar o aprendizado da pesquisa e evoluir para outros conhecimentos inesperados - [Jorge Andrade]";
 

"Os políticos e as fraldas devem ser trocados frequentemente e pela mesma razão - [Éça de Queiroz]".

Link para o comentário
Compartilhar em outros sites

4 horas atrás, José M. S. Junior disse:

Bom dia

Para passar os dados do cedente utilize o método ConfigurarDados, passando o arquivo .ini como parâmetro:

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

Para passar os dados do Título utilize o método:

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

Olá com base nas informações acima, consegui  gerar um boleto de teste pela ACBr, porém só foi possível na opção Imprimir, as opções de GerarHTML e GerarPDF estão com problemas, possivelmente causado pelo método SetDiretorioArquivo.

Encontrei dois Bugs, que gostaria que fosse analisado pela equipe técnica ACBr:

Primeiro:

METHOD New(eArqConfig, eChaveCrypt) CLASS ACBrBoleto
    local hResult, buffer, bufferLen, oErr

    ::hHandle := DllLoad(ACBrLIB)
    if Empty(::hHandle) // = nil
        oErr := ErrorNew()
        oErr:Severity := ES_ERROR
        oErr:Description := "Erro a carregar a dll [" + ACBrLIB + "]"
        Throw(oErr)
    endif
    hResult := DllCall(::hHandle, DLL_OSAPI, "Boleto_Inicializar", hb_StrToUTF8(eArqConfig), hb_StrToUTF8(eChaveCrypt))
    ::CheckResult(hResult)
    RETURN Self

Este erro só acontece se não encontrar a DLL, o retorno da variável e um valor nulo mas não é "nil" , por isso acredito que uso da função EMPTY() se faz necessária ao invés de   if ::hHandle = nil

Segundo: 

METHOD SetDiretorioArquivo(eDir, eArq) CLASS ACBrBoleto
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_OSAPI, "Boleto_SetDiretorioArquivo", @buffer, @bufferLen)
    ::CheckResult(hResult)
    RETURN ::ProcessResult(buffer, bufferLen)

Observa-se que este método recebe Diretório e nome do arquivo, eDir e eArq respectivamente, porém é ignorado pelo método causa erro -6 e travamento da aplicação

Acredito que certo seria, 

 hResult := DllCall(::hHandle, DLL_OSAPI, "Boleto_SetDiretorioArquivo", hb_StrToUTF8(eDir), hb_StrToUTF8(eArq)) //@buffer, @bufferLen)

Desta forma resolve o erro, mas nos métodos GravaHTML() e GravaPDF() TRAVA A APLICAÇÃO, Veja os arquivos anexo.

att

José M. Silva

 

 

ACBrLibBoleto-20191021A.log ACBrLibBoleto-20191021.log

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Essas modificações são nos fontes em Harbour, correto ?

Se SIM, você consegue corrigir e enviar os arquivos modificados ?

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

15 horas atrás, Daniel Simoes disse:

Essas modificações são nos fontes em Harbour, correto ?

Se SIM, você consegue corrigir e enviar os arquivos modificados ?

Sim, na Classe ACBrBoleto, o Método :New(), resolve mas o o método  :SetDiretorioArquivo(eDir, eArq) não, porque precisa de intervenção no arquivo ACBrBoleto32.dll (DllCall), para descobrir a causa do travamento, a alteração esta postada acima!

Aproveitando o Método :ConfigGravar(eArq) também não funciona, e o problema também esta na DLL. Interessante que Log registra que tudo correu sem problemas. kkk . vaje log abaixo 

Obs: Testei com e sem a path do arquivo de destino.

22/10/19 08:53:42:519 - TLibBoletoConfig.Gravar: c:\correio\log\Zeka.ini //registra que criou mas não cria o arquivo
22/10/19 08:53:42:532 - TLibBoletoConfig.Gravar - Feito

Sugestão:  Sugiro verificar na DLL o método :ConfigLer(), Porque ele grava o arquivo corretamente, porém pelo nome deveria apenas ler. 

Segue o arquivo alterado, mas precisa ajustar a DLL.

JMSilva

 

ACBrBoleto.prg

Editado por Silva José
Link para o comentário
Compartilhar em outros sites

7 horas atrás, Silva José disse:

Sim, na Classe ACBrBoleto, o Método :New(), resolve mas o o método  :SetDiretorioArquivo(eDir, eArq) não, porque precisa de intervenção no arquivo ACBrBoleto32.dll (DllCall), para descobrir a causa do travamento, a alteração esta postada acima!

Aproveitando o Método :ConfigGravar(eArq) também não funciona, e o problema também esta na DLL. Interessante que Log registra que tudo correu sem problemas. kkk . vaje log abaixo 

Obs: Testei com e sem a path do arquivo de destino.

22/10/19 08:53:42:519 - TLibBoletoConfig.Gravar: c:\correio\log\Zeka.ini //registra que criou mas não cria o arquivo
22/10/19 08:53:42:532 - TLibBoletoConfig.Gravar - Feito

Sugestão:  Sugiro verificar na DLL o método :ConfigLer(), Porque ele grava o arquivo corretamente, porém pelo nome deveria apenas ler. 

Segue o arquivo alterado, mas precisa ajustar a DLL.

JMSilva

 

ACBrBoleto.prg 10 kB · 4 downloads

No prg acima coloquei uma instrução para teste e esqueci de retirar, method IncluirTitulos(), hResult := 0. 

METHOD IncluirTitulos(eArquivoIni, eTpSaida) CLASS ACBrBoleto
    local hResult, buffer, bufferLen
    bufferLen := STR_LEN
    buffer := Space(bufferLen)
    hResult := DllCall(::hHandle, DLL_OSAPI, "Boleto_IncluirTitulos", hb_StrToUTF8(eArquivoIni), hb_StrToUTF8(eTpSaida), @buffer, @bufferLen)
    ::CheckResult(hResult)
    //hResult := 0   //não existe
    RETURN ::ProcessResult(buffer, bufferLen)

ok

Link para o comentário
Compartilhar em outros sites

  • Moderadores

Bom dia @Silva José

O componente utiliza o diretório configurado no arquivo ACBrLib.ini para geração do .pdf ou .html, conforme abaixo:

[BoletoBancoFCFortesConfig]
...
NomeArquivo=C:\PDf\Arquivo1.pdf

Neste caso, pode utilizar os Métodos de Configuração e Leitura para alterar o arquivo ACBrLib.ini, conforme exemplo do demo.

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

 

O método BOLETO_SetDiretorioArquivo(...) é um método independente, deve utilizá-lo antes de cada método BOLETO_GerarPDF, se desejar alterar o nome do arquivo. Este método altera o diretório e Nome do arquivo, para cada pdf ou html a ser gerado. Mas não precisa utilizar os métodos de Configuração neste caso.

  • Curtir 2
Consultor SAC ACBr

José Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Solution

O método de gravação do ini e de leitura esta funcionando correto o mesmo método é usado em todas as dll.
Mandei uma correção para a classe Boleto para o método SetDiretorioArquivo o mesmo estava incorreto.

 

Obs.: Agora que vi o seu problema é quando manda salvar com outro nome correto, pelo que vi realmente esta incorreto vou mandar uma atualização.

 

  • Curtir 2

 

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Rafael Dias disse:

O método de gravação do ini e de leitura esta funcionando correto o mesmo método é usado em todas as dll.
Mandei uma correção para a classe Boleto para o método SetDiretorioArquivo o mesmo estava incorreto.

 

Obs.: Agora que vi o seu problema é quando manda salvar com outro nome correto, pelo que vi realmente esta incorreto vou mandar uma atualização.

 

Show, Funcionou corretamente!

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1618 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.