Sei sulla pagina 1di 11

Retngulos, linhas e bordas em relatrios

Os relatrios possuem um mtodo chamado Line, que nos permite criar formas retangulares, em qualquer
posio.
O mtodo Line tem a seguinte sintaxe:
Line (esquerda, topo)-(esquerda, topo), Cor, B
Observe que temos que indicar duas coordenadas para definir a posio e o tamanho do retngulo
desejado: Esquerda significa o quanto a coordenada dever estar afastada do canto esquerdo do relatrio
e Topo significa o quanto dever estar afastada da parte superior do relatrio. A contagem a partir das
margens.
Exemplo:
me.Line (0,0) - (567,1134), vbRed, B
O resultado este que voc v na imagem:


O VBA possui uma unidade de medida, chamada Twip, que equivale a 1/20 de um ponto ou 1/1.440 de
uma polegada. Existem 567 Twips em um centmetro. Os valores 567 e 1134 da coordenada acima esto
em Twips.
Para facilitar a nossa compreenso, podemos trabalhar com valores em centmetros , bastando para isso,
multiplicar o valor por 567 Twips. Nosso exemplo acima, fica assim:
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, B
Ou seja, nossa segunda coordenada tem 1 cm afastada da esquerda e 2cm afastada do topo.
Podemos criar diversos retngulos no relatrio. Exemplo de dois retngulos:
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, B
me.Line (567 * 0.3, 567 * 0.5) - (567 * 2.3, 567 * 3.5), vbBlue, B
Veja o resultado na imagem abaixo! O retngulo azul medindo 2cm x 3cm e afastado 0.3 cm da lateral
esquerda e a 0.5 cm do topo.


Podemos alterar a largura da linha, atravs do propriedade DrawWidth. Este valor medido em Pixel que
vai de 1 pixel (padro) a 32767 pixels. Exemplo:
me.DrawWidth = 8 'pixels
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, B
me.DrawWidth = 1 'pixel
me.Line (567 * 0.3, 567 * 0.5) - (567 * 2.3, 567 * 3.5), vbBlue, B
Observe bem a largura da linha do retngulo vermelho em relao a do Azul:


Para preencher o retngulo, basta acrescentar um F depois do B. Exemplo:
me.Line (0,0) - (567 * 1, 567 * 2), vbRed, BF
Agora, veja o resultado:


Podemos criar um retngulo bem estreito, que d para us-lo como linha. Exemplo:
Me.Line (567 * 1, 567 * 1)-(567 * 1.02, 567 * 4), vbRed, B 'linha na vertical
Me.Line (567 * 2, 567 * 2)-(567 * 6, 567 * 2.03), vbRed, B 'linha na horizontal
Veja o resultado na figura abaixo:


Existem duas propriedades que nos permitem obter as dimenses do relatrio: Me.ScaleHeight que nos
fornece a altura e a Me.ScaleWidth que nos fornece a largura. As medidas so fornecidas em Twips.
Ento, fica fcil montarmos um retngulo, nas dimenses do relatrio, formando com isso a nossa
borda. Exemplo:
me.DrawWidth = 8 'pixels
Me.Line (0, 0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbRed, B
Observe que diminu o tamanho em 25 twips para que as partes do retngulo da lateral direita e inferior
apaream.
Temos, como resultado, a imagem abaixo:


O evento que recebe o mtodo Line para a formao da borda externa o "Na pgina", mas tambm
pode ser utilizado em outras sees do relatrio. Exemplo do cdigo utilizado em dois eventos de um
relatrio:
Private Sub Detalhe_Format(Cancel As Integer, PrintCount As Integer)
Me.Line (0, 0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbRed, B
End Sub

----------------------------------------------------------------------------------------------

Private Sub Report_Page()
Me.Line (0, 0)-(Me.ScaleWidth - 25, Me.ScaleHeight - 25), vbBlack, B
End Sub

Veja, na imagem abaixo, o resultado! A borda preta formada no evento "Na pgina(report_page)" e as
bordas em vermelho, geradas no evento "Ao Formatar" da seo detalhes.


Existe tambm o mtodo para a criao de crculos (Circle) e que vou deixar para voc pesquisar no help
do Access. Bom estudo!

Boleto Bancrio do Ita - Cdigo 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 cdigo de barras
e isso em verses de 64 bits poderia no funcionar.
A soluo para escapar do uso de arquivo OCX seria tentar trazer para o Access a idia de um projeto
feito em ASP, que usava imagens das barras, devidamente enfileiradas para montar o cdigo de barras.
Cdigo de barras com imagens:
So utilizadas quatro barras como padro, 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:

O mtodo 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
mdias para obter o posicionamento esquerda do Controle de Imagem seguinte, conseguindo assim, o
alinhamento sequencial das barras. Observe na imagem abaixo:

O posicionamento esquerda da terceira barra a soma da primeira barra em relao a margem (A),
mais a largura da primeira barra (B), mais a largura da segunda barra (C).
Me!CampoImagem.Left = PosioEsquerda

'armazenando a posio para o prximo Controle de Imagem
PosioEsquerda = PosioEsquerda + px1 (ou px3)
O cdigo gerador do boleto possui 44 nmeros, conforme exemplo sequencial abaixo:
34191595300000015001741000000169555033350000
Cada nmero da sequncia representado por 5 barras, o que nos d um total de 220 barras (44 x 5)So
utilizadas ainda, mais 4 barras para identificar o incio da leitura e mais 3 barras para identificar o fim da
leitura, totalizando 227 barras.
Ento, duzentos e vinte e sete foi o nmero necessrio de Controles de Imagens que tive que criar para a
montagem do cdigo de barras. Veja na imagem abaixo:


O Cdigo
Analise o cdigo utilizado no evento "Ao formatar" do boleto, que ajusta a largura e a posio esquerda
de cada Controle de Imagem:
Const px1 = 15 '1 pixel
Const px3 = 45 '3 pixels

'posio esquerda da primeira barra, em relao a margem
PosioEsquerda = 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 posio esquerda do Controle de Imagem
Me("img" & ipos).Left = PosioEsquerda

'Armazenando a prxima posio esquerda
PosioEsquerda = PosioEsquerda + 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 cdigo de barras, devidamente montado:


Gerando o Boleto no aplicativo exemplo
Ao rodar o aplicativo, ser exibida a seguinte tela, mostrando o formulrio Controle de Aluguis:


Selecione o senhorio > selecione o inquilino > Clique no boto "Gerar novo boleto" para o inquilino
selecionado.
O formulrio de preenchimento de boleto ser exibido, conforme imagem abaixo:


Basta preencher a data do documento, a data do vencimento e relacionar os itens dos campos de
instrues aos seus respectivos valores. Ento, ao trmino do preenchimento, ao clicar em "Imprimir
Boleto" ser visualizado o boleto para a impresso.
Uso do mtodo LINE em vez das imagens (24/07/2013)
Um colega de frum chamou a minha ateno para o fato de que eu poderia utilizar o mtodo LINE, ao
invs das imagens, pois desta forma, dispensaria o uso dos Controles de Imagens. Resolvi pr em prtica
o LINE e o resultado foi timo, tornando tanto a montagem como a programao, bem mais simples.
Para quem quiser saber a fundo sobre o uso do LINE, clique aqui e veja o meu artigo.
Observe o cdigo modificado como ficou:
Const px1 = 15 '1 pixel
Const px3 = 45 '3 pixels

'posio esquerda da primeira barra, em relao a margem
PosioEsquerda = 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 (PosioEsquerda,14175)-(PosioEsquerda + IIf(Left(sgif,1)="3",px3,px1),14927), _
IIf(bbar = True, vbBlack, vbWhite), BF

'Armazenando a prxima posio esquerda
PosioEsquerda = PosioEsquerda + IIf(Left(sgif, 1) = "3", px3, px1)

bBar = Not bBar
Next
O uso do LINE est no relatrio rltBoletoIta_line do arquivo exemplo.
Download
Para entrar no modo estrutura, mantenha pressionada a tecla SHIFT na inicializao.
Para visualizar o Painel de Controle, utilize a tecla F11.
BoletoItau.zip
Nota: O exemplo aqui oferecido para boleto sem registro. Caso necessite elaborar o seu boleto com
registro e remessa, faa o download abaixo do arquivo do Ita, que segue as instrues da Fenabran 240
de abril de 2013.
Cobranca_cnab240.zip
Bom estudo e sucesso!

Boleto Caixa Econmica no formato PDF para envio por email
Em um dos meus tutoriais foi apresentada a tcnica de gerar o Cdigo de Barras, utilizando o
mtodo LINE do objeto relatrio. A grande vantagem de utilizar o mtodo LINE a compatibilidade entre
as verses do Access, sejam elas de 32 ou 64 bits. Foi utilizado, como exemplo prtico, a gerao de
boletos referente ao BANCO ITA. Clique aqui para ter acesso ao tutorial e conhecer as tcnicas
empregadas neste processo.
Boleto Caixa Econmica Federal
Com a documentao especfica da Caixa Econmica em mos ficou relativamente simples adaptar a
gerao de boleto do Banco Ita para o da Caixa Econmica. A principal alterao foi na seqncia de
montagem do cdigo que pode ser comparada abaixo:
'--------Itau ------------'
codigo_sequencia = banco & moeda & fator & valorSeq & Carteira & NossoNumero & _
dv_nossonumero & Agencia & Conta & Dv_conta & "000"
'--------------------------'

'--------Caixa------------'
codigo_sequencia = banco & moeda & fator & valorSeq & NossoNumero & Agencia & _
Operacao & String(8 - Len(Conta), "0") & Conta
'-------------------------'
Gerando o boleto em PDF e enviando pelo Outook
Para incrementar o projeto foi acrescentado o cdigo que gera o PDF do boleto e o envia por email,
utilizando o Outlook. A base para o cdigo gerador do PDF foi utilizada deste meu tutorial, que ensina a
utilizar o comando Docmd.OutPutTo.

Ao clicar no boto "Enviar boleto por Email", toda a estrutura do email montada e exibida no Outlook,
conforme voc pode observar na imagem abaixo:
Para
enviar o email de forma automtica, sem esta prvia visualizao, basta alterar a
linhaobjmail.Display para objmail.send.
Download
Segue abaixo o aplicativo exemplo. Foi includa a documentao especfica da Caixa Econmica Federal,
caso haja a necessidade de alguma modificao.
BoletoCaixa.zip
Sucesso!