Código: Selecionar todos
*/
TBO2.prg - Gera arq. padrao HTML para Boleto
Autor: Hu Chia Fo - hucf
*/
#include "fileio.ch"
priv __dir_banc,__dir_img,__lin_digi,__cod_barr,__cod_banc,__dat_venc
priv __val_nomi,__dat_refe,vcod := {},vlin := {},__vnm_docu
priv __aceite,__esp_docu,__nom_cede,__nom_saca
set date format 'DD-MM-YYYY'
cls
* Dados a serem definidos
__cod_banc := '341'
__cod_agen := 'nnnn' // string com n.o agencia bco
__cod_cart := '175'
__num_docu := '00000000'
__cta_cede := 'nnnnn' // string com n.o cta corrente
__cta_dgvf := '0'
__dat_refe := ctod('07-10-1997')
__dat_venc := ctod(' - - ')
__val_nomi := 0
__vnm_docu := val(__num_docu)
__nom_arqu := spac(30)
* 1234567890123456789012345678901234567890
__nom_saca := 'ACME DO BRASIL '
__dad_juro := spac(40)
__dad_mult := spac(40)
@05,05 say 'Cod. Banco .....:' get __cod_banc pict '999'
@06,05 say 'Cod. Agencia ...:' get __cod_agen pict '9999'
@07,05 say 'Cod. Carteira ..:' get __cod_cart pict '999'
@08,05 say 'N.o Documento ..:' get __vnm_docu pict '@r 99999999' valid !empty(__vnm_docu)
* 567890123456789012 34567
@09,05 say 'N.o Conta ......:' get __cta_cede pict '99999'
@09,28 say '-' get __cta_dgvf pict '9'
@10,05 say 'Valor Titulo ...:' get __val_nomi pict '@er 999,999,999.99' valid !empty(__val_nomi)
@11,05 say 'Data Vencimento :' get __dat_venc valid (__dat_venc > __dat_refe)
@12,05 say 'Nome Sacado ....:' get __nom_saca pict '@!'
@13,05 say 'Juros ..........:' get __dad_juro pict '@!'
@14,05 say 'Multa ..........:' get __dad_mult pict '@!'
@15,05 say 'Nome Arq. ......:' get __nom_arqu pict '@!' valid !empty(__nom_arqu)
read
if lastkey() = 27
quit
endif
__cod_moed := '9'
__nom_saca := alltrim(__nom_saca)
__nom_arqu := alltrim(__nom_arqu)
__num_docu := strzero(__vnm_docu,8)
__fat_venc := strzero(__dat_venc-__dat_refe,4)
__dat_venc :=dtoc(__dat_venc)
* Digito verif. "Nosso Numero"
__dgvf := mod_10(__cod_agen+__cta_cede+__cod_cart+__num_docu)
__aceite := ' Não '
__nom_cede := 'XXX' // string com nome cedente
__esp_docu := 'DP'
*aadd(vobs,'*** Não pagar este boleto ***')
*aadd(vobs,'É apenas uma demonstração')
* Seq. numerica ref. para calcular __dig_veri
__cod_barr := ''
__cod_barr += __cod_banc // 001-003 cod. banco
__cod_barr += __cod_moed // 004-004 cod. moeda 9 -> Real
*__cod_barr += __dig_veri // 005-005 dig. verificador
__cod_barr += __fat_venc // 005-008 fat. vencimento (n.o dias a partir data ref.)
__cod_barr += strzero(__val_nomi * 100,10) // 009-018 val. nominal do titulo
__cod_barr += __cod_cart // 019-021 cod. carteira
__cod_barr += __num_docu // 022-029 n.o documento
__cod_barr += __dgvf // 030-030 dig. verif. n.o docu
__cod_barr += __cod_agen // 031-034 cod. agencia
__cod_barr += __cta_cede // 035-039 conta cedente sem digito
__cod_barr += __cta_dgvf // 040-040 dig. verif. conta
__cod_barr += '000' // 041-043 zero fixo
* Calculando e inserindo dig. verificador
__dig_veri := mod_11(__cod_barr)
__cod_barr := stuff(__cod_barr,5,0,__dig_veri)
*memowrit('cod_bar.txt',__cod_barr)
aadd(vcod,__cod_banc) // 001-003 cod. banco
aadd(vcod,__cod_moed) // 004-004 cod. moeda 9 -> Real
aadd(vcod,__dig_veri) // 005-005 dig. verificador
aadd(vcod,__fat_venc) // 006-009 fat. vencimento (n.o dias a partir data ref.)
aadd(vcod,strzero(__val_nomi * 100,10)) // 010-019 val. nominal do titulo
aadd(vcod,__cod_cart) // 020-022 cod. carteira
aadd(vcod,__num_docu) // 023-030 n.o documento
aadd(vcod,__dgvf) // 031-031 dig. verif. n.o docu
aadd(vcod,__cod_agen) // 032-035 cod. agencia
aadd(vcod,__cta_cede) // 036-040 conta cedente sem digito
aadd(vcod,__cta_dgvf) // 041-041 dig. verif. conta cedente
aadd(vcod,'000') // 042-044 zero fixo
__lin_digi := ''
__lin_digi += __cod_banc // 001-003 cod. banco
__lin_digi += __cod_moed // 004-004 cod. moeda 9 -> Real
__lin_digi += __cod_cart + left(__num_docu,2) // 005-009 pos. 20-24 cod. barras
__lin_digi += mod_10(__lin_digi) // 010-010 digito verif. 1.o campo
__lin_digi += right(__num_docu,6) // 011-016 pos. 25 a 30
__lin_digi += __dgvf // 017-017 pos. 31
__lin_digi += left(__cod_agen,3) // 018-020 3 dig. agencia
__lin_digi += mod_10(subs(__lin_digi,11,10)) // 021-021 digito verif. 2.o campo
__lin_digi += right(__cod_agenc,1) // 022-022 ult. dig. agencia
__lin_digi += __cta_cede // 023-027
__lin_digi += __cta_dgvf // 028-028
__lin_digi += '000' // 029-031 pos. 44
__lin_digi += mod_10(subs(__lin_digi,22,10)) // 032-032 digito verif. 3.o campo
__lin_digi += __dig_veri // 033-033 digito verif. geral
__lin_digi += __fat_venc // 034-037
__lin_digi += strzero(__val_nomi * 100,10) // 038-047
* 1 2 3 4
* 123456789012345678901234567890123456789012345678901234567890
* 6 2 8 5 1 8 0
* 99999.99999 99999.999999 99999.999999 9 99999999999999
__lin_digi := stuff(__lin_digi, 6,0,'.')
__lin_digi := stuff(__lin_digi,12,0,' ')
__lin_digi := stuff(__lin_digi,18,0,'.')
__lin_digi := stuff(__lin_digi,25,0,' ')
__lin_digi := stuff(__lin_digi,31,0,'.')
__lin_digi := stuff(__lin_digi,38,0,' ')
__lin_digi := stuff(__lin_digi,40,0,' ')
*memowrit('lin_dig.txt',__lin_digi)
aadd(vlin,__cod_banc ) // 001-003 cod. banco
aadd(vlin,__cod_moed ) // 004-004 cod. moeda 9 -> Real
aadd(vlin,__cod_cart + left(__num_docu,2)) // 005-009 cod. carteira + ...
aadd(vlin,mod_10(__lin_digi) ) // 010-010 digito verif. 1.o campo
aadd(vlin,right(__num_docu,6) ) // 011-016 pos. 25 a 30
aadd(vlin,__dgvf ) // 017-017 pos. 31
aadd(vlin,left(__cod_agen,3) ) // 018-020 3 dig. agencia
aadd(vlin,mod_10(subs(__lin_digi,11,10)) ) // 021-021 digito verif. 2.o campo
aadd(vlin,right(__cod_agenc,1) ) // 022-022 ult. dig. agencia
aadd(vlin,__cta_cede ) // 023-027
aadd(vlin,__cta_dgvf ) // 028-028
aadd(vlin,'000' ) // 029-031 pos. 44
aadd(vlin,mod_10(subs(__lin_digi,22,10)) ) // 032-032 digito verif. 3.o campo
aadd(vlin,__dig_veri ) // 033-033 digito verif. geral
aadd(vlin,__fat_venc ) // 034-037
aadd(vlin,strzero(__val_nomi * 100,10) ) // 038-047
html_boleto(__lin_digi,__cod_barr,vlin,vcod)
function html_boleto
memvar __cod_banc,__cod_agen,__cod_cart,__num_docu,__cta_cede,__cta_dgvf,;
__dat_venc,__val_nomi,__dgvf,__nom_cede,__nom_saca,__esp_docu,;
__aceite,__nom_arqu
para __linh,__bcod,vlin,vcod
priv __text,vtab := {},__tref
__val_nomi := tran(__val_nomi,'@er 9,999,999.99')
__dat_docu := dtoc(date())
__dat_proc := __dat_docu
aadd(vtab,{'0','NNWWN'})
aadd(vtab,{'1','WNNNW'})
aadd(vtab,{'2','NWNNW'})
aadd(vtab,{'3','WWNNN'})
aadd(vtab,{'4','NNWNW'})
aadd(vtab,{'5','WNWNN'})
aadd(vtab,{'6','NWWNN'})
aadd(vtab,{'7','NNNWW'})
aadd(vtab,{'8','WNNWN'})
aadd(vtab,{'9','NWNWN'})
* Def. padrao 2 of 5 do cod. barras
__segm := ''
for __i = 1 to len(__bcod) step 2
* Segmento barra
__npos := ascan(vtab,{ |v| v[1] = subs(__bcod,__i,1) })
__segb := vtab[__npos,2]
* Segmento espaco
__npos := ascan(vtab,{ |v| v[1] = subs(__bcod,__i+1,1) })
__sege := vtab[__npos,2]
for __j = 1 to len(__segb)
__segm += subs(__segb,__j,1) + subs(__sege,__j,1)
next
next
__narq := 'bol_ref.txt'
__crrt := chr(13)+chr(10)
if !file(__narq)
alert(' Nao tem Arq. ')
endif
__text := ''
__npos := 1
__tref := memoread(__narq)
do while .t.
__ltxt := ''
for __i = __npos to len(__tref)
if (subst(__tref,__i,1) + subst(__tref,__i+1,1)) = __crrt
__npos += 2
exit
endif
__ltxt += subst(__tref,__i,1)
__npos += 1
next
* Verificando se existe campo variavel
if !empty((__pos_camp := at('',__ltxt)))
__ltxt := subst(__ltxt,__pos_camp+1,len(alltrim(__ltxt))-2)
__ltxt := &__ltxt
endif
__text += __ltxt
__text += __crrt
if __npos >= len(__tref)
exit
endif
enddo
__text += ' <tr valign="top">' + __crrt
__text += ' <td width="67%" valign="center"> ' + __crrt
* Start Code
__text += ' <img src="pf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += ' ><img src="bf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += ' ><img src="pf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += ' ><img src="bf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
for __i = 1 to len(__segm)
__text += ' ><img src="'
if mod(__i,2) # 0
__text += iif(subs(__segm,__i,1)='W','pg.gif"','pf.gif"')
else
__text += iif(subs(__segm,__i,1)='W','bg.gif"','bf.gif"')
endif
__text += ' border="0"'
__text += iif(subs(__segm,__i,1)='W',' width="3"',' width="1"')
__text += ' height="49"' + chr(13) + chr(10)
next
* Stop Code
__text += ' ><img src="pg.gif" border="0" width="3" height="49"' + chr(13) + chr(10)
__text += ' ><img src="bf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
__text += ' ><img src="pf.gif" border="0" width="1" height="49"' + chr(13) + chr(10)
**
__text += ' </td>' + __crrt
__text += ' <td width="33%" align="center">' + __crrt
__text += ' ' + __crrt
__text += ' </td>' + __crrt
__text += ' </tr>' + __crrt
__text += '</table>' + __crrt
__text += '</html>'
**
memowrit(__nom_arqu,__text)
return NIL
function mod_10
* MOD 10 - formula LUHN
para __nref
priv __i,__soma,__dver,__vsgm
__soma := 0
for __i = 1 to len(__nref)
__segm := subst(__nref,len(__nref)-__i+1,1)
__vsgm := iif(mod(__i,2)#0,2*val(__segm),val(__segm))
__vsgm := iif(__vsgm>9,iif(__vsgm=18,9,mod(__vsgm,9)),__vsgm) // <---
__soma += __vsgm
next
__dver := 10 - mod(__soma,10)
__dver := iif(__dver=10,0,__dver)
return alltrim(str(__dver,0))
function mod_11
para __nref
priv __i,__j,__soma,__dver
__soma := 0
for __i = 1 to len(__nref) step 8
for __j = 2 to 9
if len(__nref)-__i-__j+3 < 1
__i := len(__nref)
exit
endif
__segm := subst(__nref,len(__nref)-__i-__j+3,1)
__soma += val(__segm) * __j
next
next
__dver := 11 - mod(__soma,11)
__dver := iif(__dver=1 .or. __dver=10 .or. __dver=11,1,__dver)
return alltrim(str(__dver,0))
