Página 1 de 2

Harbour Boleto

Enviado: 23 Out 2014 18:32
por marcos.gurupi
Caros, finalmente consegui tempo para mexer em boletos e estou usando o harbour boleto. Acontece que em uma fase inicial de teste estah apresentando o erro. Estou apenas usando o demoboleto.prg

O erro acontece na linha: 89 do demoboleto.prg

Código: Selecionar todos

oBol:Open( "boleto_teste_123", , , "rem", 99974809, .F. ) // .F. Padrao CNAB240
Erro:

Código: Selecionar todos

Error BASE/1108  Argument error: AT
Called from ->AT(0)
Called from oboleto.prg->OBOLETO:OPEN(277)
Olhando o fonte na linha 277 estah assim:

Código: Selecionar todos

nAux := AT("-", ::cCDPF) //*FJF* - 28/09/09
Alguem usa o harbour boleto e poderia me ajudar ?

Marcos Roberto.

Harbour Boleto

Enviado: 01 Nov 2014 00:58
por rochinha
Amiguinho,

Verifique qual a sintaxe do comando AT() e veja se os parâmetros estão na posição certa.

Em tempo verifique se ::cCDPF realmente está com algum conteúdo.

Harbour Boleto

Enviado: 02 Nov 2014 20:04
por marcos.gurupi
Obrigado pela resposta. Realmente existia um parametro sem conteudo. Mas agora estou com problema quanto se tenta imprimir o boleto. O erro estah acontecendo na linha 213 da fonte htmlprint.prg do projeto. O boleto ateh aparece no internet explorer, mas logo apos ele apresenta o erro relacionado abaixo.


O erro:

Código: Selecionar todos

Error InternetExplorer.Application/1717  Unknown error: READYSTATE
Called from win32ole.prg->TOLEAUTO:READYSTATE(0)
Called from htmlprint.prg->HTMLPRINT:PRINT(213)
Called from htmlprint.prg->PRINTHTML(117)
Called from oboleto.prg->OBOLETO:PRINT(945)
Called from BOLETO.PRG->GERARBOLETO(230)
O codigo do htmlprint.prg

Código: Selecionar todos

 WHILE WB:Readystate <> READYSTATE_COMPLETE .OR. lnWaiting >= MAX_TIME //O ERRO EH AQUI
         lnWaiting = Seconds() - lnStarted
 ENDDO

Obr.

Harbour Boleto

Enviado: 03 Nov 2014 03:14
por rochinha
Amiguinho,

Vai a máxima do programador sem tempo:

"...desabilita uns IF.ENDIF e vê se funciona..."

Vou dar diagnóstico estilo SUS:

- Sem olhar para voce(o código)
- Receitar algo genérico(sempre é viróse)

Desabilite o trecho de código que contém ReadState(), dependendo do caso(Harbour ou xHarbour) ele pode retornar erro ou não liberar a continuidade.

Harbour Boleto

Enviado: 03 Nov 2014 10:59
por marcos.gurupi
:))
Vlw Rochinha!

:xau

Harbour Boleto

Enviado: 03 Nov 2014 11:07
por marcos.gurupi
Caros, foi desabilitado no IF... onde apresentava o erro, ocorreu ainda um erro logo abaixo, fiz o mesmo... desabilitei, mas abaixo ocorreu um outro erro; esse impossivel de desabilitar pq se trata da impressao do boleto. Segue os detalhes abaixo.

Código: Selecionar todos

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

      //WHILE WB:QueryStatusWB(OLECMDID_PRINT) != (OLECMDF_SUPPORTED + OLECMDF_ENABLED) //SEGUNDO ERRO
      //ENDDO

      // Imprime ou Nao
      IF ::lPrintHtml
        WB:ExecWB(OLECMDID_PRINT, If(::lPromptPrint, OLECMDEXECOPT_PROMPTUSER,  LECMDEXECOPT_DONTPROMPTUSER) ) //Agora o erro acontece aqui
      ENDIF
O erro:

Código: Selecionar todos

Error InternetExplorer.Application/0  S_OK: EXECWB
Called from win32ole.prg->TOLEAUTO:EXECWB(0)
Called from htmlprint.prg->HTMLPRINT:PRINT(222)
Called from htmlprint.prg->PRINTHTML(117)
Called from oboleto.prg->OBOLETO:PRINT(945)

Harbour Boleto

Enviado: 03 Nov 2014 19:47
por janio
Interessante... eu fiz a mesma coisa q vc e comigo esse erro nao acontece

Código: Selecionar todos

// tirado isso! dando erro desconhecido (01.07.2014) Janio
*     WHILE WB:Readystate <> READYSTATE_COMPLETE .OR. lnWaiting >= MAX_TIME
*        lnWaiting = Seconds() - lnStarted
*     ENDDO

*     WHILE WB:QueryStatusWB(OLECMDID_PRINT) != (OLECMDF_SUPPORTED + OLECMDF_ENABLED)
*     ENDDO

      // Imprime ou Nao
      IF ::lPrintHtml
        WB:ExecWB(OLECMDID_PRINT, If(::lPromptPrint, OLECMDEXECOPT_PROMPTUSER, LECMDEXECOPT_DONTPROMPTUSER) )
      ENDIF
Na emissao do boleto eu uso assim:

...
lPrint = .t.
lPreview = .t.
lPromptPrint = .t.
...
...
oBol:Execute() // monta html
oBol:Close()
oBol:Print() // Imprime o boleto

Abre no Internet Explorer sem problemas!

Janio

Harbour Boleto

Enviado: 04 Nov 2014 03:54
por rochinha
Amiguinhos,

Os motores de HTML do Windows ou são supridos pelo Windows Explorer ou pelo Internet Explorer, portanto alguns métodos podem existir em um e no outro não.

ExecWB() pode ser método somente do IE.

Harbour Boleto

Enviado: 06 Nov 2014 15:08
por marcos.gurupi
Acredito q eh isso mesmo Rochinha. Janio qual eh o windows q vc estah usando ?

Eu uso o WIN7 Ultimate

Rochinha vc ver uma solucao para isso, pq eh claro q em clientes vamos encontrar varias versoes do windows.

Harbour Boleto

Enviado: 07 Nov 2014 16:38
por janio
Meu eh o win7 64bits. Mas tenho clientes com winxp e 7 32bits q funciona tbm!

Uma coisa q reparei eh que antes o boleto era aberto no navegador padrão do windows. Depois da ultima atualização que fiz do harbourBoleto o boleto sempre abre no internet explorer, mesmo que o navegador padrão seja outro!

Janio

Harbour Boleto

Enviado: 07 Nov 2014 17:35
por rochinha
Amiguinho,
Uma coisa q reparei eh que antes o boleto era aberto no navegador padrão do windows. Depois da ultima atualização que fiz do harbourBoleto o boleto sempre abre no internet explorer, mesmo que o navegador padrão seja outro!
Isto é elementar meu caro Watson!

Você está acionando diretamente o motor do internet explorer pela automatização de InternetExplorer.Application.

Para que abra por qualquer navegador você deverá comandar um START arquivo.html.

Resumindo, você trocará toda parte que trabalha com o InternetExplorer.Application e seus objetos por um simples RUN("START arquivo.html")

Harbour Boleto

Enviado: 07 Nov 2014 18:05
por billy1943
Oi, colegas que manjam bem de Xharbour.

Tenho utilizado esta pequena rotina que, de dentro de meus sistemas em Clipper, acessa a localização do endereço informado com base em dados de clientes cadastrados.

Pois bem, ela aciona o Internet Explorer, que às vezes funciona bem, outras vezes dá umas mensagens esquisitas sobre o mecanismo de pesquisa, dentre os quais não está incluído o Google, obviamente.

Assim, pediria ao Rochinha ou alguém que me informasse, o que posso alterar para que o acesso à internet seja feito pelo browser GOOGLE, incondicionalmente.
Rochinha escreveu:
Isto é elementar meu caro Watson!

Você está acionando diretamente o motor do internet explorer pela automatização de InternetExplorer.Application.

Para que abra por qualquer navegador você deverá comandar um START arquivo.html.

Resumindo, você trocará toda parte que trabalha com o InternetExplorer.Application e seus objetos por um simples RUN("START arquivo.html")

Código: Selecionar todos

 #include "inkey.ch"
REQUEST HB_LANG_PT
REQUEST HB_CODEPAGE_PT850
***************
FUNCTION main(rua,cidade,uf)
***************
// parameter rua, cidade, uf
local oMapa, mde_uf, mpara_uf, mde_cid, mpara_cid, mde_rua, mpara_rua, mweb
HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')
setmode(25,80)
setcolor('w+/b,g+/n,,,bg+/b' )
set cursor on
cls

do while .t.

   if pcount() == 0
      mpara_uf  := space(2)
      mpara_cid := space(40)
      mpara_rua := space(50)
   else
      mpara_uf  := uf
      mpara_cid := cidade
      mpara_rua := rua
   endif

   mde_uf  := "SP"
   mde_cid := "BAURU    "
   mde_rua := "R. NITEROI, 185" 

   @ 05, 01 say "DE :"
   @ 07, 01 say "Estado ..:" get mde_uf  picture "@!"
   @ 08, 01 say "Cidade ..:" get mde_cid picture "@!"
   @ 09, 01 say "Endere‡o :" get mde_rua picture "@!"
   clear gets
   @ 11, 01 say "PARA :"
   @ 13, 01 say "Endere‡o :" get mpara_rua picture "@!"
   @ 14, 01 say "Cidade ..:" get mpara_cid picture "@!"
   @ 15, 01 say "Estado ..:" get mpara_uf  picture "@!"
   read

   if lastkey() == K_ESC
      exit
   endif

   mde_uf  := alltrim( mde_uf ) ; mpara_uf  := alltrim( mpara_uf )
   mde_cid := alltrim( mde_cid ); mpara_cid := alltrim( mpara_cid )
   mde_rua := alltrim( mde_rua ); mpara_rua := alltrim( mpara_rua )
   try
   oMapa := GetActiveObject( "InternetExplorer.Application" )
   catch
   try
   oMapa := CreateObject( "InternetExplorer.Application" )
   catch
   Alert( "ERRO ! Internet Explorer nÆo dispon¡vel")
   return
   end
   end
   mweb := "http://maps.google.com/maps?q=de "               +;
           mde_rua + " " + mde_cid + " " + mde_uf + " para " +;
           mpara_rua + " " + mpara_cid + " " + mpara_uf
   oMapa:Visible := .t.
   oMapa:Navigate( mweb )

enddo

setmode(25,80)
set cursor off
QUIT 
HB_LANGSELECT('PT')
HB_SETCODEPAGE('PT850')
return

Harbour Boleto

Enviado: 07 Nov 2014 22:34
por rochinha
Amiguinhos,

Vejamos algumas formas de trabalho com os recursos do sistema operacional.

A primeira delas usa o motor do Internet Explorer através do acesso ao InternetExplorer.Application

Código: Selecionar todos

   cEndereco := "http://www.google.com"
   oIE:=TOleAuto():New( "InternetExplorer.Application" )
   //
   oIE:Visible   := .T.
   oIE:ToolBar   := .F.
   oIE:StatusBar := .F.
   oIE:MenuBar   := .F.
   //
   oIE:Top       := 055
   oIE:Left      := 001
   oIE:Height    := 600
   oIE:Width     := 800
   //
   oIE:Navigate( cEndereco )
   //
   if lPrint
      oIE:ExecWB(6,0,0,0) // Imprimir
   endif
   oIE:End()
No segundo exemplo o acesso é feito pelo motor html do Windows Explorer através do acesso ao Shell.Explorer.

Código: Selecionar todos

   cEndereco := "http://www.google.com"
   oIE:=TOleAuto():New( "Shell.Explorer" )
   oIE:MenuBar   := .F.
   oIE:Top       := 055
   oIE:Left      := 001
   oIE:Height    := 600
   oIE:Width     := 800
   oIE:Navigate( cEndereco )
   oIE:End()
Outro exemplo usa um comando conhecido dos xHarbour´s:

Código: Selecionar todos

   cEndereco := "http://www.google.com"
   hE := CreateOleObject( "InternetExplorer.Application" ) 
   OLESetProperty( hE, "Visible"  , .T. ) 
   OLESetProperty( hE, "ToolBar"  , .F. ) 
   OLESetProperty( hE, "StatusBar", .T. ) 
   OLESetProperty( hE, "MenuBar"  , .T. ) 
   OLEInvoke( hE, "Navigate", cEndereco )
Uma coisa que reparei em InternetExplorer.Application e Shell.Explorer, no lugar do método Navigate() é possivel usar Navigate2() só não sei a diferença.

Outro trecho demonstra outras funções:

Código: Selecionar todos

   cEndereco := "http://www.google.com"
   oExplorer    := TOleAuto():New( "InternetExplorer.Application" )
   oExplorer:Navigate2( cEndereco )
   //
   do while oExplorer:ReadyState <> 4 
      HB_IDLESLEEP( 1 ) 
   enddo
   //
   cNRevisao   := oExplorer:Document:Body:InnerText
   //
   oExplorer:Quit()
Neste trecho o evento oExplorer:ReadyState é testado para verificar travamento/leitura do motor.

O oExplorer:Document:Body:InnerText é usado para recuperar a parte textual de uma página recuperada.

O método Quit() é usado aqui, mas se der erro troque por End().

Reparando no método Print do HarbourBoleto(um codigo entigo) vi que tinha o seguinte trecho:

Código: Selecionar todos

   IF Os_IsWinNT()
      PrintHTML(::Destino + ::Nomehtm, cPrinter, lPreview, lPromptPrint, !lPreview )
   ELSE
      ShellExecute(::Nomehtm, "print", NIL, ::Destino, 1)
   ENDIF
Então acho que ele deva ficar parecido com isto:

Código: Selecionar todos

METHOD Print( lPreview, lPromptPrint, cPrinter ) CLASS oBoleto
   DEFAULT lPreview     TO ::lPreview ,;
           lPromptPrint TO .T.,;
           cPrinter     TO GetDefaultPrinter()

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

      if lUsarMotorIE
         LOCAL oIE := CREATEOBJECT( "InternetExplorer.Application" )
         oIE:Visible := .T.
         // ... mais configurações
         oIE:Navigate( ::Destino+"\"+ ::Nomehtm + " ")
      else
         // PrintHTML nao funciona no Win98 :-(
         IF Os_IsWinNT() 
            // Caso nao seja Win98 usa PrintHTML
            PrintHTML(::Destino + ::Nomehtm, cPrinter, lPreview, lPromptPrint, !lPreview )
         ELSE
            if lPreview
               ShellExecute( ::Nomehtm, "Open", NIL, ::Destino, 1 )
            else 
               ShellExecute( ::Nomehtm, "print", NIL, ::Destino, 1 )
            endif
         ENDIF
      endif

   ENDIF
RETURN Self
Codifiquei o trecho acima no olhômetro, nem testei.

Vamos trabalhar?

Harbour Boleto

Enviado: 07 Nov 2014 23:12
por janio
Em relação ao HarbourBoleto... percebi q houve uma mudança no METHOD PRINT do arquivo oboleto.prg q 'obrigou' todos os boletos abrirem no internet explorer, fazendo-nos linkar junto ao sistema o htmlprint.prg por causa da função PrintHTML.

Ocorre que vc não precisa do htmlprint.prg, devendo retirar esse prg da sua compilação. No entanto, o METHOD PRINT (oboleto.prg) deve ser substituida pela rotina abaixo:

Código: Selecionar todos

/* -------------------------------------------------------------------------- */

METHOD PRINT(lPreview,lPromptPrint,cPrinter) CLASS oBoleto

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

#ifdef __PLATFORM__Windows
   DEFAULT cPrinter TO GetDefaultPrinter()
#Endif

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

      //#IFNDEF __PLATFORM__Linux
      //    LOCAL oIE := CREATEOBJECT( "InternetExplorer.Application" )
      //    oIE:Visible = .T.
      //    oIE:Navigate( ::Destino+"\"+ ::Nomehtm + " ")
      //#ENDIF

#IFNDEF __PLATFORM__Linux  // esta maravilha e de autoria de Laverson Espindola
      // PrintHTML nao funciona no Win98 :-(
      // e apresenta problemas de travamento em algumas maquinas , Spy?
      //IF Os_IsWinNT()
      //   PrintHTML(::Destino + ::Nomehtm, cPrinter, lPreview, lPromptPrint, !lPreview )
      //ELSE
      IF lPreview
         ShellExecute(::Nomehtm,"open",NIL,::Destino,1)
      ELSE
          xhbrun('c:\windows\system32\RUNDLL32.EXE c:\windows\system32\MSHTML.DLL,PrintHTML "'+::Destino+'"',.T.,.f.)
         //ShellExecute(::Nomehtm,"print",NIL,::Destino,1)
      ENDIF
      //ENDIF
#ELSE

      //xhbrun(["]+ hb_oemtoansi(::HtmEdit) +["] + ::Destino + ::Nomehtm + " ", .T., .F.)

      // * Linux Modo Console, by SysTux (Toninho Silva), systux@yahoo.com.br, 30/10/09 **
      HB_OpenProcess('/usr/bin/firefox '+::Destino+::Nomehtm,,,,.t.)
      // * xx **

#ENDIF

   ENDIF

RETURN Self

/* -------------------------------------------------------------------------- */
Dessa forma, o boleto ira abrir no navegador padrão do windows!

Janio

Harbour Boleto

Enviado: 08 Nov 2014 00:23
por rochinha
Amiguinho,

Coloque o link do projeto aqui, pois faz tempo que não "olho" para ele.