Página 1 de 1

Usar HarbourBoleto com Harbour. SOLUÇÃO!

Enviado: 01 Jul 2014 21:10
por janio
Pessoal,

Ja vi alguns colegas se queixando de nao consegui usar o HarbourBoleto com o Harbour. Pois bem, como todo mundo ja sabe da minha labuta pra migrar de xharbour para harbour, também encontrei essa dificuldade.

Ja uso HarbourBoleto com xHarbour ha muitos anos e tem mim quebrado um galhão. Uso para os bancos Bradesco e Brasil.

Mas pra usar com harbour, basta algumas poucas modificações. Pra quem sabe (eu não sei), pode ate incluir algumas chamadas diretivas (#IFDEF __HARBOUR__,#ENDIF) pra ficar compativel aos dois harbour's. Quem souber por esse negocio, favor ajudar ne heheheheh.

Bom, pra usar HarbourBoleto com Harbour... eis os passos:

Meu ambiente:
- Harbour 3.2
- HarbourBoleto que acabei de baixar
/*
* $Id: ChangeLog,v 1.68 2013/11/08 10:59:40 marioargon Exp $
*/

Dos arquivos que vem no pacote do HarbourBoleto, vc vai precisar apenas dos arquivos:
- acento.prg
- htmlprint.prg
- oboleto.prg
- oremessa.prg

Primeiro passo:
- No oboleto.prg, substituir TODAS as chamadas do comando "LIKE" para a função hb_regexLike( <exp2>, <exp1> )
Exemplo
Substituir
CASE ::cCodBco like "(008|033|353)" //Santander Banespa
por
CASE hb_regexLike( "(008|033|353)", ::cCodBco )

Atenção: SUBSTITUIR TODAS AS CHAMADAS, OK!?

Segundo passo:
Ainda no oboleto.prg, deixar o METHOD Print... apenas assim:

Código: Selecionar todos

METHOD Print( lPreview, lPromptPrint, cPrinter ) CLASS oBoleto

   DEFAULT lPreview     TO ::lPreview ,;
           lPromptPrint TO .T.,;
           cPrinter     TO ""

    DEFAULT  cPrinter TO GetDefaultPrinter()
    PrintHTML(::Destino + ::Nomehtm, cPrinter, lPreview, lPromptPrint, !lPreview )

RETURN Self
Terceiro passo:
- No htmlprint.prg, colocar o include:
#include "hbcompat.ch"

Ainda No htmlprint.prg, METHOD Print() CLASS HTMLPRINT, comentar essas linhas:

Código: Selecionar todos

*     WHILE WB:Readystate <> READYSTATE_COMPLETE .OR. lnWaiting >= MAX_TIME
*        lnWaiting = Seconds() - lnStarted
*     ENDDO

*     WHILE WB:QueryStatusWB(OLECMDID_PRINT) != (OLECMDF_SUPPORTED + OLECMDF_ENABLED)
*     ENDDO
Tanto no harbour quanto no xharbour (fiz o teste nos dois) estava dando erro de execução nessas linhas. Não sei o motivo e nem pra q serve essas linhas. O que sei eh q mesmo comentando-as, o boleto eh gerado belezinha.

Quarto passo:
Qndo vc for gerar o boleto do seu programa, usar assim:
oBol := oBoleto():New("001") // banco do brasil
e nao assim (como vem demonstrando no demoboleto.prg:
oBol := oBoleto("001") // banco do brasil

Fim... acho que eh apenas isso!

Usar HarbourBoleto com Harbour. SOLUÇÃO!

Enviado: 02 Jul 2014 12:04
por Itamar M. Lins Jr.
CASE ::cCodBco like "(008|033|353)" //Santander Banespa
Basta apenas mudar LIKE por $, se quiser.
Compilei com Harbour 3.4 do Viktor não mudei nada apenas linkei junto a lib xhb.

Saudações,
Itamar M. Lins Jr.

Usar HarbourBoleto com Harbour. SOLUÇÃO!

Enviado: 02 Jul 2014 17:21
por janio
Serio? e gerou o boleto direitim???

No meu hbp ja tenho a lib xhb.

Mesmo assim, com harbour3.2, se não colocar #include "hbcompat.ch" no htmlprint.prg ele nem compila reclamando dos comandos TRY, CATCH, END.

Se tbm não mudar no demoboleto.prg a linha
oBol := oBoleto("001")
para
oBol := oBoleto():New("001")

Ele não passa pelo METHOD new(... do oboleto.prg, fazendo com q algumas variaveis não sejam preechidas corretamente. No METHOD Print do mesmo oboleto.prg, por exemplo, ele não executa o bloco

IF ::lBoleto .AND. ::nBoletos > 0
...

pq a variavel ::lBoleto ainda continua .F., não gerando o boleto.

Alem do LIKE no oboleto.prg, ele tbm reclama da função SHELLEXECUTE, caso seja linkado ao projeto o xhbrun.prg.

Talvez no harbour3.4 tudo ja seja compative

Usar HarbourBoleto com Harbour. SOLUÇÃO!

Enviado: 03 Jul 2014 13:25
por Itamar M. Lins Jr.
Fiz confusão.
Eu testei com o MRBoleto.
Apenas um PRG, muito bom.
* MR-Tools source code:
*
* Copyright 2012 M., Ronaldo < ronmesq@gmail.com >
* https://github.com/MRonaldo/MR-Tools/downloads
Saudações,
Itamar M. Lins Jr.