quinta-feira, 4 de dezembro de 2008

BOLETOS BANCÁRIOS COM DELPHI 6 AO 2007

Logo de manhã pela empresa, me foi pedido para adicionar ao sistema financeiro uma forma de enviar boletos bancários para os clientes assim que a conta com suas faturas fossem criadas.
Eu já tinha criado boletos bancários via Web pelo PHP e pelo ASP.

Pelo PHP, eu tinha as bibliotecas do PHP boleto f'ácil, pelo ASP eu criava os boletos seguindos os layouts dos bancos (móu trabalhão ferrado).
A maravilha do Delphi, é que temos uma comunidade muito grande que cria componentes quase que diariamente :D .

Eu testei dois componentes e que a maravilha dos dois, é que eles são openSource :D
Os componentes são os seguintes:

GBBoleto:
http://sourceforge.net/projects/gbboleto/ (Delphi 5, 6 e 7)
Bancos disponíveis:
  • Itaú
  • NossaCaixa
  • Banespa
  • Unibanco
  • Real
  • Bradesco
  • Caixa Federal
  • Banco do Brasil
  • Santander
  • Banco de crédito nacional
  • Sudameris
  • Mercantil do Brasil
  • Safra
  • Sicredi


FreeBoleto:
http://sourceforge.net/projects/freeboleto/ (Delphi 7 ao 2007)
Bancos disponíveis:
  • Itaú
  • NossaCaixa
  • Banespa
  • Unibanco
  • Real
  • Bradesco
  • Caixa Federal
  • Banco do Brasil
  • Santander


Instalando o FreeBoleto no Rad Studio 2007

Para instalar o componente no RAD Studio 2007, basta clicar em File, Open e abra o arquivo FreeBoleto_D11.dproj.

O Project Manager do Delphi ficará dessa forma:

Clique no FreeBoleto_D11.bpl com o botão direito do mouse, Build e depois clique em Install.
Uma nova paleta chamada FreeBoleto é criada.













Entendendo como funciona o boleto bancário.
Para criarmos boleto bancário, precisamos evidentemente possuir uma conta bancária em um dos bancos que o componente disponibiliza a geração do boleto.
Abaixo estão alguns dados referente ao boleto bancário que você precisa conhecer:

Código cedente: Este campo varia conforme o banco, mas em
geral é composto pelo número da carteira, agência, conta e dígito, que dependendo
do banco pode ser: agencia+conta ou mesmo carteira+agencia+conta, cada banco
tem um padrão. Você precisa entrar em contato com o seu banco, e solicitar seu código cedente para geração de boleto.


Cateira:
Contem o código da carteira que está sendo utilizada. Isto também muda de banco
para banco
.
É justamente este campo que indica o tipo de cobrança escolhida pelo cedente.
Por exemplo, no Unibanco a carteira sem registro é conhecida como "ESPECIAL"
e a registrada como "REGISTRADA". Já no Itaú, a sem registro é conhecida como
"174" ou "175" e a registrada como "109" e assim vai.
Existem umas grandes variedades de modalidade de cobrança, para boletos cada
uma tem uma finalidade, vantagens e desvantagens. Descrevi apenas as principais
diferenças entre os dois tipos mais comuns, que atende a maioria dos usuários,
temos mais detalhes sobre elas que não deu pra abordar neste artigo, mas o principal
você já sabe.
Se tiver maiores dúvidas, consulte seu banco, este sim poderá fornecer maiores
detalhes sobre os tipos de cobrança.


Nosso número: Este campo também varia conforme o banco, mas você deve dar uma atenção especial à ele, porque quando o boleto é pago, é com esse número que aparece no seu extrato, assim você tem como identificar o boleto pago por um sistema administrador da sua conta fornecido pelo seu banco (Esse sistema gerenciador não é obrigatório).
Você pode usar esse número para administrar seu sistema, como identificação de número da duplicata, número do boleto pago, ou algo dessa forma.
Portanto esse número deve ser diferente para cada boleto emitido, e não podendo haver duplicidades.
Alguns bancos fornecem uma faixa de números que o cliente pode trabalhar, outros já deixam a critério do cliente.


Modalidade da conta: O banco tem varias modalidades de cobrança, e emissão de boletos. Vou descrever
as duas principais e mais utilizadas e com as quais já trabalhei.

Cobrança Registrada

Quando emitir seus boletos com cobrança registrada, você deve enviar um arquivo
de remessa para o banco, este arquivo de remessa segue um padrão, que não vem
ao caso agora, senão o artigo vai ficar enorme.

Este arquivo de remessa que é enviado ao banco e serve para registrar os boletos
emitidos. Assim, se algum sacado não pagar, o banco pode automaticamente ou
por instrução do cedente, pode mandar o nome do sacado para protesto, ou mesmo
o para o cadastro do spc.

Ou seja, este tipo em geral é utilizado quando as empresas querem ter uma segurança
maior, de modo que se o cliente não pagar eles tem um meio legal de protestar
o sacado e cobrar a dívida.

Cobrança sem Registro

Nessa cobrança você simplesmente emite o boleto e o envia para o sacado pagar
e não há registro no banco sobre este boleto emitido, o banco só saberá da existência
do boleto quando ele for pago.
Esta é a cobrança mais indicada para uso na internet, porque se o cliente não
pagar, simplesmente o pedido não é enviado.

Agora que você já conhece os dois principais tipos de cobrança, vamos falar
sobre o campo "carteira" do boleto. É justamente este campo que indica o tipo
de cobrança escolhida pelo cedente.

Por exemplo, no Unibanco a carteira sem registro é conhecida como "ESPECIAL"
e a registrada como "REGISTRADA". Já no Itaú, a sem registro é conhecida como
"174" ou "175" e a registrada como "109" e assim vai.

Existem umas grandes variedades de modalidade de cobrança, para boletos cada
uma tem uma finalidade, vantagens e desvantagens. Descrevi apenas as principais
diferenças entre os dois tipos mais comuns, que atende a maioria dos usuários,
temos mais detalhes sobre elas que não deu pra abordar neste artigo, mas o principal
você já sabe.

Se tiver maiores dúvidas, consulte seu banco, este sim poderá fornecer maiores
detalhes sobre os tipos de cobrança.


Convênio:
Este campo serve apenas para o banco do brasil (pelo menos o que eu sei até agora).
Caso seu banco seja o B.B, entre em contato com sua agencia/gerente e obtenha mais informações.
Como eu utilizo o Bradesco, não precisei utilizar este campo.


Documento:
Você pode usar este campo para dizer qual documento/nota fiscal este boleto bancário pertence. Este campo não é obrigatório.

Criando o formulário e objetos para geração do boleto com o componente.

Você pode criar os objetos com as classes TFreeBoleto e TFreeBoletoImagem ou apenas arrastar os componentes que foram registrados na paleta FreeBoleto.

No diretório do arquivo compactado que você efetuou o download, há um diretório chamado Demo.
Abra o projeto e verifique os passos para a criação do boleto.
O exemplo é bem simples.
Em caso de dúvidas, há um grupo de discussões no yahoo do Freeboleto, que pode ser acessado pela URL:
http://br.groups.yahoo.com/group/freeboleto

Aqui esta "a cara" do boleto bancário utilizando o arquivo de demonstração do FreeBoleto:
















Fmz pessoal?
Abraços e até a proxima.

9 comentários:

nigthwolfer.mil disse...

Olá Maurício, será que você poderia articular um exemplo com a composição do arquivo de remessa?

Anônimo disse...

Encontrei a informação q eu precisava. Obrigado

Anônimo disse...

EXCELENTE POST, SE CONSEGUIR COLOCAR PRA ARQUIVO DE REMESSA MELHOR AINDA, EU ESTAVA HA MUITO TEMPO TENTANDO INSTALARO GBBOLETO NO DELPHI2007 E N CONSEGUI, E ESSE FREEBOLETO FOI RÁPIDO. VALEW!

Unknown disse...

Gostaria de obter ajuda para encontrar boleto para o BRB (070). Tenho a documentação.

Allan Massahud disse...

muito obrigado ! eu não conhecia o Free Boleto e vou testá-lo.

Unknown disse...

Ola Mauricio, estou precisando de ler o extrato bancário de praticamente todos os bancos do brasil, voce tem ou conhece alguem que ja desenvolveu tal componente.. assim o "boleto" ?

Marcia disse...

Olá, Me chamo marcia e gostaria de mais informações sobre o gerador de boletos entre em contato comigo pelo softunion@hotmail.com, pois tenho algumas duvidas

Anônimo disse...

EU USO ESSE FREE O PORBLEMA E QUE NAO TEM RETORNE E NEM REMESSA ALGUEM TEM OU JA USA OUTRO COMPONENTE?
FALECOMDREAMSOFT@HOTMAIL.COM

Unknown disse...

Olá Mauricio, estou tendo problema pra instalar o componente no meu Delphi 6, será que você poderia me dar uma luz??

[Error] gbCobranca.pas(355): Undeclared identifier: 'TObjectList'

Desde já agradeço a atenção..