Boleto Bancário do Itaú - Código de barras sem OCX

Estava precisando montar um aplicativo no Access que gerasse boletos do banco Itaú.  A única pedra no sapato desse projeto era o fato de que eu tinha que utilizar um arquivo OCX para gerar o código de barras e isso em versões de 64 bits poderia não funcionar.  

A solução para escapar do uso de arquivo OCX seria tentar trazer para o Access a idéia de um projeto feito em ASP, que usava imagens das barras, devidamente enfileiradas para montar o código de barras.

Código de barras com imagens:

São utilizadas quatro barras como padrão, sendo duas pretas e duas brancas.  Duas, na largura de 1 pixel e as outras duas, na largura de 3 pixels.

Observe na figura abaixo as 4 barras:

Usando Access - Código de Barras Bancário

O método Picture foi usado para carregar as imagens (barras) nos Controles de Imagens.

Me!CampoImagem.Picture = CurrentProject.Path & "\imagens_boleto\3b.gif 

O desafio no Access

Para ajustar a largura do Controle de Imagem, precisamente na largura das barras (1 pixel ou 3 pixels) é utilizada a propriedade Width.

'1 pixel equivale a 15 Twips (medida do VBA)
 
Const px1 = 15 '1 pixel
Const px3 = 45 '3 pixels
 
Me!CampoImagem.Width = px1 (ou px3)

Tendo a largura de cada Controle de Imagem (1 pixel ou 3 pixels), basta ir somando e acumulando tais médias para obter o posicionamento à esquerda do Controle de Imagem seguinte, conseguindo assim, o alinhamento sequencial das barras.  Observe na imagem abaixo:

Usando Access - Código de Barras - alinhamento a esquerda
O posicionamento à esquerda da terceira barra é a soma da primeira barra em relação a margem (A), mais a largura da primeira barra (B), mais a largura da segunda barra (C).

Me!CampoImagem.Left = PosiçãoEsquerda
 
'armazenando a posição para o próximo Controle de Imagem
PosiçãoEsquerda = PosiçãoEsquerda + px1 (ou px3)

O código gerador do boleto possui 44 números, conforme exemplo sequencial abaixo:

34191595300000015001741000000169555033350000

Cada número da sequência é representado por 5 barras, o que nos dá um total de 220 barras (44 x 5)São utilizadas ainda, mais 4 barras para identificar o início da leitura e mais 3 barras para identificar o fim da leitura, totalizando 227 barras. 

Então, duzentos e vinte e sete foi o número necessário de Controles de Imagens que tive que criar para a montagem do código de barras.  Veja na imagem abaixo:

Usando Access - Código de Barras Access


O Código

Analise o código utilizado no evento "Ao formatar" do boleto, que ajusta a largura e a posição à esquerda de cada Controle de Imagem:

Const px1 = 15 '1 pixel
Const px3 = 45 '3 pixels

'posição à esquerda da primeira barra, em relação a margem
PosiçãoEsquerda = 115.2 

smyI25 = fncI25Encode(cod_barra)
bBar = True
For ipos = 1 To Len(smyI25)
  If (bBar) Then
    sgif = Mid(smyI25, ipos, 1) & "b.gif"
  Else
    sgif = Mid(smyI25, ipos, 1) & "s.gif"
  End If
 
  'Ajustando a largura do Controle de Imagem, de acordo com a largura da barra
  Me("img" & ipos).Width = IIf(Left(sgif, 1) = "3", px3, px1)
 
  'Ajustando a posição à esquerda do Controle de Imagem
  Me("img" & ipos).Left = PosiçãoEsquerda
 
  'Armazenando a próxima posição à esquerda 
  PosiçãoEsquerda = PosiçãoEsquerda + IIf(Left(sgif, 1) = "3", px3, px1)
 
  'Carregando a imagem da barra, no Controle de Imagem
  Me("img" & ipos).Picture = CurrentProject.Path & "\imagens_boleto\" & sgif
  bBar = Not bBar
Next

Veja na imagem abaixo, o resultado do código de barras, devidamente montado:

Usando Access - Boleto Itaú

 

Gerando o Boleto no aplicativo exemplo

Ao rodar o aplicativo, será exibida a seguinte tela, mostrando o formulário Controle de Aluguéis:

Usando Access - Boleto Aluguéis


Selecione o senhorio > selecione o inquilino > Clique no botão "Gerar novo boleto" para o inquilino selecionado.

O formulário de preenchimento de boleto será exibido, conforme imagem abaixo:

Usando Access - Formulário Boleto


Basta preencher a data do documento, a data do vencimento e relacionar os itens dos campos de instruções aos seus respectivos valores.  Então, ao término do preenchimento, ao clicar  em "Imprimir Boleto" será visualizado o boleto para a impressão.

Uso do método LINE em vez das imagens (24/07/2013)

Um colega de fórum chamou a minha atenção para o fato de que eu poderia utilizar o método LINE, ao invés das imagens, pois desta forma, dispensaria o uso dos Controles de Imagens.  Resolvi pôr em prática o LINE e o resultado foi ótimo, tornando tanto a montagem como a programação, bem mais simples.

Para quem quiser saber a fundo sobre o uso do LINE, clique aqui e veja o meu artigo.

Observe o código modificado como ficou:

Const px1 = 15 '1 pixel
Const px3 = 45 '3 pixels

'posição à esquerda da primeira barra, em relação a margem
PosiçãoEsquerda = 115.2 

smyI25 = fncI25Encode(cod_barra)
bBar = True
For ipos = 1 To Len(smyI25)
  If (bBar) Then
    sgif = Mid(smyI25, ipos, 1) & "b.gif"
  Else
    sgif = Mid(smyI25, ipos, 1) & "s.gif"
  End If
 
'Montando a barra com o LINE
 Me.Line (PosiçãoEsquerda,14175)-(PosiçãoEsquerda + IIf(Left(sgif,1)="3",px3,px1),14927), _
 IIf(bbar = True, vbBlack, vbWhite), BF
 
  'Armazenando a próxima posição à esquerda 
  PosiçãoEsquerda = PosiçãoEsquerda + IIf(Left(sgif, 1) = "3", px3, px1)
 
  bBar = Not bBar
Next

O uso do LINE está no relatório rltBoletoItaú_line do arquivo exemplo.

Download

Para entrar no modo estrutura, mantenha pressionada a tecla SHIFT na inicialização.

Para visualizar o Painel de Controle, utilize a tecla F11.

Nota:  O exemplo aqui oferecido é para boleto sem registro.  Caso necessite elaborar o seu boleto com registro e remessa, faça o download abaixo do arquivo do Itaú, que segue as instruções da Fenabran 240 de abril de 2013.

Bom estudo!


Uma oportunidade incrível!

Estamos disponibilizando, por download, todo o conteúdo do site e mais outras fontes de estudo valiosíssimas, por apenas 145,00 .  

Ao adquirir este pacote você irá:

aprender em alta velocidade com as vídeos-aulas oferecidas;

ter uma fonte riquíssima para rápidas consultas;

receber atualizações gratuitas do pacote a cada 6 meses;

dar uma aparência profissional aos seus aplicativos, utilizando ribbons personalizadas.

Em pouco tempo você estará mais confiante e poderá então, aumentar seus preços.

Clique aqui e veja o que temos a lhe oferecer!


 

 


30 comentários

Marcelo David   22/07/2013 15:37:22

Fenomenal! Espetacular! Muito bom, estava precisando exatamente do boleto do Itaú para um grande projeto que vou desenvolver (isso vai me poupar horas, dias de trabalho)!

Parabéns mais uma vez por essa contribuição e todas as demais!!

samuel   22/07/2013 16:45:45

Muito bom! Como sempre...se superando!

Harysohn   22/07/2013 17:29:02

Boa tarde grande Avelino, uma pergunta: o código de barras no sistema está sendo gerado em conformidade com os dados técnicos do Itaú? Acredito que sim.. e neste caso o código está gerando os códigos com seus respectivo Digito de autoconferência?, para o nosso número por exemplo...


Grato.

Avelino Sampaio   22/07/2013 17:34:58

Harysonhn,

está em conformidade com o dados técnicos do Itaú. Sou correntista e já uso este projeto a bastante tempo pelo meu site. Todos as funções de verificação se encontram no módulo "mod_boleto_itau"

Sucesso!

Balemberg   22/07/2013 18:29:04

Olá Avelino
Se soubesse que você estava atrás de um código sem OCX para fazer o código de Barras, teria te enviado o que eu uso.
Como deve ter percebido, o trabalho está em criar o código para cada banco, já que cada um teu seu critério para a confecção do mesmo.
Se caso não tenha ido muito a fundo sobre a criação do código de barras e a linha digitável dos boletos, lembro que os bancos tem 2 tipos( espero que ainda seja isso) de códigos para boletos.
Como faz muito tempo que criei esses código (Acc97) não me lembro os nomes
Portanto, o programador DEVE ir conversar com o gerente do banco em questão, o qual entregará um manual ou o encaminhará ao pessoal de TI do banco.
Mas você não só achou como caminho no CAMINHO DAS PEDRAS ^^

Abraços

GILSON BATISTA DE OLIVEIRA   22/07/2013 19:18:59

Excelente trabalho Avelino, tenho um sistema de gerenciamento de escritório de contabilidade e utilizo os boletos da CAIXA em um aplicativo fornecido por eles, mas gostaria de emitir os boletos direto de meu sistema. Este boleto do ITAU pode ser aproveitado para CAIXA ou teria algum modelo de boletos da CAIXA. Desde já agradeço. E-mail: atendimento@gcontabil.com.br

Marcelo   22/07/2013 20:48:16

Cada vez mais você nos surpreende com seus projetos, fico feliz de saber que tem alguém como você que nos mostra o caminho das pedras em nossos desafios. Muito obrigado.

Quando li seu artigo me veio uma duvida, tenho um aplicativo que gerência honorários contábeis, quando e finalizado os honorários e digitado no sistema próprio do banco para gerar os boletos, isso da retrabalho danado. É possível através do ACCESS receber o retorno do banco referente os boletos pagos? Ou seja, quando fazemos o boleto no sistema do banco recebemos o retorno no próprio aplicativo, se recebermos o retorno através do próprio ACCESS seria possível dar baixas automática nos boletos, ficaria muito legal, manualmente sei que é possível, ou seja, pegar o arquivo colocar em uma pasta especifica e fazer a leitura do mesmo através do VBA.

Helena   23/07/2013 07:20:10

Olá Avelino bom dia tudo bem?

Preciso migrar um banco de dados do Access para outro sistema
não tenho noção de como começar,
qual seria o primeiro passo para fazer isso?
poderia me ajudar?

Grata,

Marcelo Silva   24/07/2013 11:15:07

Bom dia!

Ja alguns dias atrás tive que criar etiquetas de separação para uma operação da Coca-Cola onde trabalho, eu precisa exatamente de um código de barra pois a parti deste código de barra eu iria gerar a produtividade de cada auxiliar.
Exemplo: O Auxiliar viria até a bancada onde estavas a lista das etiquetas de separação por carro, pegaria o cracha e passaria em um leito de código de barra para identificar o colaborador e depois passaria na frente do leitor o código de barra da etiqueta.
O problema que na empresa tudo e muito restrito, eu nao queria usar DLL para gerar estes códigos e nem dominava este exemplo de atribuir imagens, a solução que encontreu foi buscar fonte de letra para gerar os códigos.
Encontrei varias fontes mas nenhum funcionava com o leitor que eu tinha, fiz varios testes, adicionei varias fontes e nada.
Até que encontrei em um forum a resposta para o meu problema, o leitor não reconhecia o código de barra pois o formato das letras não era identificados, para que o leitor fizesse a leitura de forma correta da fonte, antes dos números ou letras que compunham o código de barra eu deveria adicionar *, e no fibal do código de barra fechar novamente com *
Para este problema acima, eu não conseguiria usar esta mesma metodologia sabendo qual a fonte usada pelo Itau?

Avelino Sampaio   24/07/2013 17:20:21

Quero agradecer ao colega GILMAR CAETANO que me deu a preciosa dica de utilizar o método LINE do relatório, possibilitando assim um estrutura mais limpa e um código mais simples.

Sucesso!

Helena   25/07/2013 07:26:59

Bom dia Avelino,

Obrigada por compartilhar todos seus artigos.

Paulo Farias   25/07/2013 16:09:50

Boa tarde Avelino,
Muinto obrigado por compartilhar seus artigos.

Avelino Sampaio   26/07/2013 09:17:01

Gilson Batista,

boa parte poderá ser aproveitado sim, principalmente a técnica apresentada para montagem do Código de Barras.

Copie e cole no seu navegador o endereço abaixo, que mostra os modelos para cada banco. Verá que todos seguem praticamente uma mesma padronização.

http://www.netdinamica.com.br/boleto/teste-boleto.php

Se eu não me engano, a documentação com as instruções da CAIXA, você pega no link abaixo. Copie e cole o link no seu navegador.

http://www1.caixa.gov.br/download/index.asp

Sucesso!

Marcio Melo - RJ   27/07/2013 13:18:32

Boa tarde! a todos...

Solução profissionais e bem completas; fiquei super feliz em saber da interação entre usuários e mestre Avelino e assim enriquecer ainda mais o site. Parabéns pela solução limpa e eficaz, sempre precisamos destes exemplos, essa parte do LINE no artigo sobre seu uso a faço até hoje para ter bordas externas nos documentos nem imaginava que tinha esse potencial a mais.

Forte abraço; fantástica essa equipe...

Sou mais Brasil!

Helena   01/08/2013 17:24:18


Boa tarde Avelino,

Preciso fazer uma busca de nomes em duplicidade em uma planilha excel
pode me dar uma ajuda?

Abraço.

Ronaldo Costa   10/08/2013 08:41:46

não poderia de deixar os meus cumprimentos, pois, as vezes, parece que o Avelino tem uma bola de cristal. De repente ele aparece com soluções que supre as necessidades que alguns estão vivenciando no momento. Parabéns e obrigado.

Eduardo Utyiama   21/08/2013 13:43:13

Boa tarde a todos:

Em resposta ao amigo Marcelo Silva, conforme citado "...antes dos números ou letras que compunham o código de barra eu deveria adicionar *, e no final do código de barra fechar novamente com *", você está utilizando o tipo Code39 (alfanumérico). O exemplo criado pelo mestre Avelino Sampaio é o I25 (intercalado 2/5, ou seja, a cada 5 barras, 2 são pretas), exclusivamente numérico.

Você poderá utilizar a metodologia apresentada pelo mestre seguindo duas condições: 1. O crachá de identificação seja exclusivamente numérico, retirando o asterisco "*"; 2. Seu leitor de código de barras esteja habilitado para leitura do código I25.

Pela minha experiência no ramo industrial, em fábricas, é comum a utilização da codificação 39 na confecção de código de barras justamente pela flexibilidade de utilizar caracteres alfanuméricos e especiais. Tendo conhecimento em programação VBA, poderá adaptar em seu projeto a solução apresentada por James Isle Mercanti e muito difundida entre usuários do MS Access.

Apesar de preferir utilizar a codificação nativa do VBA com ".Line" e "-Step" para "desenhar" as barras, elas dão mais trabalho. Com as fontes TTF, mesmo necessitando de uma função para codificar os caracteres, sua utilização é mais simples, inclusive, quanto ao ajuste de tamanho, bastando apenas alterar o tamanho da fonte.

Ou seja, existem várias alternativas... Cabe a você decidir qual delas melhor se adapta às ferramentas que dispõe.

Em tempo: Parabéns, mestre Avelino! Sempre surpreendendo e inovando em cada Post!

William Lucena Bandeira   18/09/2013 09:02:29

baixei arquivo : BoletoItau.zip
ao abrir dá erro arquivo accdb desconhecido

estou com access 2007 instalado


Avelino Sampaio   18/09/2013 09:34:21

William,

seu 2007 está com o pacote sp2 ou sp3 ? Se não tiver, baixe a atualização direto do site da Microsoft.

No aguardo

Lucas   21/11/2013 16:05:47

Avelino, sabes me dizer por que quando imprimo pelo botão de impressão rápida o código de barras é impresso e quando apertando control + p não?

Muito bom seu exemplo.

Avelino Sampaio   22/11/2013 07:39:47

Lucas,

fiz uma simulção aqui e não apresentou este problema. Minha impressora é uma Epson.

O exemplo oferece dois métodos para montagem da barra. O problema acontece para os dois métodos (uso imagens e o uso do LINE) ?

No aguardo

djalma   02/01/2014 11:29:02

É se aplicativo é bem mais pratico ,bem tudo fica mais simples é muito da hora. ..

GILBERTO TEIXEIRA   20/02/2014 16:21:09

DESENVOLVI UM QUE GERA EM HTML PARA VARIOS BANCOS, GERA E ANEXA AO OUTLOOK

Julia   27/03/2014 07:35:10

Avelino,

Utilizei esse seu exemplo aqui na empresa onde trabalho, no lugar dos inquilinos utilizo os clientes, estava funcionando perfeitamente, não sei o motivo começa a dar erro no código (mod_boleto_Itau):

============================================================
Function fncCalculaDVCodBarras(sequencia)
Dim fator As Byte
Dim Total
Dim numero
Dim resto
Dim resultado
Dim i As Integer

fator = 2
Total = 0
For i = 43 To 1 Step -1
numero = Mid(sequencia, i, 1)
If fator > 9 Then
fator = 2
End If
numero = numero * fator
Total = Total + numero
fator = fator + 1
Next
resto = Total Mod 11
resultado = 11 - resto
If resultado >= 10 Or resultado = 0 Then
fncCalculaDVCodBarras = 1
Else
fncCalculaDVCodBarras = resultado
End If
End Function
============================================================

Em especial na linha que se refere: numero = numero * fator

O que poderia ser?

Muito estranho pois estava funcionando perfeitamente, e é a segunda vez que acontece.

Na primeira vez eu apenas limpei as tabelas e voltou a funcionar, dessa vez não.

Não sei mais que fazer.

Obrigado.

Julia


Avelino Sampaio   28/03/2014 06:27:57

Julia,

O erro pode estar no sequência. Verifique o tamanho da sequencia (43 caracteres). Utilize a função Msgbox() na função para poder verificar a sequencia.

Function fncCalculaDVCodBarras(sequencia)
Dim fator As Byte
Dim Total
Dim numero
Dim resto
Dim resultado
Dim i As Integer

msgbox sequencia

fator = 2
Total = 0
For i = 43 To 1 Step -1
numero = Mid(sequencia, i, 1)
...
...

Sucesso!

Julia   28/03/2014 10:15:33

Obrigado Avelino, o problema era com o número do banco.

Valeu!

EDUARDO LUIZ ORTEGA   08/04/2014 09:45:53

Avelino, bom dia. Não sou da área de TI nem programador, mas tenho o Access como meu hobby há mais de 20 anos. Todo o sistema de minha empresa foi feito por mim e já aprendi muito com você. A solução do Itaú foi a cereja do bolo em meu sistema.

DÚVIDA: Gostaria de saber como baixar um pouco a posição do código de barras no formulário, pois vou mudar o lay out para incorporar a Nota Fiscal na parte superior da folha.
Muito obrigado.... MESMO!!!!

Avelino Sampaio   09/04/2014 07:42:50

Eduardo,

diminua ou aumente proporcinalmente a medidadas 14175 e 14927

Me.Line (PosiçãoEsquerda, 14175)-(PosiçãoEsquerda + IIf(Left(sgif, 1) = "3", px3, px1), 14927), IIf(bbar = True, vbBlack, vbWhite), BF

14175 significa que está a 25 cm do topo. O cetimentro no VBA vale 567 :::> (14175/567) = 25

Sucesso!

EDUARDO LUIZ ORTEGA   09/04/2014 12:56:59

Avelino, muito obrigado pela sua sempre didática resposta.
Aproveitando: você tem ou conhece algum módulo para gerar as NFS-e (nota fiscal de serviços paulistana)??? Não é a do Estado, mas a da Prefeitura de São Paulo.

Felicidades.

Avelino Sampaio   10/04/2014 06:58:34

Eduardo,

procure pelo meu amigo Jeferson no site www.kartoffel.com.br

Sucesso!


Envie seu comentário: