Você está na página 1de 31

UNIVERSIDADE DE SÃO PAULO

Instituto de Ciências Matemáticas e de Computação

Customização de resultados para


clientes utilizando Crystal Reports

Guilherme Calabria Filho

São Carlos - SP

1
Customização de resultados para clientes
utilizando Crystal Reports

Guilherme Calabria Filho

Supervisor: Rodrigo Merlo

Monografia de conclusão de curso apresentada ao


Instituto de Ciências Matemáticas e de Computação –
ICMC-USP - para obtenção do título de Bacharel em
Informática.

Área de Concentração: Desenvolvimento de sistemas de


informação

USP – São Carlos


Junho de 2010

2
VAI SER ALGUMAS DESSAS
AQUI... não sei qual ainda...

"Somente o homem, dentre


todas as criaturas da terra
tem o poder de mudar seu
padrão de pensamento e se
tornar o arquiteto de seu
destino."

"Na teoria, não há nenhuma


diferença entre teoria e
prática. Mas, na prática, há."

Jan Van de Snepscheut

"A vida só pode ser


compreendida, olhando-se
para trás; mas só pode ser
vivida olhando-se para
frente."

Soren Kierkegaard

"Os espartanos nunca


perguntaram quantos eram os
inimigos, mas onde era que
eles se encontravam. "

Agis II

i
Dedicatória
Dedico esse trabalho a toda minha família, por sempre me proteger e me fortalecer nos
momentos de fraqueza e sempre me acompanhar nos momentos de felicidade e alegria.

ii
Agradecimentos
Agradeço a minha família por toda dedicação e apoio recebidos durante esta fase de
minha vida. Em especial ao meu pai Guilherme Calabria que sempre me apoia e me ensina a
viver com sua experiência e dedicação, minha mãe Mônica Calabria pelo seu amor
incondicional, paciência e franqueza e minha querida irmã Gabriela Calabria por me mostrar
o que é ser um grande profissional e ser humano.

Ao excelentíssimo Senhor Alfred Achkar por me fornecer essa grande oportunidade de


emprego, que espero poder retribuir com qualidade equivalente.

Ao Rodrigo Merlo, meu supervisor, que com muita alta estima sempre encontra a
melhor solução para os problemas.

Minha enorme gratidão para meus amigos Jaime Cazzoti, que sempre me apoiou em
todos os requisitos burocráticos estudantis e ao meu grande amigo Ricardo Marcacini que
com seu humor peculiar sempre me faz rir.

iii
Resumo
No mundo competitivo atual, cada vez mais empresas precisam de sumarização das
informações, pois, são através dessas informações que elas irão tomar decisões para definir
seu destino visando manter-se no mercado. Este trabalho de conclusão de curso apresenta
diversas customizações de resultados, os quais por sua vez fornecem relatórios sobre suas
produções e métodos para melhorar os procedimentos do cliente.

iv
Sumário
LISTA DE ABREVIATURAS ........................................................................................ VI

LISTA DE FIGURAS .................................................................................................... VII

CAPÍTULO 1: INTRODUÇÃO........................................................................................ 1

1.1 RELATÓRIO .................................................................................................................. 1

1.2 A EMPRESA ONDE O ESTÁGIO FOI REALIZADO ............................................................... 1

1.3 OBJETIVOS DO TRABALHO............................................................................................ 2

1.4 ORGANIZAÇÃO DA MONOGRAFIA ................................................................................. 2

CAPÍTULO 2: FERRAMENTAS UTILIZADAS........................................................... 3

2.1. CONSIDERAÇÕES INICIAIS ........................................................................................... 3

2.2. DBDESIGNER 4 ........................................................................................................... 3

2.3. NETBEANS IDE 6.8 ..................................................................................................... 4

2.4. CRYSTAL REPORTS XI................................................................................................. 5

CAPÍTULO 3: TAREFAS E CUSTOMIZAÇÕES......................................................... 7

3.1. TREINAMENTO CRYSTAL REPORTS .............................................................................. 7

3.2. MAPEAMENTOS DA BASE DE DADOS ............................................................................ 9

3.3. FICHA TÉCNICA ......................................................................................................... 11

3.4. PROGRAMAÇÃO EMBARCADA .................................................................................... 13

CAPÍTULO 4: CONCLUSÃO ........................................................................................ 16

4.1. CONTRIBUIÇÕES ........................................................................................................ 16

4.2. CONSIDERAÇÕES SOBRE O CURSO DE GRADUAÇÃO ................................................... 16

4.3. TRABALHOS FUTUROS ............................................................................................... 16

REFERÊNCIAS ............................................................................................................... 17

ANEXO A – ARQUIVO CSV DE EXEMPLO ............................................................. 18

ANEXO B – CÓDIGO PARA CONVERSÃO ENTRE CSV PARA SQL.................. 19

v
Lista de Abreviaturas
ERP Enterprise Resource Planning

ASP Application Service Provider

HTML Hyper Text Markup Language

CSV Comma Separated Values

API Application Programming Interface

IDE Integrated Development Environment

ODBC Open Data Base Connectivity

GNU GNU is Not Unix

GPL General Public License

SGBD Sistema Gerenciador de Banco de Dados.

vi
Lista de Figuras

Figura 1 - Modelo ER gerado pelo DBDesigner. ........................................................... 3

Figura 2 - Área de trabalho do Netbeans ........................................................................ 4

Figura 3 - Área de trabalho do Crystal Reports. ............................................................. 5

Figura 4 - Relatório criado com posicionamento do campo e descrição da estrutura. ... 7

Figura 5 - Janela inicial do Audience. ............................................................................ 8

Figura 6 - Parte do modelo ER gerado. ........................................................................ 10

Figura 7 - Exemplo de uma ficha técnica. .................................................................... 12

Figura 8 - Emulador para codificação da aplicação. ..................................................... 14

Figura 9 - Imagem do formulário para escolha do produto .......................................... 15

vii
CAPÍTULO 1: INTRODUÇÃO
1.1 Relatório
Um relatório é uma apresentação organizada dos dados, ele é utilizado para
proporcionar, a empresa, subsídios para tomar decisões baseadas em dados efetivos. As
informações podem reportar resultados parciais ou totais de uma atividade, pesquisa,
projeto ou outro evento qualquer.

Como um evento pode produzir uma grande quantidade de dados sempre irá existir
uma dificuldade, de tamanho equivalente, de seu entendimento. Também não há um
algoritmo genérico de sumarização de dados suficientemente bom que atenda todas as
áreas. Esses motivos fortalecem o objetivo desse projeto, que visa a customização dos
relatórios e de suas técnicas de trabalho.

O Crystal Reports é uma ferramenta que oferece uma gama de opções para controle
sobre o tamanho, aparência e organização de todos os elementos de um relatório sendo
possível inclusive, alterar a ordenação dos dados de maneira dinâmica. Esses são os
principais motivos para realização desse projeto.

1.2 A empresa onde o estágio foi realizado


A Verup Sistemas e Informática é uma empresa especializada em softwares de
gestão, do tipo Enterprise Resource Planning (ERP), para o mercado de moda. A empresa
está no mercado há 32 anos e hoje utiliza o modelo Application Service Provider (ASP)
para o funcionamento do sistema. O modelo ASP concentra todos os dados em um único
ponto, fornecendo para quem está recebendo os dados, segurança e disponibilidade.

A empresa na qual o projeto foi idealizado, trata-se de uma das principais


fornecedoras de ERP para o setor têxtil da indústria brasileira. Ela atua em todo território
nacional, com grande ênfase no estado de São Paulo para empresas de pequeno a médio
porte.

Localizada em Cotia – São Paulo, ela conta com cerca de dezesseis funcionários
distribuídos em diversos setores. Seu principal produto é o Audience®. Além da venda e

1
do treinamento para o Audience®, ela também fornece soluções de Datacenter para seus
clientes.

A equipe de desenvolvedores é composta por três integrantes, cada um com suas


especificas funções: desenvolvimento do software, atualizações de segurança e suporte
técnico ao departamento de suporte ao cliente.

O Audience®, sistema desenvolvido pela Verup, em formato Cobol, utiliza


arquivos de dados próprios da AcuCorp e desta forma não existe possibilidade de acesso
aos arquivos de dados por ferramentas externas, somente pelo Cobol.

Este projeto de conclusão de curso foi incluído no departamento de


desenvolvimento da empresa. Uma vez que os resultados e demonstrativos gerados pelo
sistema são apresentados em formato HTML, este projeto consiste nas transformações dos
resultados e demonstrativos para o formato Crystal Reports. Este formato trará aos clientes
mais benefícios, como por exemplo, a customização de cada resultado e outros diversos
benefícios que serão apresentados a seguir.

1.3 Objetivos do Trabalho


O principal objetivo do projeto é realizar a conversão de todos os resultados
exportados pelo Audience®, de formato HTML para Crystal Reports. Para que isso seja
possível, será realizado o mapeamento de todas as exportações do formato Comma
Separated Values (CSV). Além da conversão de resultados para Crystal Reports, este
projeto teve também como objetivo a criação de um setor no departamento de
desenvolvimento, o de customizações. Através deste novo departamento a empresa poderá
fornecer um serviço complementar de customização de resultados, de maneira prática,
rápida, segura e eficiente.

1.4 Organização da Monografia


Esta monografia está organizada da seguinte maneira: no Capítulo 2 serão exibidas
as ferramentas utilizadas para realização das tarefas, destacando o motivo de suas escolhas
e mostrando determinados detalhes das mesmas. No Capítulo 3 serão detalhadas todas as
atividades realizadas durante o estágio. Por sua vez, no Capítulo 4 serão apresentados os
objetivos alcançados através da realização deste projeto.

2
CAPÍTULO 2: Ferramentas Utilizadas
2.1. Considerações Iniciais
Nesse capítulo são apresentadas as ferramentas utilizadas nas tarefas realizadas.
Para melhor entendimento destas ferramentas em alguns casos poderão ser fornecidas
descrições das tarefas onde essas ferramentas foram aplicadas, a descrição completa das
tarefas será apresentada no Capítulo 3.

2.2. DBDesigner 4
DBDesigner 4 é uma ferramenta para projetar um banco de dados que integra as
funções de: modelagem, projeto, implementação e manutenção em um mesmo ambiente. É
desenvolvida pela fabFORCE (www.fabforce.net) e distribuída sob a licença GNU is Not
Unix(GNU) General Public License (GPL). Ele é desenvolvido e otimizado para o Sistema
Gerenciador de Banco de Dados (SGBD) Mysql, mas é compatível com Oracle, MSSQL e
qualquer banco de dados ODBC.

Essa ferramenta possibilita a engenharia reversa, gerando o modelo ER, que


descreve o modelo de dados de um sistema com alto nível de abstração. A aplicação de
Engenharia reversa pode ser de grande ajuda para auxiliar no desenvolvimento de sistemas
[Ferrara, 2009]. Com o alto nível de abstração é possível um melhor entendimento da
estrutura e da lógica de um banco de dados.

Figura 1 - Modelo ER gerado pelo DBDesigner.

3
2.3. Netbeans IDE 6.8
O Netbeans, um dos mais antigos projetos criados para suportar a linguagem Java
[Mesenas, 2008], ele é um ambiente de desenvolvimento multiplataforma. Escrita
totalmente em Java e distribuída sob as condições da Sun Public License(SPL), uma
variação da Mozilla Public License(MPL), esta licença tem como objetivo garantir a
redistribuição de conhecimento à comunidade de desenvolvedores quando novas
funcionalidades forem incorporadas à ferramenta [Redação Oficina da Net, 2008]. Esse
ambiente de desenvolvimento integrado (IDE) suporta diversas linguagens entre elas: Java,
C/C++, PHP, Groovy e Ruby. Essa ferramenta auxilia programadores a escrever, compilar
e “debugar“ suas aplicações.

Ele possui um grande conjunto de biblioteca e API's além de uma vasta


documentação, bem organizada em português. Sendo uma distribuição open source (código
aberto) esse IDE conta com diversas comunidades, fóruns e grupos, isso lhe fornece uma
grande equipe de suporte técnico grátis.

Entre seus principais recursos estão:

 auto-completar avançado;

 ajuda local e online; debug apurado de aplicações e componentes;

Figura 2 - Área de trabalho do Netbeans

4
2.4. Crystal Reports XI
O Crystal Reports é uma ferramenta para geração de relatórios e é compatível a
diversos tipos de dados. É fornecida pela SAP sob a licença: Contrato de licença de usuário
final (EULA).

Com ele você pode acrescentar funcionalidades a um relatório para que fique
atraente aos olhos dos usuários.

Entre as vantagens de sua utilização na elaboração de um relatório estão:

 Capacitação aos usuários finais, o poder de explorar os relatórios com a


classificação e parametrização.

 Minimização do esforço da equipe de TI no desenvolvimento de relatórios


interativos.

 Utilização dos dados a partir de diversas fontes incluindo: tabelas Microsoft


Excel, Oracle, Mysql e arquivos texto.

 Compatível com diversas linguagens de programação

Figura 3 - Área de trabalho do Crystal Reports.

O Crystal Reports divide o relatório nas seguintes partes:

1. Report Header – Geralmente usado para fazer a capa do relatório já que só


será exibida na primeira página.

5
2. Page Header - Utilizada para que seja colocado um titulo para o relatório,
um campo que sirva como cabeçalho, a faixa de valores selecionados, e outras
informações que se queira apresentar no topo de cada página de seu relatório.

3. Details - O volume maior de dados do relatório aparecerá nesta seção. É


aqui onde são inseridos os campos das suas tabelas de dados.

4. Report Footer – Sendo a última seção do relatório. Pode-se colocar um


resumo ou comentário. Normalmente utilizado para colocar os subtotais, médias e
totais, resumindo as informações do relatório.

5. Page Footer – Usualmente contém o número da página e alguma outra


informação que será mostrada no final de cada página.

6. Group Header – É uma seção criada pelo programa quando se deseja


realizar um agrupamento de dados. Tipicamente usado para mostrar o nome do
grupo.

7. Group Footer – Quando se agrupam dados podem-se exibir subtotais ou


resumos do grupo.

Crystal Query Designer - é um gerador de Query que elimina a necessidade de


entendimento, bem como os erros de codificação, da linguagem SQL. As queries geradas
por este aplicativo são utilizadas no Crystal Report para listar as informações desejadas.

Parâmetros - quando o relatório é executado o usuário poderá ser requisitado a


informar valores. Estes valores podem ser utilizados para mudar títulos de relatórios,
critérios de seleção de registros e ordenação dos campos.

6
CAPÍTULO 3: Tarefas e Customizações
3.1. Treinamento Crystal Reports
Para iniciar o estágio foram fornecidos ao estagiário os seguintes manuais:
Designer I, da LCA informática e Crystal Reports Designer, da ETZ informática. Foi
realizado o treinamento da ferramenta Crystal Reports com esses manuais e com diversos
materiais suplementares encontrados na internet.

Ao iniciar um novo relatório pelo Crystal Reports é realizada uma conexão com o
banco de dados, onde são exibidas todas as tabelas e os campos disponíveis para serem
utilizados no relatório. Ao selecionar um campo, basta manter ele selecionado e arrasta-lo
até a posição do relatório desejada. Essa posição segue uma grade para alinhamento dos
objetos.

Ao se incluir um novo campo no relatório, o criador de QUERY do Crystal Reports


é atualizado instantaneamente. O criador do relatório pode visualizar a query gerada e
também pode incluir uma própria para obter determinados campos de determinadas
tabelas, essa opção irá fornecer mais um item na lista de tabelas disponíveis.

Figura 4 - Relatório criado com posicionamento do campo e descrição da estrutura.

7
Junto com a apresentação do Crystal Reports foi apresentado o sistema Audience®,
na qual o projeto é baseado. O sistema Audience® trabalha no modelo ASP, esse modelo
concentra os dados em um servidor. Todas as tarefas realizadas pelos usuários são
processadas no servidor. Com isso não importa onde o usuário esteja ele terá acesso a
todos os dados da sua empresa, fornecendo mobilidade e segurança.

Figura 5 - Janela inicial do Audience.

O Audience® é dividido por módulos, dentro de cada um pode ser realizado


diversas tarefas, por exemplo, no módulo Cliente é possível: o cadastramento de clientes,
Curva ABC de clientes e Exportação de clientes. Assim fornece uma maneira simples de se
agrupar e dividir as operações disponíveis de acordo com seus objetivos.

Sendo ele um ERP para indústrias da moda, suas ferramentas são direcionadas para
esse seguimento, por exemplo, em cadastro de produto é possível definir uma grade de
tamanhos personalizada para cada produto adicionado.

Sua utilização é simples, ao selecionar a tarefa desejada, pelo mouse, pressiona-se a


tecla Enter, para confirmar sua escolha, assim a tarefa será processada, geralmente é aberta
uma nova janela a frente da principal para receber dados necessários, antes de conclui-la.

8
3.2. Mapeamentos da base de dados
Mesmo com o entendimento parcial do sistema Audience® e do Crystal Reports
não foi possível visualizar de maneira abrangente como os dados se relacionavam e como
seria a extração de informações, por isso segue-se a próxima etapa.

Como a Verup utiliza arquivos de dados AcuCorp, não há nenhum SGBD que tenha
acesso a base de dados para lhe fornecer um modelo ER. Como não há um modelo ER para
sua base de dados e para que fosse criado esse modelo, foi realizado o mapeamento da base
de dados, do sistema Audience®, utilizando os seguintes procedimentos:

1. Todas as exportações, em CSV, foram convertidas para o modelo entidade


relacionamento (ER). Como as exportações realizadas pelo Audience® seguem uma
padronização, foi possível gerar um script para sua conversão, utilizando os nomes dos
campos para os relacionamentos. Um arquivo no formato CSV está disponibilizado no
Anexo A. Partes do script estão disponibilizadas no Anexo B.

2. Na execução do script foi criado um arquivo contendo todas as tabelas, com


seus respectivos campos. Nesse arquivo já há o relacionamento entre as tabelas. Após
a execução do script, todo o modelo em SQL, criado, foi importado no SGBD Mysql.

3. Nessa etapa foi realizada a verificação dos dados gerados, houveram


algumas modificações em relações as chaves estrangeiras, já que, em algumas tabelas
elas não são ON DELETE CASCADE, função em que ao se deletar um item todos os
itens que se referenciam a ele também são removidos. Após as modificações do
modelo gerado foi realizada a Engenharia Reversa do DBDesigner 4.

9
Figura 6 - Parte do modelo ER gerado.

Com engenharia reversa, foi produzido um modelo ER com determinada


complexidade, pois conta com: cerca de 80 tabelas, mais de 2600 atributos e diversos tipos
de relacionamentos.

Através dessas tarefas e com esse mapeamento foi possível realizar uma
documentação detalhada das exportações do sistema. Essa documentação é possível
visualizar como os dados se relacionam e de onde podemos extrair determinadas
informações. Com a conclusão da documentação, ela foi encaminhada para um funcionário
com maior experiência na empresa para sua verificação.

Esse documento é hoje utilizado como suporte ao departamento de atendimento ao


cliente, quando há alguma dúvida sobre as exportações ou de onde pode ser realizada o
integrantes da equipe de suporte ao cliente, recorre a esse documento, fornecendo um
ganho de velocidade.

10
3.3. Ficha técnica
A primeira customização em que o estagiário trabalhou foi a de uma ficha técnica
de produtos. Nela são visualizadas informações detalhadas do consumo de materiais para
determinado produto.

Na ficha técnica são listadas todas as cores do produto, se relacionando com


determinadas quantidades de materiais utilizados. Isso fornece ao usuário todo consumo de
matéria prima que o produto está utilizando, assim havendo uma análise de viabilidade do
produto.

A grande dificuldade nessa ficha técnica foi gerar o agrupamento dos dados para
serem exibidos de maneira coerente e simples. Pois existem tabelas de produtos, cores dos
produtos, materiais, cores de materiais, empenho dos materiais para os produtos. Então foi
utilizado à opção de sub-relatório do Crystal Reports. Usualmente essa não seria a melhor
opção, mas pela quantidade de tabelas que estariam sendo referenciadas foi a única
disponível. Na criação de um sub-relatório podem-se enviar informações, através de
parâmetros, para a criação de uma nova QUERY utilizada nesse novo relatório.

No setor de Page Header do relatório existe um sub-relatório onde são exibidas as


cores do produto, definindo áreas onde serão exibidas as quantidades dos materiais
utilizados para a determinada relação cor produto/cor material. Na parte Details do
relatório, onde é informado qual material e sua quantidade utilizada, há outro sub-relatório
como parâmetros, são enviados o código e cor do produto e o código e cor do material
para buscar os dados de quantidade utilizada do material.

Abaixo segue um exemplo de uma ficha técnica, onde pode ser visualizado o
agrupamento dos dados. Sendo que o produto exibido pode ser encontrado nas cores
amarelo, azul e branco. E abaixo desse agrupamento mostra-se a quantidade de material
utilizada junto com sua respectiva cor.

11
Figura 7 - Exemplo de uma ficha técnica.

Em detalhe pode-se visualizar na quinta linha da lista de materiais que determinado


material não foi utilizado para o produto na cor amarela, pois não se encontra preenchido.

Outras exportações foram trabalhas pelo estagiário como, por exemplo, a


exportação de movimentos do estoque, que pela sua baixa complexidade não há motivos
para detalhamentos.

12
3.4. Programação embarcada
Outra customização realizada foi a criação de um software de força de venda.
Determinado cliente está montando um showroom, para realização de vendas. Como
existirão muitos produtos para serem exibidos, não há como disponibilizar todas as
informações disponíveis, por exemplo, todas as cores disponíveis dos produtos. Por esse
motivo o cliente deseja, de maneira prática, rápida e offline, exibir essas e outras
informações.

Foi adquirido o equipamento PHL8112 da empresa Opticon. Esse equipamento é


equipado com o Windows CE 5.0, 128MB de SDRAM e um processador Intel PXA270.
Como as informações acessadas deverão ser off-line, o dispositivo será sincronizado toda
vez que retornar a base.

Esse software foi codificado em Java ME. A plataforma Java Micro Edition é o
conjunto de tecnologias que permitem o desenvolvimento de aplicações Java para
dispositivos com processamento, memória e vídeo limitados, como celulares e
smartphones [ZANFOLIM, 2009].

A principal ideia para esse software é fornecer detalhes sobre os produtos no show
room do cliente, assim economizando espaço por só exibir uma cor e um tamanho de cada
produto. Para isso o software contará com uma cópia, reduzida, da base de dados dos
produtos. Como o dispositivo, PHL8112, conta com um leitor de código de barras, a busca
pelos detalhes do produto será através dele.

Esses dispositivos contem uma tela, touch screen, de 3,5. Isso não fornece uma
grande área de trabalho. Para realizar uma boa interação usuário máquina, utilizamos o
framework Kuix (http://www.kalmeo.org/projects/kuix). Ele é distribuído pela empresa
Kalmeo, que é uma empresa francesa, de soluções móveis, sob a licença GPL. Kuix
significa: Kalmeo User Interface eXtensions for J2ME. Ele providencia uma diversificada
gama de elementos gráficos como: botões, campos de texto, listas, menus entre outros.

13
Figura 8 - Emulador para codificação da aplicação.

Ao pressionar o botão iniciar, o software irá pedir que o representante identifique-


se e que identifique qual cliente ele atenderá. Após a identificação é exibido um campo
texto, para o qual o representante deve utilizando o leitor de código de barras efetuará a
leitura da etiqueta do produto. Com essa leitura o sistema automaticamente exibe uma lista
contendo todas as cores do produto, abaixo dessa lista há 10(dez) campos textos onde será
possível determinar a quantidade de cada tamanho desejada pelo cliente. Acima de cada
campo há uma etiqueta com o tamanho.

14
Figura 9 - Imagem do formulário para escolha do produto

Nesse programa é possível alterar um item já adicionado, assim permitindo ao


cliente a mudança de escolha. Mas ao se concluir a compra, existe um formulário com a
lista de itens já adicionados com um botão para conclusão, não é permitida mas nenhuma
alteração, pois somente esse arquivo concluído será importado pelo sistema Audience para
a efetivação da venda.

Também é instalado no dispositivo um framework disponibilizado pelo fabricante,


que permite a configuração do dispositivo a fim de restringir as funcionalidades do mesmo.
Restringindo somente o uso do software da Verup.

15
CAPÍTULO 4: CONCLUSÃO
4.1. Contribuições
O anglicismo “customizações”, não significa somente introduzir modificações de
software que o tornem aderentes às necessidades particulares de uma empresa. Mas sim
uma oportunidade de negócio. Assim como mostrado nesse trabalho, há diversas
customizações que podem ser realizadas. Por isso, a criação de um departamento
especifico de customização fornece maior estabilidade para determinação de custos e
prazos.

Como contribuição pessoal, o trabalho proporcionou uma grande experiência


profissional por utilizar novas ferramentas (Crystal Reports) e novas metodologias. A
experiência, também, de trabalhar em uma nova área, como programação para dispositivos
móveis, fornece uma visão mais abrangente sobre tecnologias.

4.2. Considerações sobre o Curso de Graduação


Em relação ao curso de bacharelado em Informática oferecido pelo ICMC-USP, a
grade curricular forneceu o conhecimento básico necessário para o desenvolvimento do
projeto aqui proposto. Disciplinas como: Introdução à Teoria da Computação I e II,
Computação Orientada a Objetos, Algoritmos e Estrutura de Dados, Interação Usuário
Computador e Engenharia de Sistemas de Informação foram valiosas para realização das
tarefas ao longo do estágio.

Sugerem-se trabalhos práticos mais conceituados, pois é através de pesquisas em


diversas fontes que se pode obter uma visão mais profunda ou mais global do assunto.

4.3. Trabalhos Futuros


Como dito anteriormente exportações com baixas complexidades também foram
trabalhadas, como existem diversas exportações ainda no formato antigo, há um interesse
em converter todas as exportações para um modelo único. E a longo prazo a criação do
departamento de customização se o mercado mostrar interesse.

16
REFERÊNCIAS
MESENAS, Ivan. Netbeans 6.1 Desenvolvendo em Java e Ruby. Rio de Janeiro: Alta
Books, 2008.

FERRARA, Davi Adiel. Engenharia Reversa e Reengenharia de sistemas embarcados


visando melhoria de manutenção. São Carlos, 2009. Trabalho de conclusão de curso
(Graduação em Bacharel em informática), Instituto de Ciências Matemáticas e de
Computação, 2009.

REDAÇÃO OFICINA DA NET. O que é o Netbeans?. São Paulo: 2008. Disponível em:
<http://www.oficinadanet.com.br/artigo/1061/o_que_e_o_netbeans>. Acesso em: 30 mar.
2010.

ZANFOLIM, L. C; FERNANDES, R. C. Desenvolvendo um Estudo de Caso Utilizando a


Plataforma JAVA ME. Dourados, 2009. Trabalho de conclusão de curso(Ciência da
Computação), Universidade Estadual de Mato Grosso do Sul, 2009.

17
ANEXO A – Arquivo CSV de exemplo
[vpclie3.csv]
ColNameHeader=True
Format=Delimited(;)
DateTimeFormat=yyyy/mm/dd
MaxScanRows=0
CharacterSet=ANSI
DecimalSymbol=,
Col1=vup-numrclie integer
Col2=vup-coleprod integer
Col3=vup-etiqprod integer
Col4=vup-deptprod integer
Col5=vup-grupprod integer
Col6=vup-famiprod integer
Col7=cl3-qtdecole integer
Col8=cl3-vlorcole integer
Col9=cl3-qtdeetiq integer
Col10=cl3-vloretiq integer
Col11=cl3-qtdegrup integer
Col12=cl3-vlorgrup integer
Col13=cl3-qtdedept integer
Col14=cl3-vlordept integer
Col15=cl3-qtdefami integer
Col16=cl3-vlorfami integer
Col17=cl3-daticlie date
Col18=cl3-prgiclie char width 8
Col19=cl3-usriclie integer
Col20=cl3-datmclie date
Col21=cl3-prgmclie char width 8
Col22=cl3-usrmclie integer

18
ANEXO B – Código para conversão entre CSV
para SQL
/*Script para geração de tabelas em SQL para cada exportação do Audience*/
package verup;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**@author Guilherme Calabria Filho*/
public class Main {
public static void main(String[] args) throws FileNotFoundException, IOException {
/*Diretório padrão de exportação do Audience*/
String diretorio = "C:\\Audience\\arq";
File file = new File(diretorio); File afile[] = file.listFiles(); int i = 0;
/*Listas de tabelas a serem criadas*/
List<tabelaSQL> tabelas = new ArrayList<tabelaSQL>();
gerarSQL novoSQL = new gerarSQL();
for(int j=afile.length;i<j;i++){
File arquivos = afile[i];
if(arquivos.isDirectory()){
try{
tabelas = novoSQL.lerDirAud(arquivos.getCanonicalPath(),tabelas);
}catch(Exception e){
System.out.println("main Exception:\n"+e.toString());
}
}
}
String SQLQUERY = ""; String tabelaDoc = ""; String primaryKey; int j;
for(tabelaSQL nome:tabelas){
i=0; j=0; primaryKey ="";
SQLQUERY += "CREATE TABLE IF NOT EXISTS `"+nome.nomeTabela+"` (";
tabelaDoc += nome.nomeTabela+"\r\nDescrição:\r\nCampos:\r\n";
for(String campo:nome.nomeCampo) {
if((campo.startsWith("vup"))&&j>15)
System.out.println(nome.nomeTabela+"=>"+campo.toString());
if((campo.startsWith("vup")||j==0||i==0)&&j<15) {
j++;
primaryKey += "`"+campo+"`,";
}
if(nome.tamanho.get(i).toString().equalsIgnoreCase("-1")){
SQLQUERY += "`"+campo+"` "+nome.tipo.get(i)+", ";
tabelaDoc += "`"+campo+"` "+nome.tipo.get(i)+" = \r\n";

19
}
else{
SQLQUERY+="`"+campo+"`+nome.tipo.get(i)+"("+nome.tamanho.get(i)+"),\r\n";
tabelaDoc+="`"+campo+"`"+nome.tipo.get(i)+"("+nome.tamanho.get(i)+") = \r\n";
}
i++;
}
SQLQUERY+="PRIMARY KEY("+primaryKey.substring(0,primaryKey.length()-1)+")
);\r\n ";
}
File arquivo = new File("C:\\Audience\\arq","SQLS.txt");
FileOutputStream saida = new FileOutputStream(arquivo);
saida.write(SQLQUERY.getBytes());
File arquivo2 = new File("C:\\Audience\\arq","tabDoc.txt");
FileOutputStream saida2 = new FileOutputStream(arquivo2);
saida2.write(tabelaDoc.getBytes());
saida2.close(); saida.close();
}
}
/*Código da classe tabelaSQL*/
package verup;
import java.util.ArrayList;
import java.util.List;
public class tabelaSQL {
public String nomeTabela;
public Integer posicao;
public List<String> nomeCampo = new ArrayList<String>();
public List<String> tipo = new ArrayList<String>();
public List<String> tamanho = new ArrayList<String>();
public tabelaSQL(String nome,Integer local){
this.nomeTabela = nome;
posicao = local;
}
public void addCampo(String name,String type,String size){
Boolean added = false;
for(String nome:nomeCampo){
if(nome.equalsIgnoreCase(name)){
added = true;
}
}
if(!added){
nomeCampo.add(name);
tipo.add(type);
tamanho.add(size);
}
}
}

20
/*Código da classe gerarSQL*/
package verup;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class gerarSQL {
/*Recebe um diretório padrão de exportação AUDIENCE*/
public List<tabelaSQL> lerDirAud(String diretorio,List<tabelaSQL> tabelas) {
try{
List<String> camposTab =new ArrayList<String>();
File verifica = new File(diretorio+"\\schema.ini");
if(verifica.exists()){
/*Lendo arquivo que contêm dados sobre a exportação*/
FileInputStream stream = new FileInputStream(diretorio+"\\schema.ini");
InputStreamReader streamReader = new InputStreamReader(stream);
BufferedReader reader = new BufferedReader(streamReader);
String line;String aux = null; int numlinha=0; int indiceTabelas=0;int tamanho;
String campo[];String campoDet[]; tabelaSQL newTable = null; Boolean jaexiste = false;
while((line=reader.readLine())!=null){
/*Caráter que indica o inicio da descrição de uma exportação*/
if(line.indexOf("[")!=-1){
/*Controle se a tabela já foi adicionada na lista*/
jaexiste =false;
aux = line.replace("[", "");
try{
/*Buscando tabela atual, na lista de tabelas já adicionadas*/
for(tabelaSQL nome : tabelas){
/*Se já foi adicionado só adiciona os campos*/
if(nome.nomeTabela.equalsIgnoreCase(aux.replace(".csv]",""))){
jaexiste = true;
/*Recebendo tabela*/
newTable = tabelas.get(nome.posicao);
break;
}
indiceTabelas++;
}
}
catch(Exception ex){
System.out.println("Exception ao fazer tabelas.get:"+ex.toString()+"\n");
}
/*Se a tabela ainda não estiver adicionada*/
if(!jaexiste){
if(!aux.replace(".csv]", "").isEmpty()){
/*Adicionando tabela, retirando os caracteres não necessários */

21
newTable = new tabelaSQL(aux.replace(".csv]",""),tabelas.size());
tabelas.add(tabelas.size(),newTable);
}
}
else{
/*Já existe*/
}
/*Leitura da linha 0 da descrição da tabela*/
numlinha=0;
}
else{
/*Se já for inicio das colunas*/
if(numlinha==7){
try{
/*Adicionando campos a tabela*/
campo = line.split("=");
campoDet = campo[1].split(" ");
/*Substituindo valores dos tipos de dados para um valor válido ao MYSQL*/
aux = campoDet[1].replace("integer", "int");
aux = aux.replace("floating", "float");
if(campoDet[1].equalsIgnoreCase("char")){
tamanho = Integer.parseInt(campoDet[3]);
if(tamanho>255) tamanho =255;
}
else tamanho=-1;
/*Adicionando campo*/
newTable.addCampo(campoDet[0], aux, Integer.toString(tamanho));
}
catch(Exception ex) {
System.out.println("Exception gerarSQL linha 78:"+ex.toString()+"\n"+line);
}
}
/*As primeiras linhas não são utilizáveis*/
/*Chegou na ultima linha antes das colunas*/
if(line.equalsIgnoreCase("DecimalSymbol=,")){
numlinha = 7;
}
}
}
}
else System.out.println("Não existe arquivo"+diretorio);
}catch(Exception e)
{
System.out.println("gerarSQL Exception:\n"+e.toString());
}
return tabelas;
}}

22

Você também pode gostar