Академический Документы
Профессиональный Документы
Культура Документы
Cdigo de barras
INTRODUO
Quem se lembra da operao de varejo no Brasil antes dos anos 90, quando a tecnologia era proibida por aqui, sabe a grandeza que representa a automao comercial. Nos supermercados, por exemplo, o funcionrio do caixa procurava a etiqueta de preo de cada item e digitava o valor em sua mquina registradora, fazendo a soma. Muito usual tambm era ver uma empresa do comrcio fechada para inventrio, visto que o controle era praticamente todo manual e demandava muito tempo, espao e pessoas. Apenas as lojas menores podiam se dar ao luxo de conhecer mais de perto os clientes: anotava-se em sua ficha, ou na caderneta, os produtos comprados e os pagamentos realizados. Neste quadro cabe muito bem a expresso: isto coisa do sculo passado! Mas lembre-se: faz menos de 15 anos... Com a (tardia) entrada dos microcomputadores no Brasil, houve uma revoluo na administrao de varejo. O funcionrio do caixa, ao invs de simplesmente somar preos, passou a entrar com o cdigo dos produtos, e o sistema informatizado fazia o resto: totalizava as vendas, dava baixa no estoque, emitia relatrios atualizados, informava a comisso dos vendedores e tudo mais. Foi um enorme salto de produtividade. Mesmo assim, ainda era possvel melhorar: ao invs do usurio entrar com os dados, por que no o prprio sistema captur-lo? aqui que entra o cdigo de barras, uma tecnologia aplicada a muitas reas: indstria, comrcio, bancos, bibliotecas, hospitais, bancos de sangue, correios, transportes, controles de acesso etc. Apresentarei neste artigo algumas solues de cdigos de barras aplicadas ao comrcio. Inicio da pagina
O PAPEL DO APLICATIVO
muito importante entender que quem deve se preocupar com a leitura das barras o leitor ptico: ele foi criado para esta nica finalidade. O aplicativo, por sua vez, deve se preocupar em entender o contedo que as barras representam, ou seja, os caracteres que foram interpretados pelo leitor ptico. Eu friso este ponto porque justamente nele que muitos desenvolvedores ficam em dvida: como fazer meu aplicativo entender as barras? A resposta simples: o aplicativo no precisa entender as barras, mas sim o contedo delas. O leitor ptico faz a leitura e retorna o resultado (ex: 9771414305005). O trabalho do aplicativo deve ser tratar o 9771414305005 (buscando o ID na tabela de produtos, gravando nos detalhes de venda, imprimindo o item no cupom fiscal, etc.).
Inicio da pagina
b) Usar cdigo VBA para gerar as barras: a soluo mais interessante, pois interna do prprio aplicativo, no sendo preciso licenciar e cuidar da distribuio de componentes externos. Entretanto, as rotinas de gerao das barras so bastante complexas, estando alm do escopo do dia a dia do desenvolvedor. c) Usar um componente externo (OCX ou DLL) que tenha todas as regras encapsuladas, para que com poucas linhas de cdigo as barras sejam geradas sem dificuldade. uma boa soluo para quem pretende trabalhar com vrios padres diferentes, pois tira do desenvolvedor a necessidade de lidar com as inmeras particularidades e regras de cada tipo. Os componentes mais completos no so gratuitos. Inicio da pagina
GERANDO EAN13
Na edio 23 da FrumAccess foi publicado um artigo pioneiro sobre cdigo de barras no Access, de autoria do Mauro Possato, o qual considero de leitura obrigatria a quem vai trabalhar com este recurso. O artigo explica o clculo do dgito verificador e todo o cdigo necessrio para se gerar as etiquetas, e ainda inclui um MDB de exemplo (Ean13.mdb), que pode ser encontrado no CD Enciclopdia FrumAccess (outra fonte indispensvel de estudo), ou na seo de downloads do FrumAccess (www.forumaccess.com.br/novo/downloads.asp, no link da Revista 23). Uma outra forma de se gerar cdigo de barras EAN13 usar o ActiveX Chromatick BarCode, que freeware e pode ser encontrado para download em sites como VbMania e VbBrasil, e tambm foi includo no arquivo de exemplo deste artigo. Para us-lo, copie os arquivos CTKBCDC.OCX e CTKBCDC.DEP na pasta de sistema do Windows (c:\Windows\System ou c:\WINNT\System32, dependendo do sistema operacional) e faa o registro digitando Regsvr32 CTKBCDC.ocx na linha de comando do Iniciar/Executar do Windows (Figura 1).
Figura 1 - Registro do componente Feito o registro, os controles dos cdigos de barras podero ser colocados em relatrios do Access como qualquer outro controle, bastando abrir a caixa de ferramentas e clicar no boto Mais Controles (Figura 2), selecionar na lista e dimensionar no relatrio.
Figura 2 - Listagem Mais Controles No arquivo de exemplo deste artigo, que deve ser usado para acompanhar os prximos itens, criei um relatrio a partir do Assistente de Etiqueta e inclu os campos de cdigo do produto (CodBarras - deixei invisvel), descrio e preo. Coloquei o controle ctk_BarCode.EAN13 para exibir as barras (Figura 3), dando-lhe o nome de ctkEAN13.
Figura 3 - Estrutura do relatrio Veja que o controle ActiveX fica configurado para imprimir zeros, ento preciso informar, em tempo de execuo, o valor que dever estar contidos nas barras (ou seja, o contedo do campo CodBarras), na propriedade Code. Para isto, pode ser usado o evento Ao Imprimir da seo detalhe, com a seguinte linha de cdigo:
Me.ctkEAN13.Code = Me.CodBarras
O resultado do relatrio de etiquetas pode ser visto na Figura 4.
GERANDO EAN8
Para gerar o cdigo EAN8, voc pode usar o mesmo componente, porm incluindo o controle ctk_BarCode.EAN8 no relatrio, dando-lhe o nome de ctkEAN8. Siga os mesmos passos descritos anteriormente, lembrando de ajustar o nome do controle na linha de cdigo do evento Ao Imprimir da seo:
Me.ctkEAN8.Code = Me.CodBarras
O cdigo de barras EAN8 tem a aparncia mostrada na Figura 5.
GERANDO CDIGO 3 DE 9
O cdigo de barras 3 de 9 (ou Barcode39) bastante usado para cdigos personalizados, e tem a flexibilidade de imprimir letras e caracteres especiais, aumentando bastante a possibilidade de aplicao. Uma das formas de ger-lo usar o mesmo componente ctk_BarCode j explicado nos tpicos anteriores, porm selecionando o controle Code39. Como neste cdigo os caracteres no so exibidos em formato humano-legvel, recomendvel deixar visvel uma caixa de texto com o cdigo do produto, para que o operador possa digit-lo caso a leitura ptica falhe. Entretanto, a melhor forma de se trabalhar no Access com o Barcode39 por meio de cdigo. No arquivo de exemplo deste artigo coloquei as funes necessrias para isto: a
funo MD_BC39 retorna a composio binria (de 9 dgitos) de cada letra, nmero e caractere especial suportados pelo Barcode39. J a funo MD_Barcode39 usa essa composio de binrios para gerar as barras pretas e brancas em um controle do relatrio (o nome do controle e do relatrio so passados como parmetros). No coloquei estas funes aqui porque so extensas e esto fora do escopo do artigo, mas quem tiver curiosidade pode analisar o mdulo basCodBar39 do arquivo de exemplo. J no relatrio, basta criar uma caixa de texto (Barcode39) para receber as barras, e outra com o nome (CodBarras) para exibir o cdigo em formato humano-legvel. No evento Ao Imprimir da seo detalhe, coloque uma linha de cdigo para chamar a funo MD_Barcode39:
Figura 6 - Relatrio do cdigo 39 O cdigo 3 de 9, alm de letras e nmeros, tambm imprime espao, $ (cifro), % (porcentagem), + (mais), | (pipe), . (ponto), - (hfen) e / (barra). Uma terceira forma de se trabalhar com o cdigo 39 usar uma fonte TrueType. possvel fazer download de uma fonte gratuita no endereo www.squaregear.net/fonts/free3of9.shtml, a qual tambm foi includa no arquivo de exemplo deste artigo. Para us-la, copie os arquivos FREE3OF9.TTF (Free 3 of 9 - para nmeros) e FRE3OF9X.TTF (Free 3 of 9 Extended - alfanumrica) para a pasta de fontes do Windows. Em seguida, abra o Painel de Controle e o cone Fontes. Abra o menu Arquivo/Instalar nova fonte, selecione a pasta de fontes e selecione os dois arquivos TTF, conforme indica a Figura 7.
Figura 7 - Instalao de fontes TrueType Com as fontes instaladas, crie uma caixa de texto no relatrio do Access e selecione Free 3 of 9 Extended como propriedade Nome da Fonte. Na origem do controle, necessrio colocar os caracteres de abertura e fechamento, que so smbolos procurados pelo leitor ptico para iniciar e finalizar a leitura. No caso do cdigo 3 de 9, o caractere o asterisco (*). Assim, na origem do controle coloque:
IMPRESSORA TRMICA
Para quem precisa imprimir grande quantidade de etiquetas, uma soluo mais econmica usar uma impressora trmica (etiquetadora). Embora seja um equipamento bem mais caro que uma impressora jato de tinta comum, a economia com suprimentos (2 ou 3 cartuchos de tinta custam mais que a prpria impressora) grande. Essas etiquetadoras so muito comuns em aeroportos, usadas para emitir as etiquetas com a sigla do aeroporto de destino afixadas nas malas, e tambm os cartes de embarque. Funcionam com um rolo de etiquetas e outro de fita preta (ribbon), suprimentos de baixo custo. O ribbon aquecido na cabea de impresso, de forma a gravar texto, barras e imagens na etiqueta. O sensor do equipamento pode detectar onde acaba uma etiqueta e comea outra. O equipamento ligado na porta serial do micro, e para control-lo pode-se usar o ActiveX MSCOMM32.OCX, que vem no Visual Basic, e tambm est disponvel no material de download da edio 35 da FrumAccess (no artigo Coletando dados com Access).
O cdigo a seguir pode ser usado para imprimir etiquetas em impressora Datamax, uma das mais usadas no mercado:
Private Sub ImprimeTeste() Dim intPorta As Integer Dim strTexto As String On Error GoTo Tratamento MSComm1.CommPort = 1 COM1 Configura a porta serial MSComm1.Settings = 9600,n,8,2 Controla o Fluxo de Dados MSComm1.Handshaking = comRTSXOnXOff Abre a porta serial MSComm1.PortOpen = True Define um avano no papel aps a impresso MSComm1.Output = ~f256 & Chr$(13) Define o Off set de coluna MSComm1.Output = ~LC0005 & Chr$(13) Define o Off set de linha MSComm1.Output = R0000 & Chr$(13) Define o tamanho do Pixel. MSComm1.Output = D11 & Chr$(13) Seleciona o zero no cortado MSComm1.Output = z & Chr$(13) Define o calor de impresso. MSComm1.Output = H09 & Chr$(13) CAMPOS DA ETIQUETA: MSComm1.Output = 102200100650025 & _ SOFTWARE & Chr$(13) Categoria MSComm1.Output = 102200100550015 & _ VISUAL BASIC & Chr$(13) MSComm1.Output = 102200100550095 & _ MICROSOFT & Chr$(13) Marca MSComm1.Output = 102200100450015 & _ STANDARD & Chr$(13) Tipo MSComm1.Output = 102200100450105 & _ 2003 & Chr$(13) Verso MSComm1.Output = 102200100350015 & _ .NET & Chr$(13) Famlia MSComm1.Output = 102200100350095 & _ 65955690 & Chr$(13) Cdigo MSComm1.Output = 102200100250015 & _ FERRAMENTA DESENV & Chr$(13) Descrio Cdigo de barras (segunda letra minscula) MSComm1.Output = 1e1202500000015 & _ 65955690 & Chr$(13) letra e: padro 128 MSComm1.Output = 121100100150145 & _ R$ & Chr$(13) Preo (cifro) MSComm1.Output = 121100100050145 & _ 500 & Chr$(13) Preo MSComm1.Output = Q & Format(1, 0000) & _ Chr$(13) Quantidade de cpias da etiqueta Termina a transmisso e inicia a impresso MSComm1.Output = E & Chr$(13) Do Until MSComm1.OutBufferCount = 0 Loop MSComm1.PortOpen = False Fecha a porta
Exit Sub Tratamento: If Err = 8002 Then MsgBox Porta serial invlida. Exit Sub End If MsgBox Err.Description End Sub
Algumas impressoras no usam o til ~ como caractere inicial, mas sim o ^B. Neste caso, o til deve ser trocado por Chr(02) no cdigo anterior. Na linha de comando do cdigo de barras, a letra e representa o cdigo de barras 128, mas poderiam ser usadas as seguintes letras: a - cdigo 39, b - UPC-A, c - UPC-E, d I25, f - EAN-13, g - EAN-8, h - HIBC, i - Codabar, j - I25+CD, k - Plessey, l Case, m - UPC+2, n - UPC+5, o - 93, v - UPC peso varivel, q - UCC-EAN128. Dica: a cabea de impresso tem vida til. Aps alguns milhares de etiquetas impressas, ela vai se desgastando e as etiquetas comeam a apresentar algumas falhas (riscos brancos bem finos). Se levar na assistncia tcnica, eles vo sugerir a troca da pea (que bastante cara). Entretanto, como as etiquetas geralmente so bem mais estreitas que o cabeote, possvel posicionar o rolo inteiro mais direita e configurar o Off-Set de coluna (ver cdigo anterior) para que a impresso comece em outro lugar. Desta forma voc foge das falhas e aumenta bastante a vida til da pea, trocando-a apenas quando estiver inteiramente gasta. Por isto, procure sempre comear a imprimir em um dos cantos. Inicio da pagina
Desta forma, todos os itens estariam identificados, e se o banco de dados estiver devidamente modelado, seria possvel, por exemplo, a partir de uma leitura ptica no balco de atendimento, identificar na hora se todos os filmes esto sendo devolvidos pelo cliente, quais esto dentro do prazo, quais foram pagos, etc. Situao 2: uma empresa que fabrica e comercializa roupas no varejo precisa codificar seus produtos, visando melhor controle administrativo e planejamento de produo. Como o cdigo ser criado internamente, interessante um mecanismo que permita identificar todos os atributos do produto, como no formato LYYTTTMMCCSS, em que: - L: indica a coleo (vero, inverno, etc.). - YY: indica o ano (2001, 2002, 2003). - TTT: indica a categoria (camisa, cala, etc.). - MM: indica o material (l, seda, algodo, etc.). - CC: indica a cor (branca, preta, etc.) - SS: indica o tamanho (grande, pequeno, 40, 42, etc.). Exemplo: 103002450278 - coleo vero 2003, cala, linho, preta, tamanho 44. Um cdigo deste tipo, alm de facilitar a identificao dos itens no ponto de vendas (auxiliando o trabalho do vendedor), simplifica tambm a criao e anlise dos relatrios gerenciais (itens de maior giro, tendncias de cada estao, cores e materiais mais procurados, tamanhos que no vendem, e muitas outras opes). Inicio da pagina
CONCLUSO
Espero ter contribudo aqui com o seu entendimento sobre a tecnologia de cdigo de barras, que embora no seja nova, ainda um mistrio para muitos desenvolvedores. Conforme o artigo mostrou, h diversas maneiras de se trabalhar com estes recursos. O importante saber analisar o caso concreto e escolher a soluo que melhor atenda os objetivos. Embora haja muitos detalhes e regras, o conceito de funcionamento do cdigo de barras simples. Todas as vantagens aqui apresentadas (produtividade, melhor qualidade das informaes, cruzamento de dados, etc.) no derivam do cdigo de barras, mas sim de um banco de dados bem modelado. Sem isto, as barras pouco ajudaro. Juntando as duas partes (entrada de dados com qualidade e boa modelagem do banco de dados), o sistema ser uma boa ferramenta de gesto, e os relatrios sero mais confiveis. Matrias Relacionadas: Revista 23 - Cdigo de barras EAN13 Revista 35 - Coletores de dados Revista 40 - Cdigo de barras no VB/Crystal Reports Revista 41 - Boletos bancrios no Access Para se aprofundar: Site EAN Brasil: www.eanbrasil.com.br * Luiz Cludio C. V. da Rocha (lui@link.com.br) administrador de empresas e advogado, atua na rea de desenvolvimento de sistemas e colaborador no GD FrumAccess. Inicio da pagina