Gerando Boletos Bancários com o VB e Crystal Reports - II
Na primeira parte do nosso artigo Gerando Boletos Bancários com o VB e Crystal Reports abordamos os conceitos básicos sobre o boleto bancário. Lembre-se que estamos tomando por base as informações para gerar boletos para o Banco do Brasil , se você for trabalhar com outro banco a documentação pode ser um pouco diferente.
Até o presente momento criamos as funções para calcular os digitos verificadores no modulo 11 , no modulo 10 , como gerar o código de barras e calcular o seu DV.
Vamos agora mostrar como gerar a linha digitável (lembra-se dela). Ela tem o seguinte formato:
BBBMC.CCCCd
CCCCC.CCCCCd CCCCC.CCCCCd D VVVVVVVVVVVVVV
onde:
B
- número do banco
M
- Moeda (sempre 9 - real)
V
- valor7
C
- campo livre - depende do banco
D
- Digito verificador do código de barras
d
- digito verificados da linha digitáveis
Perceba que temos 5 sequências de números , cada sequência com um significado : Vamos identificar cada sequência:
BBBMC.CCCCd - Posição 1 a 3 do cód. de barras, codigo da moeda, posicoes de 20 a 24 do cod. barras e dv deste campo
CCCCC.CCCCCd - posicoes 25 a 34 do cod. barras, e dv deste campo.(No. convenio)
CCCCC.CCCCCd - posições 35 a 44 do cod. de barras e dv deste campo.(
D - Digito verificador geral do cod. barras
VVVVVVVVVVVVVV - fator de vencimento (posicoes 6 a 9 do cod. barras) e posicoes 10 a 19 do cód. barras
Assim para o Banco do Brasil a composição da linha digitável pode ser obtida pela seguinte função:
Function Linha_Digitavel(sequencia As String, DV_CodBarras As String, valor As Single) As String Dim seq1 As String Dim seq2 As String Dim seq3 As String Dim dv1, dv2, dv3 As Integer 'separa a sequencia e prepara o valor seq1 = Left(sequencia, 9) seq2 = Mid(sequencia, 10, 10) seq3 = Right(sequencia, 10) valor = Int(valor * 100) ' calcula os dvs dv1 = Val(Calculo_DV10(seq1)) dv2 = Val(Calculo_DV10(seq2)) dv3 = Val(Calculo_DV10(seq3)) 'formata a sequencia seq1 = Left(seq1 & dv1, 5) & "." & Right(seq1 & dv1, 5) seq2 = Left(seq2 & dv2, 5) & "." & Right(seq2 & dv2, 6) seq3 = Left(seq3 & dv3, 5) & "." & Right(seq3 & dv3, 6) Linha_Digitavel = seq1 & " " & seq2 & " " & seq3 & " " & DV_CodBarras & " " & valor End Function |
Falta somente a função para calcularmos o nosso número - um número de identificação .Ele pode ser composto pelo número do convênio - um número atribuído ao convênio que o identifica. Abaixo temos a função que a partir do número do convênio calculo o nosso número com dv:
Function Calculo_NossoNumero(sequencia As String) As String 'montamos o nosso numero com o numero do convenio ( 6 posicoes) Dim dv As Integer dv = Calculo_DV11(sequencia) Calculo_NossoNumero = Format(sequencia & dv, "00000000000000000") End Function |
Bem , agora vamos juntar tudo e emitir o boleto com o código de barras e a linha digitável.
Criando o Projeto para imprimir os boletos
-Inicie o VB e no formulário padrão insira os controles conforme o layout abaixo:
Não vou me ater as rotinas de manutenção/validação dos dados , meu objetivo e apenas mostrar como gerar o código de barras a e a linha digitável e imprimir o boleto.(Fica a seu cargo aperfeiçoar e adaptar o projeto as suas necessidades)
O projeto deve funcionar da seguinte forma:
Você inclui um cedente e o respectivo sacado
Após informar os dados do sacado você vai clicar no botão para gerar o código de barras e da linha digitável
Os números serão exibidos nas respectivas caixas de texto.(Fiz isto somente para você ver os números)
Vamos criar um relatório no Crystal Reports versão 4.6 ( se funcionar nessa versão funciona em qualquer outra posterior) para que quando clicarmos no botão de impressão o boleto seja gerado com o código de barras e a linha digitável. ( Vamos usar as fontes do comentadas no artigo Usando código de barras - Conceitos
Eu armazenei os valores do código de barras e da linha digitável no banco de dados para ficar mais fácil para mim , você não precisa necessariamente fazer isto no seu projeto.
Vamos desenhar o layout do boleto no Crystal Reports ( Eu estou usando a versão que vem com o VB6 - a 4.6 ) conforme especificado pelo Banco . Tenha o cuidado de inserir os campos nos lugares corretos . O único cuidado que você deve ter é com o campo para gerar o código de barras. Faça o seguinte:
Como vamos usar o padrão 2 de 5 intercalado temos que usar uma função que esta disponível no Crystal Reports após copiarmos os arquivos Cia_itft.TTf e u2lbcp.dll para as pastas windows\fonts e windows\system.
No crystal Reports no local onde deseja que o código de barras seja exibido vá no menu Insert e clique na opção Formula Field
Informe o nome para esta formula ( Ex.codbar ) e clique em OK
Na aba Functions localize a função BarcodeINTERLEAVED2OF5("ITF0.B",Flf) e selecione-a
A seguir na aba Fields clique no campo onde estamos armazenando o valor para o código de barras. No nosso caso será {tblBoletos.codbarras}
Pronto você acabou de montar uma fórmula com o campo gerado para o código de barras. Veja abaixo
Agora clique no botão Check e a seguir , se não houver erros , no botão Accept
Inclua a formula no local onde deseja exibir o código de barras
Mude a fonte para esta formula clicando com o botão direito do mouse sobre e ela e selecionando Change Font
Selecione a fonte CIA ITF Tall e pronto. Veja a figura abaixo.
Salve o seu relatório com o nome de boleto.rpt . O relatório esta pronto para ser usado.
Agora insira o componente Crystal Reports ao seu projeto , se não o fez ainda , e dê a ele o nome de cr1. Agora inclua o seguinte código no evento click do botão de comando cmdimprimir.
Private Sub cmdimprimir_Click() cr1.DataFiles(0) = App.Path & "\boleto2001.mdb" cr1.WindowState = 2 cr1.WindowControlBox = True cr1.ReportFileName = App.Path & "\boleto.rpt" cr1.Destination = 0 cr1.Action = 1 End Sub |
Rode o projeto e clique no botão que imprime o boleto. Se você fez tudo certo deverá obter o boleto como abaixo:
IMPORTANTE: Todas as rotinas foram feitas levando em conta a documentação para o Banco do Brasil. Para outros bancos podem haver algumas modificações a fazer. Eu não testei o código gerado em uma máquina leitura de código de barras . Cuidado ao utilizar o exemplo ele pode conter erros , afinal meus artigos são atualizados sempre na calada da noite após um longo dia de trabalho... Para uso comercial eu sugiro que você adquira um componente de terceiro para gerar o seu código de barras.
Nota: Eu não gerei o recibo do sacado para ganhar tempo. isto fica a seu critério.
Clique no link a seguir para copiar o código fonte(.txt) , o relatório(.rpt) e a base de dados(.mdb) usada no artigo: Boleto.zip 10 Kb ( O projeto completo e os arquivos das fontes usadas estão no super cd VB )
Nota : o BB
tem um novo modelo
de "campo livre" para seus boletos, quando o convênio tem 7 digitos, em
vez de 6. (JULHO/2004) . Veja mais detalhes no site do Banco do
Brasil.
Veja tambem como gerar boletos bancarios a partir da linha digitável sem componente algum: Boleto Bancário
Nota: A Febraban recomenda um tamanho padrão para o código de barras. A altura deve ser de 13 mm e o comprimento 103 mm. Para ajustar o tamanho do ódigo de barras gerado altere o tamanho da fonte.
Alerta: Recomendo consultar a documentação atualizada dos bancos para definir a rotina do código de barras.
Ate o próximo artigo..
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#