Rio de Janeiro, janeiro de 2007.

Tamanho: px
Começar a partir da página:

Download "Rio de Janeiro, janeiro de 2007."

Transcrição

1 INTERNO ORACLE DEVELOPER 6i REPORTS Rio de Janeiro, janeiro de As informações contidas neste documento pertencem à Value Team Brasil S/C Ltda e ao destinatário do documento. Cópia, publicação ou distribuição não-autorizada deste material são práticas estritamente proibidas e podem ser ilegais. Value Team Brasil S/C Ltda V A L U E P A R T N E R S G R O U P Rua da Cadenlária Tel º andar Fax Rio de Janeiro RJ - Brasil

2 CAPÍTULO 1: O ORACLE DEVELOPER 6I... 1 SOBRE O PACOTE...1 RESUMINDO...2 SOBRE A FERRAMENTA...3 CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6I... 4 CONCEITOS INICIAIS...4 O NAVEGADOR DE OBJETOS (OBJECT NAVIGATOR)... 5 EXPANDIR OU CONTRAIR...6 CRIAR OU DELETAR...6 EXECUTAR, IMPRIMIR E MENSAGEM...7 ABRIR E SALVAR...7 LOCALIZAR...8 NAVEGANDO NA HIERARQUIA...8 PAINÉIS DO NAVEGADOR...8 ALTERANDO O NOME DE UM ELEMENTO...8 O MENU DO REPORT BUILDER...9 CRIANDO UMA APLICAÇÃO...9 ESTABELECENDO CONEXÃO COM O BANCO DE DADOS...9 ESTILO DO RELATÓRIO...9 QUERY BUILDER - TABELAS...10 QUERY BUILDER DIÁLOGO PRINCIPAL...11 QUERY BUILDER COLUNAS...11 QUERY BUILDER SQL...12 QUERY BUILDER DEFININDO UMA COLUNA...13 QUERY BUILDER ORDENANDO O RESULTADO...13 QUERY BUILDER ALIAS...14 QUERY BUILDER - INCLUINDO UMA RESTRIÇÃO...14 PASTA CAMPOS(FIELDS)...15 PASTA TOTAIS (TOTALS)...15 PASTA ETIQUETAS (LABELS)...16 PASTA GABARITO (TEMPLATE)...16 CAPÍTULO 3: O DATA MODEL COMPONENTES DE UM RELATÓRIO O EDITOR DO MODELO DE DADOS A PALETA DE FERRAMENTAS...18 A BARRA DE FERRAMENTAS...19 A BARRA DE STATUS...19 CRIANDO UMA CONSULTA CONSULTA (QUERY)...20 GRUPO (GROUP)...21 COLUNAS DO BANCO DE DADOS...22 CRIANDO UM LAYOUT CRIANDO UM GRUPO DE QUEBRA RELACIONANDO DADOS CRIANDO UM RELATÓRIO A PARTIR DE UMA VARIÁVEL CURSOR...28 CAPÍTULO 4: SUMÁRIOS E FÓRMULAS SUMÁRIOS DETERMINANDO A FREQÜÊNCIA DE IMPRESSÃO...29 DETERMINANDO A FUNÇÃO DO SUMÁRIO...31 DETERMINANDO A COLUNA ORIGEM DO SUMÁRIO...31 QUANDO ZERAR O SUMÁRIO...32 DETERMINANDO O GRUPO DE TOTALIZAÇÃO...33 FÓRMULAS DETERMINANDO A FREQÜÊNCIA DE IMPRESSÃO...34 DETERMINANDO O TIPO DE RETORNO...34 DETERMINANDO A FUNÇÃO DA FÓRMULA...35 ÍNDICE I

3 CAPÍTULO 5: PARÂMETROS CONCEITUAÇÃO...37 PARÂMETROS DE SISTEMA BACKGROUND...37 COPIES...37 CURRENCY...37 DECIMAL...37 DESFORMAT...37 DESNAME...38 DESTYPE...38 MODE...38 ORIENTATION...38 PRINTJOB...38 THOUSANDS...38 PARÂMETROS DE USUÁRIO BIND REFERENCE...39 LISTA DE VALORES...40 LEXICAL REFERENCE...42 CRIANDO UMA TELA DE PARÂMETROS USANDO UM CRIADOR AUTOMÁTICO...44 CAPÍTULO 6: OS PRIMEIROS OBJETOS DO LAYOUT INTRODUÇÃO QUADROS DE REPETIÇÃO (REPEATING FRAMES) CAMPOS (FIELDS) BOILERPLATES...51 CAMADAS DE IMPRESSÃO FREQÜÊNCIA DE IMPRESSÃO ELASTICIDADE CAPÍTULO 7: O EDITOR DO LAYOUT MODEL A JANELA DO EDITOR DE LAYOUT WORKSPACE...58 BARRA DE TÍTULO (TITLE BAR)...58 RÉGUAS (RULERS)...58 GUIAS...58 GRID...58 LINHA INDICATIVA DE SITUAÇÃO (STATUS LINE)...59 AS BARRAS DE FERRAMENTAS A BARRA DE FERRAMENTAS HORIZONTAL SUPERIOR...60 A BARRA DE FERRAMENTAS HORIZONTAL INFERIOR (BARRA DE ESTILO)...61 A BARRA DE FERRAMENTAS VERTICAL OU PALETA DE FERRAMENTAS...62 MANIPULANDO OBJETOS NO EDITOR DE LAYOUT CRIANDO OBJETOS...64 MOVER OBJETOS...64 REDIMENSIONANDO UM OBJETO...64 REDIMENSIONANDO DIVERSOS OBJETOS...64 ALINHANDO OBJETOS...64 OBTER AS PROPRIEDADES DE UM OBJETO...65 MANIPULANDO BOILERPLATES NO EDITOR DE LAYOUT BOILERPLATE DE TEXTO...65 BOILERPLATE GRÁFICO...65 AÇÕES COMUNS AOS OBJETOS DE LAYOUT ATRIBUINDO FONTE...66 MODIFICANDO A LINHA...66 ALINHAMENTO E ESPACEJAMENTO...66 SELEÇÃO DE UM OU VÁRIOS OBJETOS...66 OPERAÇÕES...66 GRUPANDO OBJETOS...67 ÍNDICE II

4 NAVEGANDO PELAS DIVERSAS PARTES DE UM RELATÓRIO...68 MÚLTIPLOS LAYOUTS...69 INCLUINDO DATA / HORA E NUMERAÇÃO DE PÁGINA...70 IMPORTANDO ARQUIVOS PARA O LAYOUT ADICIONANDO UM BOILERPLATE POR UM ARQUIVO DE LIGAÇÃO (LINKED FILE)...71 CAPÍTULO 8: PL/SQL NO RELATÓRIO CONCEITOS INICIAIS...72 EDIÇÃO DE PL/SQL INDENTAÇÃO AUTOMÁTICA...73 INDENTAÇÃO MANUAL...73 CORES...73 SELEÇÃO...73 CÓPIA E MOVIMENTAÇÃO DE TEXTOS...73 SPLIT DA ÁREA DE EDIÇÃO...74 IMPRESSÃO, EXPORTAÇÃO E IMPORTAÇÃO...74 OPÇÃO DESFAZER...74 PALETA DE SINTAXE PL/SQL INTRÍNSECA FILTROS DE GRUPO (GROUP FILTERS)...75 GATILHOS DE VALIDAÇÃO (VALIDATION TRIGGERS)...76 FÓRMULA (FORMULA)...77 GATILHOS DE FORMATO (FORMAT TRIGGER)...77 PL/SQL INTERNA PL/SQL EXTERNA ROTINAS ARMAZENADAS NO BANCO DE DADOS...80 ROTINAS ARMAZENADAS EM BIBLIOTECAS (LIBRARIES)...81 GATILHOS DE RELATÓRIO (REPORT TRIGGERS) EMPACOTAMENTO DA LÓGICA DATABASE TRIGGERS CAPÍTULO 9: MAIS OBJETOS DO LAYOUT INTRODUÇÃO VISUALIZANDO AS INFORMAÇÕES DE ANCORAGEM ÂNCORAS (ANCHORS) QUADROS (FRAMES) BOTÕES (BUTTONS) CAPÍTULO 10: PACOTES EMBUTIDOS O NÓ PACOTES EMBUTIDOS SRW...92 OLE DDE...92 ORA_FFI...93 ORA_DE...93 ORA_PROF ORA_NLS...95 TEXT_IO...95 TOOL_ENV...96 TOOL_RES TOOL_ERR...96 STPROC...97 LIST...97 DEBUG...97 STANDARD ÍNDICE III

5 CAPÍTULO 11: VARIÁVEIS NO REPORT BUILDER INTRODUÇÃO VARIÁVEIS LOCAIS COLUNA DE ESPAÇO RESERVADO (PLACEHOLDER) VARIÁVEIS DE PACOTE PARÂMETROS CAPÍTULO 12: FORMATAÇÃO DINÂMICA CONCEITOS INICIAIS ALGUMAS ROTINAS DO PACOTE SRW COR CAPÍTULO 13: CARACTERÍSTICAS GERAIS PREFERÊNCIAS PASTA GERAL PASTA ACESSAR PASTA ASSISTENTES PASTA VALORES DE RUNTIME PASTA DEFINIÇÕES DE RUNTIME ESTUDANDO O MÓDULO RELATÓRIO (REPORT) JANELA DE FORM DE PARÂMETROS (PARAMETER FORM WINDOW) ESCAPES DE RELATÓRIO (REPORT ESCAPES) MODO CARACTER (CHARACTER MODE) CAPÍTULO 14: DISTRIBUINDO E DELIMITANDO CAPACIDADE DE DISTRIBUIÇÃO USO DE DELIMITADORES USANDO O REPORT BUILDER USANDO A LINHA DE COMANDO CAPÍTULO 15: RELATÓRIOS MATRICIAIS CONCEITOS SIMPLE MATRIX COM UMA QUERY SIMPLE MATRIX COM TRÊS QUERIES SIMPLE MATRIX COM SUMÁRIO NESTED MATRIX CROSS PRODUCT MASTER/DETAIL MODELO DE DADOS LAYOUT MATRIX BREAK MODELO DE DADOS LAYOUT CAPÍTULO16: O ORACLE 8I E O REPORT BUILDER 6I SUPORTE A LARGE OBJECTS (LOBS) SUPORTE A OBJETOS DO ORACLE CARACTERÍSTICAS DE PERFORMANCE PERFORMANCE COM O ORACLE SUPORTE AO PL/SQL INTEGRAÇÃO COM FERRAMENTAS DE SUPORTE A DECISÃO CAPÍTULO 17: O MÓDULO LIBRARY INTRODUÇÃO CRIANDO UMA BIBLIOTECA (LIBRARY) ASSOCIANDO UMA BIBLIOTECA A UMA APLICAÇÃO CONSIDERAÇÕES SOBRE ARMAZENAMENTO CAPÍTULO 18: GABARITOS (TEMPLATES) ÍNDICE IV

6 DESCRIÇÃO A ESTRUTURA DE UM GABARITO MODELO DE DADOS PL/SQL NO GABARITO LAYOUT AS SEÇÕES DO CORPO SEÇÃO DEFAULT SEÇÃO DE SOBREPOSIÇÃO (OVERRIDE SECTION) PROPRIEDADES DE UMA SEÇÃO GRUPO LAYOUT GRUPO ESPAÇAMENTO GRUPO ESTILO PROPRIEDADES DO NÓ CABEÇALHO DA SEÇÃO PROPRIEDADES DO NÓ CORPO DA SEÇÃO PROPRIEDADES DO NÓ SUMÁRIO DA SEÇÃO MONTANDO UM GABARITO (TEMPLATE) SEÇÃO DEFAULT CABEÇALHOS(HEADINGS) CORPO (BODY) SUMÁRIOS (SUMMARY) USANDO O GABARITO CRIADO CAPÍTULO 19: INTERPRETER DESCRIÇÃO A JANELA DE DEPURAÇÃO MARCANDO UM PONTO DE INTERRUPÇÃO BREAKPOINT TRIGGER ACOMPANHANDO UMA DEPURAÇÃO DEPURANDO COM UM PONTO DE INTERRUPÇÃO CAPÍTULO 20: HTML / PDF DESENVOLVENDO UM RELATÓRIO PARA WEB O PREVISUALIZADOR DA WEB HTML PAGE STREAMING NAVEGAÇÃO FORMATO DOS ARQUIVOS GERADOS PARÂMETRO EXEMPLO USANDO SCRIPT DEFAULT EXEMPLO USANDO NOSSO SCRIPT OUTRAS ROTINAS DO PACOTE SRW CHART HYPERLINKS CAPÍTULO 21: INTERFACE FORMS REPORT USANDO O REPORT BUILDER A PARTIR DO FORM BUILDER ACIONANDO UM REPORT A PARTIR DO FORM ÍNDICE V

7 CAPÍTULO 1: O ORACLE DEVELOPER 6I Neste curso estudaremos a ferramenta de desenvolvimento Report Builder 6i que faz parte do pacote de ferramentas para desenvolvimento chamado Oracle Developer 6i. Iniciaremos nosso estudo com informações sobre este pacote, em seguida informações gerais sobre a ferramenta ora em estudo e, na seqüência, trabalharemos com a ferramenta em diversos exemplos e exercícios. Sobre o Pacote O Report Builder faz parte do mesmo pacote de desenvolvimento de sistemas que o Form Builder. O nome deste pacote, como sabemos, é Oracle Developer 6i. Resumiremos as ferramentas que compõem este pacote: Form Builder É a ferramenta para a construção de aplicações online para acesso e atualização de uma base de dados Oracle. Report Builder É a ferramenta para a construções de relatórios que façam acesso a uma base de dados Oracle. Os relatórios podem ser construídos em uma diversidade de formatos desde tabular (como uma tabela) até matricial, passando por etiqueta, carta, formulário, master/detail ou uma combinação de estilos. Procedure Builder É a ferramenta que nos auxilia no desenvolvimento de programas PL/SQL, tanto no ambiente cliente (em bibliotecas de programas compartilhadas por aplicações Forms ou Reports) quanto no ambiente servidor (criação de procedures, functions, packages e database triggers), permitindo uma depuração passo a passo das aplicações criadas. Graphics Builder É a ferramenta que permite que visualizemos os dados do banco de dados de forma gráfica. Os produtos gerados por esta ferramenta podem ser utilizados em aplicações Forms ou Reports. Project Builder Esta é uma ferramenta integradora e organizadora. Permite que associemos as diversas aplicações que componham um projeto de desenvolvimento em uma hierarquia manipulável. Projetos são associações de arquivos com as ferramentas usadas para editá-los. Estes arquivos podem ser de qualquer tipo : forms, reports, displays (gráficos), módulos de 3GL, documentação e scripts de teste. O grupamento e visualização de todos os componentes de um projeto é apenas uma das vantagens. A ferramenta permite também ações coletivas, como por exemplo uma compilação. Query Builder É uma ferramenta auxiliar na construção de consultas ao banco de dados. Possui uma interface gráfica e intuitiva que nos permite rápida e facilmente a montagem de queries para a recuperação de informações. CAPÍTULO 1: O ORACLE DEVELOPER 6.0-1

8 Schema Builder Esta ferramenta nos auxilia na criação, cópia, modificação e remoção de objetos (e relacionamentos) do banco de dados. Translation Builder Esta é uma ferramenta para suporte e gerenciamento no processo de conversão de aplicações Oracle para uma das linguagens suportadas. Suporta a conversão de arquivos do tipo.fmb,.ogd,.rdf,.res e.msg. RESUMINDO O pacote Oracle Developer 6i contém ferramentas que abrangem todas as áreas necessárias ao desenvolvimento de um sistema: aplicações online, batch, relatórios, gráficos e, ainda, uma ferramenta para controle do ambiente. CAPÍTULO 1: O ORACLE DEVELOPER 6.0-2

9 Sobre a Ferramenta Ao desenvolvermos um relatório, em qualquer ferramenta, claramente identificamos duas áreas principais de trabalho: a parte de obtenção dos dados e a parte de especificação do layout. A ferramenta que estudaremos a seguir possui estas duas área ou estes dois conceitos bastante bem definidos, o que nos facilitará bastante o estudo. Da mesma forma que o Form Builder, o Report Builder não é uma ferramenta isolada, é composta de vários executáveis com finalidades diversas. Destacaremos aqueles que mais afetam o nosso estudo: Report Builder 6i (RWBLD60.EXE) - Este é o aplicativo para desenvolvimento e compilação individual de um relatório. Gera arquivos de quatro categorias: RDF / REP (fonte e executável Report), SQL (fonte de uma consulta externa), PLL (PL/SQL Library) e TDF (Template). Report Compiler 6i (antigo Convert RWCON60.EXE) - Este aplicativo permite a conversão de relatórios construídos em Reports 2.5 ou 3.0 para Report 6i (versão atual), convertendo a PL/SQL versão 1.0 ou 2.3 para a versão 8. Permite também a compilação em batch de lotes de programas e, finalmente, a conversão da forma de armazenamento (fonte de relatório armazenado no banco de dados para fonte, template ou executável de relatório em disco; fonte no disco para fonte armazenado no banco de dados). Os fontes tanto podem ser de relatórios quanto de bibliotecas. Report Runtime 6i (RWRUN60.EXE) Este é o aplicativo para execução dos relatórios desenvolvidos (Reports e Libraries PL/SQL). Durante este curso trataremos da construção, compilação e teste de relatórios. Desta forma trabalharemos basicamente com o Report Builder e o Report Runtime. O curso será todo desenvolvido através de exemplos distribuídos aos alunos. CAPÍTULO 1: O ORACLE DEVELOPER 6.0-3

10 CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6I Conceitos Iniciais A ferramenta Report Builder é capaz de construir quatro tipos de módulos diferentes: Módulo Report Que consiste do relatório em si, contendo áreas para obtenção dos dados, definição do layout, parâmetros, etc. O fonte de um módulo Report possui a extensão RDF e o executável REP. Consulta SQL Externa Que consiste de um comando de SQL Select armazenado externamente ao relatório e que pode ser utilizado como fonte de obtenção de dados para mais de um relatório. O arquivo contendo este comando possui a extensão SQL. Módulo PL/SQL Library Que consiste de um conjunto de programas PL/SQL que podem ser compartilhados por diversas aplicações Report ( ou Form ) que executam no ambiente. Possui apenas um tipo de arquivo cuja extensão é PLL. Módulo Template Que consiste de um esqueleto de relatório a ser utilizado como origem para diversos relatórios padronizados da instalação. É um gabarito utilizado como origem para outros relatórios. Durante este estudo trataremos de cada um destes módulos individualmente a fim de analisarmos suas características e usos. Ativando o Report Builder Para acionarmos a execução do Report Builder, devemos usar o botão Iniciar do Windows, pasta Programas, pasta Oracle Developer 6i e escolher a opção Report Builder. A primeira tela apresentada contém um conjunto de opções para iniciarmos a construção dos relatórios sob o grupo "Projetando" e um outro conjunto de opções de apresentação da ferramenta sob o grupo "Fixando na memória". Antes de construirmos nosso primeiro relatório veremos como navegar dentro da ferramenta. Por este motivo escolheremos a opção Desenvolver um novo relatório manualmente. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6.0-4

11 O Navegador de Objetos (Object Navigator) Ao escolhermos a opção Criar um novo relatório manualmente, nos é apresentada uma tela com duas janelas: uma janela do Editor de Relatórios Modelo de Dados e uma segunda janela chamada de Navegador de Objetos ou Object Navigator. Estudaremos, inicialmente, o Navegador de Objetos, que nos dá uma visão de todos os componentes da ferramenta e das aplicações criadas. Fecharemos, portanto, a janela do Editor de Relatórios Modelo de Dados e nos concentraremos na janela do Navegador. A cada objeto criado por esta ferramenta daremos o nome genérico de Módulo, portanto, um relatório será tratado ou considerado um módulo (ou aplicação) assim como uma biblioteca de programas de PL/SQL. Na figura acima, se encontram presentes os nós principais do navegador : Relatórios (Reports) subordinado a este nó estarão os módulos de relatório que viermos a desenvolver. Na figura acima aparece uma aplicação de nome Sem Título. Observe que o nó Relatórios está preenchido com o símbolo ( - ) indicando que o nó está expandido. O nó do módulo Sem Título está preenchido com o símbolo ( + ), indicando que o nó está contraído, ou seja, existem elementos subordinados a este nó que não estão visíveis. Gabaritos (Templates) subordinado a este nó estarão os módulos de Gabarito (Template) que viermos a desenvolver. Na figura não existe nenhum módulo aberto ( o nó está vazio ). Portanto, não tem nenhum símbolo preenchendo o nó. Consultas SQL Externas (External Query) subordinado a este nó incluiremos comandos de SQL Select armazenados em arquivos. Estes comandos Select podem ser compartilhados por diversos relatórios, caracterizando uma origem de dados e diversos layouts. Não incluímos ainda nenhum módulo subordinado a este nó. Bibliotecas PL/SQL (PL/SQL Libraries) subordinado a este nó estarão os módulos de bibliotecas de PL/SQL que viermos a desenvolver. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6.0-5

12 Na figura anterior também não existe nenhum módulo aberto, portando o nó está vazio. Ações de Depuração (Debug Action) e Stack nestes nós não serão cadastrados módulos. Serão incluídas ações temporárias, criadas para efeito de depuração. Pacotes Embutidos (Built-in Packages) subordinado a este nó existem diversos pacotes (packages) contendo diversas rotinas que poderemos utilizar no desenvolvimento da aplicação. Observe que este nó está contraído ( + ). Objetos do Banco de Dados (Database Objects) subordinado a este nó serão visualizados os diversos objetos do banco de dados que o usuário ao qual estamos conectados tem acesso. Atualmente o nó está vazio pois não estabelecemos, ainda, conexão com o banco. A seguir veremos as diversas ações que podemos realizar no Navegador de Objetos. Se você já estudou o Form Builder não encontrará diferenças nas ações Expandir ou Contrair, porém, verifique as ações Criar ou Deletar. EXPANDIR OU CONTRAIR Para expandir um nó ou contraí-lo basta que pressionemos o mouse sobre o símbolo + (para expandi-lo) ou sobre o símbolo (para contrai-lo). A figura ao lado representa o navegador da figura anterior com o nó Sem Título expandido. Esta mesma ação pode ser feita com os botões expandir e contrair da barra de ferramentas. A figura ao lado apresenta os botões que realizam as ações de expansão e contração na barra de ferramentas. Como teste utilize o botão de Expandir Tudo sobre o nó Pacotes Embutidos. Você verificará que a expansão se dará em todos os nós subordinados ao nó principal. Todos serão expandidos simultaneamente. A ação inversa é obtida com o botão Contrair Tudo. CRIAR OU DELETAR Diferentemente do Form Builder, no Report Builder nem todos os objetos podem ser criados no navegador. Para determinados objetos devemos utilizar o editor adequado para sua manipulação. Quando o objeto puder ser criado pelo Navegador, o botão Criar (presente na Barra de Ferramentas) ficará habilitado. Caso contrário ficará desabilitado. Na figura ao lado mostramos os botões Criar e Deletar habilitados. Para realizarmos esta ação basta que selecionemos o nó ou um objeto do mesmo tipo daquele que desejamos criar e pressionemos o botão Criar. Como teste selecione o nó Consultas SQL Externas (corresponde a um elemento do tipo SQL) e pressione o botão Criar. Você observará que será criado um novo módulo de nome Sem Título (2). CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6.0-6

13 Outra forma de realizar a mesma operação é realizarmos um click duplo sobre o nó que desejamos criar um elemento. Teste sobre o nó Parâmetros de Usuário (subordinado ao nó Modelo de Dados do relatório). Com estes testes verificamos que podemos manipular com mais de um módulo ao mesmo tempo usando a ferramenta, uma vez que criamos Sem Título e Sem Título (2). Isto se aplica a todos os nós principais (Reports, Gabaritos, SQL Externas e Libraries). Porém, enquanto não tivermos prática no desenvolvimento de aplicações com esta ferramenta trabalharemos com um módulo por vez. Para removermos um elemento, devemos selecioná-lo e pressionar a ferramenta Deletar ou pressionar o botão Del do teclado. EXECUTAR, IMPRIMIR E MENSAGEM A execução do módulo Report ativo, ou seja, aquele em que temos algum elemento selecionado ocorre quando pressionamos o botão Executar, o botão Imprimir ou o botão Mensagem. Na figura ao lado apresentamos os três botões ligados à execução da aplicação. Quando pressionamos um dos três botões de execução, acionamos o Report Runtime para execução da aplicação corrente. A diferença entre os três é que o botão Executar apresenta a saída no vídeo por default, o botão Imprimir apresenta a saída na impressora por default e o botão Mensagem envia o resultado do relatório através de para os usuários. ABRIR E SALVAR Este último conjunto de botões realiza ações sobre os módulos. A ação se dá de acordo com o elemento que tivermos selecionado no momento. Por exemplo, se tivermos selecionado um módulo Report ou qualquer elemento subordinado a ele e pressionarmos o botão Salvar efetuaremos a salva do módulo corrente e se pressionarmos o botão Abrir serão apresentados outros arquivos com extensão RDF (Report) para que façamos a escolha daquele que desejamos abrir. Como exemplo vamos salvar o módulo atual. Uma vez que o Report Builder pode ser salvo tanto no banco de dados quanto no disco e é a primeira vez que salvamos este módulo, o Report Builder apresenta um diálogo para que indiquemos o meio de armazenamento. Quando optamos por disco, o Report Builder apresenta um novo diálogo para que determinemos o diretório onde efetuaremos a salva e o nome desejado para o módulo. A partir do momento que definirmos o diretório e o nome do módulo, o Report Builder não mais apresentará este diálogo nas próximas vezes que pressionarmos o botão Salvar. Como teste salve o módulo ativo com o nome de Teste. Observe após a salva que no navegador o nome do módulo é alterado para teste. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6.0-7

14 LOCALIZAR Podemos usar o pesquisador do Navegador para encontrar elementos e nós dentro do Navegador. Para iniciarmos uma busca devemos digitar a string que desejamos procurar no campo Localizar que fica posicionado no canto superior direito da janela do Navegador. A cada caracter que digitamos o Report Builder movimenta o cursor para o próximo elemento que as letras digitadas sejam compatíveis. Por exemplo, selecionemos o módulo Teste. Ao posicionarmos o cursor sobre o campo Localizar e digitarmos a letra A, o Report Builder posicionará o cursor sobre o nó After Report (nó subordinado a Gatilhos do Relatório). Quando necessário podemos utilizar as duas lanternas posicionadas ao lado do campo Localizar para efetuar uma busca para frente ou para trás. NAVEGANDO NA HIERARQUIA Da lado esquerdo da janela do Navegador existe um campo que apresenta o nome do elemento atualmente selecionado. Ao abrirmos a lista deste campo, verificaremos que ele contém todos os ancestrais hierarquicamente superiores em relação ao objeto selecionado. Ele apresenta a árvore de subordinação do elemento selecionado. Podemos selecionar qualquer elemento desta hierarquia, bastando que façamos a seleção do elemento desejado, clicando o mouse sobre o nome do elemento na lista. PAINÉIS DO NAVEGADOR Podemos dividir o navegador em múltiplos painéis horizontalmente ou verticalmente. Para tal devemos pressionar e arrastar o mouse sobre o ponto de divisão horizontal ou vertical mostrado na figura ao lado. Só podemos dividi-lo num sentido (vertical ou horizontal) de cada vez. Podemos realizar múltiplas subdivisões, desde que num mesmo sentido. ALTERANDO O NOME DE UM ELEMENTO A modificação do nome de qualquer elemento poderá ser feita através de sua janela de propriedades, porém esta ação também pode ser feita no navegador. Devemos efetuar um click simples no nome do elemento selecionado para que seja habilitada a digitação no próprio local. Observe na figura ao lado que algumas letras da palavra parame estão selecionadas e parte da palavra foi removida. Compare com o nome completo do nó no campo referente à hierarquia (canto superior esquerdo da janela do Navegador). Para efetivarmos a modificação basta pressionarmos o mouse sobre qualquer outro nó para que seja encerrado o estado de digitação. Se desejarmos desistir devemos pressionar a tecla Esc para encerrar desfazendo as modificações. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6.0-8

15 O MENU DO REPORT BUILDER Muitas das ações realizadas com os botões estão presentes nos menus apresentados pelo Report Builder. Freqüentemente realizaremos uma ação já conhecida com um menu em vez de utilizarmos o botão correspondente. Durante o estudo usaremos as ações à medida que forem sendo necessárias. CRIANDO UMA APLICAÇÃO Para esta primeira aplicação utilizaremos o Assistente de Relatórios para nos auxiliar na construção. Verifique novamente a figura do item "Ativando o Report Builder", o Assistente de Relatórios corresponde à primeira opção do diálogo Bem Vindo ao Report Builder. Uma vez que já não estamos mais com este diálogo ativo, usaremos a opção Assistente de Relatórios do menu Ferramentas para acionar o assistente desejado. ESTABELECENDO CONEXÃO COM O BANCO DE DADOS Antes de acioná-lo, porém, devemos estabelecer conexão com o banco de dados. No menu Arquivo (File) escolha a opção Conectar (Connect) para que o diálogo de conexão seja apresentado. Neste diálogo devemos informar o código do usuário e sua senha além da string de conexão com o banco de dados (no nosso caso todos os campos devem ser preenchidos com Desenv). Agora sim, com a conexão estabelecida acionaremos o Assistente de Relatórios (Report Wizard), presente no menu Ferramentas (Tools). ESTILO DO RELATÓRIO A primeira tela apresentada está presente na figura abaixo. Neste diálogo são apresentadas diversas opções de relatório. Como teste, sem pressionar o botão próximo, marque uma opção de cada vez e observe no painel à esquerda um exemplo do estilo de relatório correspondente. Durante nosso estudo teremos oportunidade de testar todos os estilos. Iniciemos, então, com o estilo Tabular. Em seguida, pressione o botão próximo. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER 6.0-9

16 No segundo diálogo somos questionados sobre o tipo de consulta a ser criada. São apresentadas duas opções: Instrução SQL ou Consulta Express. Se optarmos por Consulta Express, será apresentado um diálogo para que façamos a conexão com o servidor Express. Neste diálogo poderemos informar dados para a conexão (UserId, Password e Id do Express) e dados para a autenticação no servidor Express (Domínio, UserId e Password). Após o preenchimento destas informações outro diálogo será apresentado contendo: Os bancos disponíveis atualmente ( para que façamos a escolha de um deles para associação). As dimensões disponíveis para que façamos a escolha daquelas que desejamos selecionar. Além de outras informações a serem preenchidas passo a passo para a montagem do relatório. Uma vez que não estamos estudando o Oracle Express, interromperemos a seqüência de análise deste desenvolvimento. Ficamos, apenas, com a informação de que o Report Builder já é capaz de desenvolver relatórios para o produto Oracle Express, certamente conhecido dos desenvolvedores para Data Warehouse. Sendo assim, optaremos por Instrução SQL e seguiremos pressionando o botão Avançar. O terceiro diálogo, referente aos dados (observe os botões abaixo da área de digitação) nos possibilita três opções: Podemos digitar o comando Select que contenha os dados desejados no espaço Instrução de Consulta. Podemos acionar o Query Builder para a construção passo a passo do comando SQL ao pressionarmos o botão Consultar Builder. Podemos desenvolver este relatório a partir de uma consulta previamente armazenada em um arquivo.sql existente no disco, pressionando o botão Importar Consulta de SQL. Esta opção utiliza uma Consulta SQL Externa (External Query). QUERY BUILDER - TABELAS Uma vez que estamos estudando e testando, utilizaremos o botão do Query Builder para a construção da consulta passo a passo. A figura ao lado nos mostra o primeiro diálogo apresentado pelo Query Builder. Neste diálogo devemos indicar de que objetos desejamos obter dados. Na parte superior do diálogo devemos indicar se os objetos de onde virão os dados são: Tabelas (Tables), Views, Snapshots, Sinônimos (Synonyms) ou uma combinação de tipos diferentes (podemos marcar mais de uma opção simultaneamente). Na parte central é apresentada uma lista com três opções: Desenv (que é o usuário ao qual estabelecemos conexão), <Local>(se estivermos trabalhando com um banco de dados local - Pesronal) e Bancos de Dados (se estivermos pretendendo a conexão a um banco de dados da rede). Se os objetos pertencerem ao usuário Desenv, eles serão apresentados na caixa de diálogo inferior. Se desejarmos obter dados de objetos pertencentes a outros usuário do banco local (ou atual), devemos escolher a opção <Local> (ou o banco de dados ao qual você estiver conectado). Neste caso a caixa de diálogo inferior apresentará a lista de usuários e você poderá selecionar aquele que interessa. A opção Bancos de Dados (Databases), quando selecionada, mostrará a lista de objetos Database Links presentes no banco de dados atual que permitirão a conexão com outros bancos (não exploraremos esta opção neste material). CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

17 QUERY BUILDER DIÁLOGO PRINCIPAL Suponhamos que desejássemos criar um Join entre a tabela de Funcionário e a de Departamento. Neste caso selecionaremos a tabela Depto e pressionaremos o botão Incluir (Include). Em seguida selecionaremos a tabela Func e pressionaremos, novamente, o botão Incluir (Include). Estas operações que fizemos separadamente podem ser realizadas de uma única vez se mantivermos a tecla CTRL pressionada enquanto selecionamos as tabelas desejadas. Para encerrar este diálogo, pressione o botão Fechar (Close). A tela apresentada corresponde ao diálogo principal do Query Builder. Observe que aparecem em cinza os dois relacionamentos existentes entre as tabelas selecionadas. Este diálogo principal se subdivide em duas áreas: Do lado direito encontra-se a área de objetos selecionados. Do lado esquerdo se encontra a área de restrições da consulta. Além das áreas, esta janela apresenta uma barra de ferramentas superior com todas as ações disponíveis no Query Builder. Testaremos as funções e utilizaremos os botões da barra passo a passo. Até este momento, apesar de termos selecionado as tabelas Func e Depto, ainda não estabelecemos quais as colunas farão parte desta consulta. QUERY BUILDER COLUNAS Para selecionarmos as colunas que farão parte da consulta, temos duas opções: Efetuar um click duplo sobre a coluna apresentada no desenho (lado direito do painel) ou click simples sobre o retângulo à esquerda do nome da coluna. Pressionar o botão seqüência de colunas (column sequence) da barra de ferramentas. Selecionaremos via click a coluna nm_depto da tabela Depto. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

18 Concentremos nossa atenção na imagem da tabela Depto apresentada na página anterior. Nesta imagem encontramos: Do lado direito a indicação do tipo de coluna: Alfanumérica (símbolo A), Numérica (símbolo contendo os números 7, 8 e 9), Data (símbolo contendo o número 31). Do lado esquerdo o indicador (checado ou não checado) de coluna selecionada (click duplo sobre uma das colunas para que este indicador apareça). Do lado direito da coluna cd_depto_ctb aparece uma seta curva, indicando que esta coluna representa um auto relacionamento na tabela (sabemos que cd_depto_ctb possui relacionamento com a coluna cd_depto). Do lado esquerdo do nome do objeto um símbolo indicando que se trata de uma tabela ( T ). Ainda do lado esquerdo do nome do objeto aparece o indicador (checado ou não checado) para tabela. Pressionaremos a seguir o botão Seqüência de Colunas (Column Sequence), destacado na barra de ferramentas da figura da página anterior, para escolher as colunas cd_mat e nr_cargo. A figura anterior nos mostra o diálogo para escolha das colunas que serão incluídas na cláusula Select do comando. Do lado esquerdo aparecem as colunas disponíveis. Observe que as colunas que possuem o mesmo nome nas duas tabelas já aparecem prefixadas com o nome do owner (usuário) e do objeto. Para incluirmos uma coluna no comando Select, devemos selecioná-la no lado esquerdo e pressionar o botão Copiar (Copy). Se quisermos retirar uma coluna da lista devemos selecioná-la no lado direito e pressionar o botão Remover(Remove). Se desejarmos que o comando Select seja apresentado em uma determinada ordem, devemos selecionar as colunas na ordem desejada. QUERY BUILDER SQL Para que possamos acompanhar o comando Select que está sendo gerado passo a passo, podemos pressionar o botão Show SQL (da barra de ferramentas). Observe que os relacionamentos entre as duas tabelas são incluídos a partir do momento que escolhermos colunas das duas tabelas. Nosso próximo passo será adicionar uma concatenação das colunas nome e sobrenome do funcionário. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

19 QUERY BUILDER DEFININDO UMA COLUNA Para esta tarefa usaremos o botão Definir Coluna (Define Column) da barra de ferramentas (este botão está ao lado direito do botão Seqüência de Colunas - Column Sequence usado anteriormente). No diálogo apresentado existem dois locais para preenchimento de informação: No campo colunas definidas (defined columns) devemos incluir um texto que corresponderá ao nome da coluna criada (ou seja um alias). No campo definidas como (defined as) devemos escrever a expressão associada (no nosso caso nm_func nm_sobrenome). Neste diálogo existem, ainda, dois botões para auxílio na montagem da expressão: Colar coluna (paste column) se clicarmos neste botão será apresentada a lista das colunas para seleção, basta você selecionar a coluna da lista e ok. Colar func..(paste function) se clicarmos neste botão será apresenta a lista de funções de sql que poderemos utilizar na expressão montada. Para efeito de teste, escreveremos então quatro expressões: Concatenação de nome e sobrenome, já explicada acima. Formatação de data de nascimento, ou seja, to_char(dt_nasc, dd/mm/yyyy ). Formatação de data de admissão, ou seja, to_char(dt_adm, dd/mm/yyyy ). Formatação de sexo, ou seja, decode (in_sexo, f, feminino, m, masculino, indeterminado ) Para criarmos uma nova coluna sem sair deste diálogo, devemos pressionar o botão Definir (Define), portanto, mãos à obra. O resultado destas quatro novas colunas está apresentado no diálogo ao lado. Quando você fechar este diálogo observará que as quatro colunas foram acrescentadas à lista de colunas da tabela Func (com um indicador de função), porém não apresentam o símbolo indicativo de que estão selecionadas. Faça um click duplo sobre cada uma delas. Para cada uma marcada, a coluna original, presente na expressão também será considerada selecionada. Antes de prosseguir verifique novamente o comando Select montado. QUERY BUILDER ORDENANDO O RESULTADO Desejamos que o relatório seja ordenado por data de nascimento em ordem decrescente, isto é, do mais novo para o mais velho. Para que o diálogo que estabelece a ordenação seja acionado devemos clicar no botão Classificar (Sort) da barra de ferramentas (ao lado direito do botão Definir Coluna). No diálogo apresentado, do lado esquerdo, estão listadas todas as colunas disponíveis para ordenação. Selecionamos, então, a coluna dt_nasc e pressionamos o botão Copiar (Copy). Para determinar que a ordenação seja descendente, selecionamos a coluna dt_nasc do lado direito do diálogo e marcamos a opção Descendente (Descending). Em seguida dê OK e verifique o comando SQL. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

20 QUERY BUILDER ALIAS O comando SQL apresentado já está suficientemente complexo. Para limparmos um pouco este comando, incluiremos alias para as tabelas a fim de diminuir a qualificação das colunas. Portanto pressione o botão Rename Table (passe o mouse lentamente sobre a barra de ferramentas para que o nome do botão seja apresentado). Quando você abrir este diálogo, na janela superior aparecerá o nome da tabela para a qual você definirá o Alias. Na parte inferior do diálogo você deve escrever D (para Depto), pressionar o botão Define. Em seguida selecione a tabela Func e escolha como alias a letra F. Na parte central aparecerá o alias escolhido para cada uma das tabelas. Dê OK. Antes de seguir, verifique novamente o comando Select. Ficou melhor, não? QUERY BUILDER - INCLUINDO UMA RESTRIÇÃO Nosso próximo passo será incluir uma restrição. Usaremos, então a área esquerda do Diálogo Principal. Para uma melhor visualização desta sintaxe, aumente o tamanho desta área da tela, da seguinte forma: Na parte inferior da tela existe uma marca preta ao lado do botão (seta para esquerda) da barra de rolagem. Clique sobre esta marca e arraste-a para a direita para aumentar a área à esquerda. Para iniciar a montagem da restrição, clique sobre a área de texto (corresponde ao retângulo presente nesta área de desenho). Observe que na barra de ferramentas do lado direito, diversos botões foram habilitados. Estes botões serão utilizados para a montagem da restrição. Nosso objetivo é incluir duas restrições: cd_mat > 20 e cd_depto = D11 Como primeiro passo usaremos o botão Paste Column da barra de ferramentas para obter a coluna cd_mat. Em seguida escreveremos > 20 na linha de texto. Para incluir a segunda restrição pressionaremos a tecla Enter e uma nova caixa de restrição será aberta. Como próximo passo selecionaremos a coluna cd_depto (pressione o botão Paste Column) e digitaremos o restante da restrição. Quando clicarmos novamente na primeira restrição, o operador AND será acrescido (automaticamente) para ligar as duas condições. O resultado é apresentado na figura abaixo. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

21 Visualize novamente o comando Select montado para conferir o resultado. Se você desejar alterar o operador AND pelo OR ou acrescentar NOT, selecione o retângulo onde aparece o AND e pressione o botão desejado na barra de ferramentas. Para cada teste verifique o que aconteceu com a cláusula Where do comando Select. Durante os exercícios deste tópico trabalharemos variações de montagem que nos possibilitem utilizar os demais botões do Query Builder. Por ora aceitaremos o diálogo. Clique OK. Neste momento retornaremos ao Assistente de Relatórios para prosseguir na montagem de nosso primeiro relatório. Checar Sintaxe (Check Syntax) Quando aceitamos o diálogo anterior e retornamos ao Assistente de Relatórios, notamos a presença de um botão para validação sintática do comando de SQL montado. Pressione este botão e verifique se o comando está OK. Vamos retirar a condição de relacionamento que liga o gerente à sua matrícula para que a quantidade de linhas do resultado seja maior. WHERE (F.CD_MAT>20 AND DESENV.D.CD_DEPTO='D11') AND (DESENV.F.CD_DEPTO=DESENV.D.CD_DEPTO) ORDER BY F.DT_NASC DESC A listagem acima nos mostra a cláusula Where resultante. Pressione o botão Checar Sintaxe novamente. Havendo alguma incorreção, modifique o comando SQL adequadamente. Siga para a próxima pasta (Campos). PASTA CAMPOS(FIELDS) Neste diálogo determinaremos, dentre as colunas lidas pelo comando Select, quais as que serão apresentadas no relatório. Quando navegamos para este diálogo, todas as colunas aparecem na coluna Campos Exibidos (Displayed Fields). Se quisermos omitir algum campo devemos selecioná-lo e devolvê-lo para a coluna Campos Disponíveis (Available Fields) usando o botão <. Seguiremos para a próxima etapa. PASTA TOTAIS (TOTALS) Neste diálogo estabeleceremos campos de sumário relativos às colunas selecionadas. Escolheremos alguns totais para efeito de teste. Ao selecionarmos uma coluna do lado esquerdo um conjunto de botões será habilitado, de acordo com o tipo (data, numérico, char, etc) da coluna. Marque Mínimo e Máximo para Nasc e Contagem para Nr_Cargo. Navegue para o próximo diálogo. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

22 PASTA ETIQUETAS (LABELS) Neste diálogo escolheremos os títulos das colunas do relatório. Fizemos algumas alterações, não apenas nos títulos, como também na largura de determinadas colunas. Compare sua tela com o resultado apresentado na figura acima. Navegue para o próximo diálogo. PASTA GABARITO (TEMPLATE) Neste diálogo veremos que o Report Builder oferece um conjunto de gabaritos pré-definidos que poderemos usar e customizar, de acordo com os padrões de nossa instalação. Neste primeiro exemplo não utilizaremos um Gabarito, para que possamos analisar exatamente o resultado da montagem sem qualquer interferência. Nos exercícios, no entanto, experimentaremos todas as opções. Quando você aceitar este diálogo estará encerrando a montagem do relatório. Automaticamente, entrará em execução o Previsualizador Ativo (Live Previewer) que nos mostrará o resultado da execução do relatório. CAPÍTULO 2: A FERRAMENTA REPORT BUILDER

23 CAPÍTULO 3: O DATA MODEL Componentes de um Relatório Agora que já montamos diversos relatórios usando o Assistente, estudaremos, em detalhes as diversas partes de que se compõem um relatório. Comentamos anteriormente que um relatório (desenvolvido em qualquer linguagem) sempre possui duas áreas principais de trabalho: dados (com ou sem parâmetros) e layout. O Report Builder possui estas áreas bastante bem definidas, o que nos facilitará o estudo. Fechemos, então, o relatório anterior e criemos um novo, porém, escolha a opção de criar um relatório manualmente. Salve este relatório vazio com o nome de DM01. Observe novamente o Navegador de Objetos. Nele, você encontra quatro ícones principais: Previsualizador Ativo (Live Previewer) este ícone acionará a execução do relatório para avaliação (Preview). Modelo de Dados (Data Model) onde desenvolveremos a parte de dados do relatório. Layout Model (Layout Model) onde desenvolveremos a parte de layout do relatório. Form de Parâmetros (Parameter Form) onde desenvolveremos a tela para solicitação dos parâmetros do relatório. CAPÍTULO 3: O DATA MODEL - 17

24 O Editor do Modelo de Dados Iniciaremos nosso estudo pelo modelo de dados. Dê um click duplo no ícone Modelo de Dados (Data Model). Nós será apresentada a tela do Editor de Relatórios do Modelo de Dados. Composta de: Uma paleta de ferramentas (à esquerda). Uma barra de ferramentas (acima). Uma área de desenho (central). Uma barra de status (inferior). A PALETA DE FERRAMENTAS Observe que a paleta de ferramentas à esquerda possui 9 botões (passe o mouse vagarosamente sobre estes botões para que seus nomes sejam apresentados): Selecionar (Select) quando este botão está pressionado, podemos selecionar qualquer objeto do diagrama. Ampliar (Magnify) este botão tem a finalidade de efetuar as operações de ampliação e redução. Consultar (Query) com este botão criaremos um objeto para especificação dos dados a serem selecionados. Em um relatório podemos criar um ou mais objetos deste tipo. Consulta de Cursor de Ref (Query Cursor Ref) com este botão criaremos uma função que obtém os dados a serem apresentados no relatório e os coloca em uma variável cursor que é retornada pela função para o Report Builder. Ligação de Dados (Data Link) com esta ferramenta poderemos estabelecer uma ligação entre dois objetos Query. Coluna de Resumo (Summary Column) esta ferramenta cria colunas de sumário a serem anexadas ao relatório. Estas colunas não estão presentes no banco de dados. São geradas a tempo de execução baseando-se nos dados obtidos do banco de dados pela consulta. Coluna de Fórmula (Formula Column) esta ferramenta cria colunas de fórmula a serem anexadas ao relatório. Estas colunas não estão presentes no banco de dados. São definidas pelo usuário e geradas a tempo de execução baseando-se nos dados obtidos do banco de dados pela consulta. Coluna de Espaço Reservado (PlaceHolder Column) com esta ferramenta criamos uma coluna de trabalho, que funciona como uma variável do relatório e pode ser utilizada dentro de gatilhos ou fórmulas para recepção de valores. Produto Híbrido (Cross Product) com esta ferramenta criaremos um relatório matricial. CAPÍTULO 3: O DATA MODEL - 18

25 A BARRA DE FERRAMENTAS A barra de ferramenta superior possui os seguintes botões: Previsualizador Ativo (Live Previewer) Aciona o Preview. Só possível após a montagem do layout. Modelo de Dados (Data Model) atualmente pressionada. Modelo de Layout (Layout Model) Aciona o Editor de Layout para que possamos modificar, criar ou apenas visualizar o layout gerado. Form de Parâmetros (Parameter Form) Aciona o Editor da Tela de Parâmetros para que possamos modificar, criar ou apenas visualizar a tela de parâmetros gerada. Abrir (Open) Abre um novo relatório. Salvar (Save) Salva o relatório atual. Executar (Run) Executa o relatório atual. Imprimir (Print) Executa o relatório atual, direcionando - o para a impressora default do sistema. Limpar (Clear) Remove o objeto atualmente selecionado. Ampliar (Zoom In) Aumenta o nível de Zoom. Reduzir (Zoom Out) Reduz o nível de Zoom. Assistente de Dados (Data Wizard) Aciona o Assistente de Dados. Assistente de Relatórios (Report Wizard) Aciona o Assistente de Relatórios. Expandir (Expand) Expandir um nó na hierarquia. Recolher (Contract) Contrair um nó na hierarquia. Ajuda (Help) Aciona o arquivo de ajuda para esta tela. A BARRA DE STATUS A Barra de Status informa o nível de Zoom e a posição relativa do mouse dentro da área de desenho (tanto na horizontal quanto na vertical). CAPÍTULO 3: O DATA MODEL - 19

26 Criando uma Consulta Nosso primeiro passo será criar a Consulta (Query) para obtenção dos dados, portanto clique sobre a ferramenta Consultar (Query) e, em seguida, em qualquer ponto da área de desenho. Será apresentado novamente o diálogo referente à query (Instrução de Consulta de SQL). Preencha este diálogo da seguinte forma: SELECT CD_DEPTO, CD_MAT, NM_FUNC, VL_SAL FROM FUNC Se você desejar, acione o Query Builder para construir o comando Select definido na listagem apresentada anteriormente. Aceite este diálogo e verifique o esquema gerado na figura ao lado. Este esquema é composto de três partes distintas, as quais estudaremos a seguir. CONSULTA (QUERY) A consulta é a parte superior do desenho mostrado na figura ao lado, onde encontramos o título QFunc. Selecione a consulta e abra a tela de propriedades (use o botão direito do mouse ou a opção Paleta de Ferramentas do menu Ferramentas ou F4). A paleta de propriedades apresentada possui apenas três propriedades de interesse para nós neste momento: Arquivo de Origem de Consulta Externa (External Query Source File) nesta propriedade determinamos o nome de um arquivo em disco (extensão SQL) que contenha um comando de SQL Select a ser usado para obtenção dos dados. Declaração de Consulta SQL (SQL Query Statement) esta propriedade contém o texto do comando SQL Select atualmente associado a este objeto. Máximo de Linhas para Extração (Maximum Rows to Fetch) neste parâmetro podemos limitar a quantidade de linhas trazidas pela consulta. Isto é especialmente útil quando a base de dados é muito extensa e desejamos apenas testar a execução do relatório. Em função de muitas referências dentro do Report Builder se fazerem por nome alteraremos o nome de cada um dos objetos que vierem a ser criados. No caso da Query já trocamos seu nome para Qfunc. Faça isto você também (para tal clique sobre a propriedade Nome e altere o texto presente para Qfunc). O segundo objeto de estudo é o grupo. CAPÍTULO 3: O DATA MODEL - 20

27 GRUPO (GROUP) O grupo está identificado por G_1. Selecione-o e obtenha a paleta de propriedades. A única propriedade a ser analisada para o objeto é o Tipo de Filtro (Filter Type) que determinará ou não uma condição de filtragem para as linhas selecionadas no banco de dados. Quando determinado Nenhum (None) indicamos que todas as linhas selecionadas pela Query serão utilizadas no relatório. Se desejarmos que apenas as N primeiras linhas sejam utilizadas, devemos escolher o valor Primeira (First) para esta propriedade. Quando efetuamos esta escolha uma nova propriedade é apresentada Número de Registros (Number of Records) onde definiremos qual o valor de N, ou seja a quantidade de linhas iniciais da consulta a serem utilizadas no relatório. Se desejarmos que apenas as N últimas linhas sejam utilizadas, devemos escolher o valor Última (Last) para esta propriedade (Tipo de Filtro). Quando efetuamos esta escolha a propriedade Número de Registros (Number of Records) é apresentada novamente para que possamos definir o valor de N, ou seja a quantidade de linhas finais da consulta a serem utilizadas no relatório. Finalmente o último valor válido para esta propriedade é PL/SQL. Nesta situação é acrescida a propriedade Filtro PL/SQL(PL/SQL Filter). Nesta opção deveremos escrever um texto de PL/SQL (como o exemplo abaixo) indicando se a linha lida deve ou não ser incorporada ao relatório. function G_1GroupFilter return boolean is begin IF :CD_DEPTO LIKE 'D%' THEN return TRUE; ELSE return FALSE; END IF; end; Ao pressionarmos o botão associado à propriedade Filtro PL/SQL(PL/SQL Filter) acionamos, implicitamente o editor de PL/SQL, que monta uma função booleana com o mesmo nome do filtro acrescida da expressão GroupFilter, indicando que esta função está associada à filtragem de linhas do grupo G_1 (no nosso caso). Uma função boleana retorna True ou False. Desta forma se desejarmos aceitar a linha, isto é, se quisermos que uma determinada linha seja incluída no relatório, devemos retornar True. Caso contrário False. Não podemos, de forma alguma, esquecer de retornar um valor desta função (caso contrário receberemos erro de execução). Copie o texto de PL/SQL para sua aplicação, compile e feche o editor de PL/SQL. Altere o nome do grupo para G_Func e feche a paleta de propriedades. Quando você retornar ao Editor do Data Model, observará que imediatamente acima do grupo existe um desenho (uma bolinha verde) identificador de filtro no grupo. Este ícone mudou de cor, indicando que este grupo possui um filtro associado. CAPÍTULO 3: O DATA MODEL - 21

28 COLUNAS DO BANCO DE DADOS A última parte deste esquema é composta das colunas que selecionamos na Query. Observe que os nomes correspondem exatamente aos nomes das colunas que definimos. Escolha uma coluna e acione a paleta de propriedades. Tente trocar o nome desta coluna, ou seu tipo ou, ainda, seu tamanho. Isto não é possível porque esta coluna está sendo obtida do banco de dados com as características apresentadas. Se desejarmos trocar seu nome, devemos especificar um alias no comando Select, não na tela de propriedades. As demais propriedades, no entanto, podem ser utilizadas por nós: Valor se Nulo (Value If Null) nesta propriedade especificamos o valor a ser apresentado no relatório se o conteúdo desta coluna em determinada linha for Null. No nosso caso preencheremos com três hífens (---). Definir Ordem de Interrupção (Set Break Order) esta propriedade e a seguinte só possuem interesse quando estamos trabalhando um grupo de quebra (será visto mais adiante). No caso de um grupo simples, como é o nosso caso, esta propriedade não tem efeito. Ela determinará se a coluna será utilizada para identificar que houve uma quebra (modificação) de um registro em relação ao outro. Ordem de Interrupção (Break Order) - esta propriedade só possui interesse quando estamos trabalhando um grupo de quebra (será visto mais adiante). No caso de um grupo simples, como é o nosso caso, esta propriedade não tem efeito. Indicará se esta coluna deve ser apresentada em ordem ascendente ou descendente. Só válida se A propriedade anterior receber o valor Sim (Yes). Ler a Partir do Arquivo (Read from File) nesta propriedade indicaremos se o texto contido nesta coluna, na verdade, contém um nome de arquivo que deve ser lido e apresentado no relatório no lugar do texto da coluna. Neste primeiro exemplo trabalharemos com Não nesta propriedade. CAPÍTULO 3: O DATA MODEL - 22

29 Criando um Layout Para a criação de um Layout que nos possibilite a impressão do relatório, acionaremos o Assistente de Relatórios (Report Wizard), cujas pastas já conhecemos. Verificaremos que: Na pasta Estilo, escolheremos o estilo Form. Na pasta Dados, a query já está preenchida. Na pasta Campos, as colunas não foram transferidas para exibição, o que devemos fazer agora. Não preencheremos a pasta Totais. Modificaremos os nomes dos títulos das colunas à gosto. Não usaremos Gabarito (só nos exercícios). Ao encerrarmos o Assistente, o relatório será executado. Devemos observar as seguintes características da execução: De que departamentos foram selecionadas linhas? Foram selecionadas linhas do departamento D11 e D21, conforme o filtro especificado. Houve algum departamento vazio? Não porque, no filtro, somente autorizamos departamentos que começassem com D. O relatório está ordenado por alguma coluna? Não, apesar da especificação Set Break estar associada a todas as colunas deste grupo, a ordenação não ocorre porque esta propriedade só é aplicável ao grupo de quebra. Quantos registros foram apresentados por página? Apenas um registro é apresentado por página quando o estilo do relatório é Form (ou formulário). Salve o relatório atual para que possamos fazer um novo teste. CAPÍTULO 3: O DATA MODEL - 23

30 Criando um grupo de Quebra Partiremos do relatório atual para a criação de um relatório com quebra, portanto salve-o com o nome de DM02. Retorne ao Editor do Data Model (click duplo no ícone correspondente no Navegador ou F2 ou a opção Editor de Relatório do menu Ferramentas Tools). Desejamos, agora, que nosso relatório grupe os dados relativos ao mesmo departamento. Para tal, devemos indicar para o Report Builder que usaremos a coluna cd_depto para identificar a quebra. Nosso primeiro passo será criar um grupo de quebra. Para realizar esta ação clique sobre a coluna cd_depto e, sem soltar o botão do mouse, arraste-a para cima, para fora do grupo G_Func. Habitue-se desde já a dar nome aos grupos. O desenho ao lado segue este padrão. Você verá que é muito mais prático adotar esta regra. A figura acima nos mostra o resultado da ação realizada anteriormente. Este desenho indica que os dados serão apresentados em ordem de departamento e, quando houver uma alteração no departamento será realizada uma ação de quebra. Neste caso as propriedades Ordem de Interrupção (Break Order) e Definir Ordem de Interrupção (Set Break Order) têm efeito para a coluna cd_depto. Criaremos o layout do relatório e executaremos para ver o resultado. Acione o Assistente (Wizard) e escolha como estilo Agrupar à Esquerda. As demais pastas você já tem condições de escolher sozinho. Observe o aparecimento da pasta Grupos (Groups), que nos mostra quais as colunas presentes em cada um dos grupos de quebra (no nosso caso só temos 1). Ao encerrarmos o Assistente, o relatório será executado. Devemos observar as seguintes características da execução: Porque todos os códigos de departamento foram apresentados? Isto ocorreu porque o filtro está posicionado no bloco detalhe, sendo assim a linha é obtida do banco de dados, é montada a informação do grupo de quebra e na hora de montar a informação do grupo detalhe ocorre a filtragem. Porque não foram apresentados linhas para os outros departamentos? Justamente por causa do filtro. Para contornar esta situação, isto é, para que não sejam mostrados nem mesmo os códigos de departamento, devemos colocar o filtro no grupo de quebra. Para tal, retorne ao editor de Data Model, selecione o filtro do grupo detalhe copie o texto da função (só o texto entre o Begin e o End). Remova o filtro, clicando no botão Delete da janela do editor de PL/SQL. Na paleta de propriedades defina que o Tipo de Filtro (Filter Type) é Nenhum (None). CAPÍTULO 3: O DATA MODEL - 24

31 A seguir abra a tela de propriedades do grupo de quebra, troque o tipo de filtro para PL/SQL, pressione o botão da propriedade associada e quando o editor de PL/SQL for acionado, cole o texto do filtro no local adequado. Porque somente um registro do departamento foi apresentado em cada página? O Assistente é reentrante, isto significa que ele não remove uma especificação existente, ele a modifica para adequar às novas especificações. Como aproveitamos este relatório do outro, existia um layout já montado do tipo Form, que prevê apenas um registro por página (Formulário). Sendo assim, esta característica foi mantida. Para que esta situação seja mudada, devemos escolher a opção Modelo de Layout (Layout Model) do menu Visualizar (View) para que o layout seja apresentado. Marque, agora a opção Selecionar Todos (Select All) do menu Editar (Edit). Em seguida, aperte a tecla Delete para que todos os objetos do layout sejam removidos. Acione o Wizard de novo (ele também aparece na barra de ferramentas superior do Layout), escolha layout Agrupar à Esquerda e re-execute a aplicação. Na figura acima apresentamos o resultado esperado. Observe que os demais departamentos não são mais apresentados e todas as linhas de cada departamento aparecem seguidas umas em relação às outras (não ocorre quebra de página). Salve esta aplicação. Iniciaremos uma nova usando um novo objeto, o Link. CAPÍTULO 3: O DATA MODEL - 25

32 Relacionando Dados Neste exemplo criaremos um Link para relacionar duas queries. Feche o relatório anterior. Abra um novo e salve-o com o nome de DM03. Navegue para o Editor de Data Model (click duplo no ícone correspondente no Navegador ou F2 ou a opção Editor de Relatórios do menu Ferramentas). Use a ferramenta SQL Consultar (Query) para criar o comando SQL Select apresentado no texto abaixo: SELECT CD_DEPTO, NM_DEPTO FROM DEPTO Crie uma segunda query com o comando de SQL Select apresentado no texto abaixo: SELECT CD_DEPTO, CD_MAT, NM_FUNC, NM_SOBRENOME, VL_SAL, DT_NASC FROM FUNC Dê os nomes adequados para cada um dos grupos e veja o resultado na figura ao lado. Iniciaremos nossos testes montando um layout para estes dados e executando o relatório. Acione, portanto, o Assistente de Relatórios (Report Wizard). Na pasta Estilo, escolha Tabular. Na pasta Grupos, escolha Vertical para ambos. Observe que os grupos não estão relacionados, são independentes. Na pasta Campos, selecione todos. Aumente o tamanho do nome do departamento para 40. Não anexe gabarito. Execute a aplicação. Observe que todas as linhas de Departamento foram apresentadas primeiro com o layout Tabular, seguidas de todas as linhas de Funcionário, também apresentadas no formato Tabular. Não existe nenhuma ligação entre os dados das duas queries. A ordem foi definida em função da ordem das queries no Editor para o Data Model. A query mais à esquerda foi definida primeiro no Layout Model e a query mais à direita foi definida em seguida. CAPÍTULO 3: O DATA MODEL - 26

33 Se você desejar fazer um teste a mais troque a ordem dos objetos no Data Model. Arraste-os trocando-os de lugar. Em seguida remova o layout criado (este passo é indispensável). Para tal entre no menu Visualizar (View) e escolha Modelo de Layout (Layout Model). Quando o layout for apresentado, escolha a opção Selecionar Todos (Select All) do menu Editar (Edit). Em seguida tecle Delete para que todos os objetos sejam removidos. Acione o Assistente novamente, preencha as pastas adequadamente e execute o relatório. Nesta situação todos os funcionários são apresentados primeiro. Em seguida, todos os departamentos. Prossigamos, então, retornando ao Data Model. Desejamos, agora, que os dados se relacionem, ou seja, que para cada departamento sejam apresentados os funcionários correspondentes. A ferramenta Ligação de Dados (Data Link) permite a montagem desta ligação de três formas: De Query para Query devemos clicar inicialmente na ferramenta, em seguida na query Pai e, sem soltar o botão do mouse, arrastá-lo até a query Filha. O Report Builder pesquisará no banco de dados os relacionamentos existentes entre as duas tabelas envolvidas e estabelecerá a ligação baseado no que for encontrado no banco de dados. De Grupo para Grupo - devemos clicar inicialmente na ferramenta, em seguida no grupo Pai e, sem soltar o botão do mouse, arrastá-lo até o grupo Filho. Neste caso, o Report Builder estabelecerá a ligação apenas em relação ao grupo, independente das colunas presentes em cada um deles. Para cada linha do grupo pai, todas as linhas do grupo filho serão associadas. De Coluna para Coluna - devemos clicar inicialmente na ferramenta, em seguida na coluna Pai e, sem soltar o botão do mouse, arrastá-lo até a coluna Filha (quantas houverem). O Report Builder agirá, agora, em relação às colunas envolvidas. Cada vez que a coluna da Query pai mudar de valor, um novo conjunto de linhas na Query filha será selecionado. CAPÍTULO 3: O DATA MODEL - 27

34 Neste primeiro exemplo, devemos relacionar através das queries, portanto, clique na ferramenta Ligação de Dados (Data Link), em seguida na query Q_Depto e sem soltar o botão esquerdo do mouse arraste-o até a query Q_Func. O resultado obtido está na figura acima. Se seu desenho não ficou exatamente igual, verifique se a query Q_Depto está mais à esquerda. Se não estiver, basta mover os objetos de posição. Acionaremos, a seguir, o Assistente. Escolheremos estilo Agrupar Acima (Group Above). As demais pastas não precisam ser preenchidas, pois já o estão. Observe a diferença de o resultado na execução deste relatório. CRIANDO UM RELATÓRIO A PARTIR DE UMA VARIÁVEL CURSOR Esta funcionalidade é semelhante ao uso de um bloco baseado em procedimento do Form Builder, ou seja, poderemos criar uma rotina que retorne um cursor e nosso relatório seja baseado neste resultado. Para analisarmos esta questão, criaremos um relatório vazio e definiremos uma especificação de pacote localmente, conforme apresentado abaixo. PACKAGE PACOTE IS TYPE REG IS RECORD (MAT NUMBER, NOME VARCHAR2(30), DEPTO VARCHAR2(50)); TYPE REF_CS IS REF CURSOR RETURN REG; END; Com esta definição criamos o tipo cursor e especificamos o tipo de retorno associado aos cursores deste tipo. Em seguida, no Modelo de Dados criaremos uma consulta baseada em cursor. Quando soltarmos o mouse sobre a área gráfica do editor, será acionado o editor de PL/SQL para que façamos o preenchimento da função apresentada. Definimos um pequeno exemplo, apresentado a seguir. FUNCTION QR_1REFCURDS RETURN PACOTE.REF_CS IS W_CURSOR PACOTE.REF_CS; BEGIN OPEN W_CURSOR FOR SELECT CD_MAT, NM_FUNC ' ' NM_SOBRENOME, NM_DEPTO FROM FUNC F, DEPTO D WHERE F.CD_DEPTO = D.CD_DEPTO; RETURN W_CURSOR; END; Quando compilarmos e fecharmos esta função o Data Model assumirá o aspecto apresentado pela figura ao lado, o que nos permitirá a montagem do layout normalmente. Use o Assistente de Relatórios para a montagem do Layout, execute-o e veja o resultado. Nosso próximo passo será a realização dos exercícios do tópico para que possamos testar outras características do Data Model. CAPÍTULO 3: O DATA MODEL - 28

35 CAPÍTULO 4: SUMÁRIOS E FÓRMULAS Sumários Um sumário é um cálculo executado em relação a diversas linhas de uma única coluna. Por exemplo, um somatório de salários, uma média salarial, um total de gastos, etc. O Report Builder oferece um conjunto de funções que nos possibilitam criar diversas operações de sumarização. Estudaremos este assunto através de um exemplo. Abriremos o exemplo DM02 e salvaremos com o nome de DM04. Abra o Data Model e observe que neste exemplo temos um grupo de quebra contendo o código do departamento e um grupo de detalhe contendo a matrícula, o nome e o salário do funcionário. DETERMINANDO A FREQÜÊNCIA DE IMPRESSÃO Se executarmos este relatório, do jeito que ele está, descobriremos que o código do departamento possui uma freqüência de impressão diferente das colunas matrícula, nome e salário, isto é, o código do departamento é impresso muito menos vezes que as outras colunas. Ele só é impresso quando ocorre uma quebra. Execute o relatório e comprove. Este é o conceito de Freqüência de Impressão. Um elemento contido em um grupo de quebra será impresso tantas vezes quanto for sua freqüência de impressão. Isto significa que se incluirmos uma coluna qualquer no grupo de quebra ela somente será impressa quando o código do departamento for impresso. Por outro lado, se incluirmos uma coluna qualquer no grupo de detalhe ela será impressa cada vez que as colunas matrícula, nome e salário forem impressas. Antes de prosseguirmos nosso estudo com os sumários, façamos um teste. Alteremos o comando de SQL Select para que inclua dois valores constantes: quebra apelidado de GQ e detalhe apelidado de GD. Para tal, efetue um click duplo na Query, na pasta de propriedades apresentada, selecione a propriedade Declaração de Consulta SQL (SQL Query Statement) e modifique manualmente o comando Select. SELECT CD_DEPTO, CD_MAT, NM_FUNC, VL_SAL, 'quebra' GQ, 'detalhe' GD FROM FUNC Observe o resultado no texto acima. Dê OK e retorne ao modelo de dados. Arraste a coluna GQ para o grupo de Quebra. O resultado deve ser similar ao da figura ao lado. Como detalhe adicional, observe que a coluna GQ está marcada com um triângulo do lado esquerdo. Isto significa que se seu valor variasse, ela estaria determinando o momento de quebra. Neste nosso caso isto não vai acontecer, pois seu valor será igual em todas as linhas. Entre, agora, no Assistente, gere um novo layout(agrupar à esquerda) e execute este relatório. O que podemos concluir? CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 29

36 Na nossa execução a coluna GQ ( quebra ) foi impressa duas vezes, enquanto que a coluna GD ( detalhe ) foi impressa 9 vezes. Isto ocorre em função da freqüência de impressão. Se você tiver entendido este conceito, não terá dificuldades de determinar o posicionamento das colunas de sumário que definiremos a seguir. O primeiro passo para criarmos uma coluna de sumário é determinar sua freqüência de impressão, portanto, de acordo com o tipo de sumário definido a seguir, determine seu posicionamento no diagrama. Utilize o botão Coluna de Resumo (Summary Column) presente na paleta de ferramentas do Modelo de Dados (Data Model). Total de salários por departamento (Tot_Sal_Dep). Quantidade de funcionários por departamento (Qtd_Fun_Dep). Média salarial por departamento (Avg_Sal_Dep). Total de salários da empresa (Tot_Sal_Emp). Quantidade de funcionários da empresa (Qtd_Fun_Emp). Maior salário da empresa (Max_Sal_Emp) Percentual de cada salário em relação ao departamento (Pct_Sal_Dep). Percentual de cada salário em relação à empresa (Pct_Sal_Emp). Acumulado de cada salário em relação ao departamento (Acm_Sal_Dep). Acumulado de cada salário em relação à empresa (Acm_Sal_Emp). O posicionamento destas colunas no Data Model aparece na figura a seguir. Observe que os totais relativos à empresa não ficam posicionados dentro dos grupos uma vez que sua freqüência de impressão é única ao final de todo o relatório. Os percentuais apesar de serem calculados em relação ao departamento e à empresa, devem ser impressos com a mesma freqüência de impressão do registro de funcionário uma vez que cada salário terá um valor de percentual diferente em relação à empresa e em relação ao departamento. CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 30

37 Os acumulados correspondem a totais em que visualmente acompanhamos a soma, isto é, cada vez que um novo salário é acrescentado visualizamos o resultado do acumulado. Por este motivo o acumulado de salários em relação ao departamento foi apresentado na freqüência do funcionário. O acumulado em relação à empresa poderia ser feito em relação ao funcionário ou em relação ao departamento. Eu escolhi manter no nível de funcionário. DETERMINANDO A FUNÇÃO DO SUMÁRIO Nossa próxima tarefa será determinar para cada uma das colunas qual a função de sumário adequada. Para tal deveremos abrir a tela de propriedades de cada uma delas e preencher a propriedade Função (Function), com o valor especificado a seguir. A relação de funções é a seguinte: Total de salários por departamento (Tot_Sal_Dep). Função : Soma (Sum). Quantidade de funcionários por departamento(qtd_fun_dep). Função: Contagem (Count). Média salarial por departamento (Avg_Sal_Dep). Função : Média (Avg). Total de salários da empresa (Tot_Sal_Emp). Função : Soma (Sum). Quantidade de funcionários da empresa (Qtd_Fun_Emp). Função : Contagem (Count). Maior salário da empresa (Max_Sal_Emp). Função : Máximo (Max). Percentual de cada salário em relação ao departamento (Pct_Sal_Dep). Função: % do Total (% of Total). Percentual de cada salário em relação à empresa (Pct_Sal_Emp). Função: % do Total (% of Total). Acumulado de cada salário em relação ao departamento (Acm_Sal_Dep). Função: Soma(Sum). Acumulado de cada salário em relação à empresa (Acm_Sal_Emp). Função : Soma (Sum). DETERMINANDO A COLUNA ORIGEM DO SUMÁRIO Esta é a propriedade mais fácil de determinar. Devemos especificar a coluna sobre a qual efetuaremos o cálculo. Para calcularmos o total de salários por departamento usaremos como origem (source) a coluna vl_sal. Para calcularmos a média salarial por departamento usaremos como origem (source) a coluna vl_sal e assim por diante. No nosso caso praticamente todos os sumário tem a mesma origem, pois tudo é calculado em função do salário. Apenas nos totais da empresa (Total e Quantidade), poderíamos utilizar como origem (source) os sumários de departamento ou a coluna vl_sal (o resultado é o mesmo). A diferença se dá na freqüência com que a operação de soma será calculada: a cada linha ou apenas na quebra. Se pudermos utilizar como origem (source) uma coluna que tenha uma freqüência de impressão menor, a operação será feita menos vezes e, portanto, haverá algum ganho de performance. Neste exemplo usaremos vl_sal como origem para todos os sumários. CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 31

38 QUANDO ZERAR O SUMÁRIO Esta é uma outra propriedade de extrema importância para o resultado correto da sumarização. Devemos determinar quando nossa variável de sumário será zerada. Por exemplo, o Total de salários por departamento (Tot_Sal_Dep) deverá ser zerado quando houver uma mudança de departamento para que possamos reiniciar o processo de acumulação. Já o Total de salários da empresa (Tot_Sal_Emp) deve ser zerado apenas no fim do relatório, ou seja quando este acabar. Você observará, no entanto, que a propriedade Reinicializar em (Reset At) não possui uma lista de colunas e sim uma lista de grupos (por isso é importante dar nomes que identifiquem os grupos). Devemos determinar o grupo em relação ao qual o sumário deverá ser zerado. Tente raciocinar sobre o exemplo e confira a lista a seguir: Total de salários por departamento (Tot_Sal_Dep). Função: Soma (Sum). Zerar no grupo G_cd_depto. Quantidade de funcionários por departamento (Qtd_Fun_Dep). Função: Contagem (Count). Zerar no grupo G_cd_depto. Média salarial por departamento (Avg_Sal_Dep). Função: Média (Avg). Zerar no grupo G_cd_depto. Total de salários da empresa (Tot_Sal_Emp). Função: Soma (Sum). Zerar no fim do relatório: Report. Quantidade de funcionários da empresa (Qtd_Fun_Emp). Função: Contagem (Count). Zerar no fim do relatório: Report. Maior salário da empresa (Max_Sal_Emp). Função : Máximo (Max). Zerar no fim do relatório: Report. Percentual de cada salário em relação ao departamento (Pct_Sal_Dep). Função: % do Total (% of Total). Zerar a cada funcionário: no grupo G_cd_mat. Percentual de cada salário em relação à empresa (Pct_Sal_Emp). Função: % do Total (% of Total). Zerar a cada funcionário: no grupo G_cd_mat. Acumulado de cada salário em relação ao departamento (Acm_Sal_Dep). Função: Soma (Sum). Zerar no grupo G_cd_depto. Acumulado de cada salário em relação à empresa (Acm_Sal_Emp). Função: Soma (Sum). Zerar no fim do relatório: Report. CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 32

39 DETERMINANDO O GRUPO DE TOTALIZAÇÃO Se tivermos utilizado em algum dos cálculos a função % do Total, existe mais uma especificação a ser fornecida. Observe que no nosso exemplo criamos um Percentual de cada salário em relação ao departamento (Pct_Sal_Dep), porém até agora não informamos ao Report Builder que a sumarização deveria ser feita em relação ao departamento, ou seja, em relação ao total de salários do departamento. Esta informação é dada através da propriedade Calcular em (Compute At). No nosso caso teríamos: Percentual de cada salário em relação ao departamento (Pct_Sal_Dep). Função: % do Total (% of Total). Zerar a cada funcionário: no grupo G_cd_mat. Calcular em G_cd_depto. Percentual de cada salário em relação à empresa (Pct_Sal_Emp). Função : % do Total (% of Total). Zerar a cada funcionário: no grupo G_cd_mat. Calcular em Report. Nosso próximo passo será acionar o assistente (com layout Agrupar Acima) e executar este relatório. Vamos verificar se existem funcionários sem salários na base de dados (se não houver inclua alguns para que você verifique o que ocorre no resultado). Apesar de termos forçado esta situação não houve problemas com o cálculo dos somatório, dos percentuais, da média e dos totais por departamento. Isto ocorre porque, como sabemos de nosso estudo no SQL, as linhas com Null não participam das funções de grupo. No entanto, esta situação causa um erro relativamente aos totais de quantidade. O resultado dos sumários quantidade total de funcionários por departamento e na empresa está incorreto. Como utilizamos uma coluna que admite Null como origem (source), os funcionários sem salário não foram computados na quantidade de funcionários. O que obtivemos, na verdade, foi a quantidade de funcionários em que a coluna salário está preenchida (e este não é o objetivo). Para corrigir esta situação, a melhor coluna a ser utilizada como origem (Source) da quantidade de funcionários (em ambos os níveis) é a coluna cd_mat, que por ser PK está preenchida em todas as linhas. CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 33

40 Fórmulas Uma fórmula é um cálculo que envolve uma ou mais colunas de um registro. Uma fórmula corresponde a uma função de PL/SQL que retorna um valor. Desta forma uma variável do tipo fórmula retornará o resultado do cálculo. Suponhamos, então, para a montagem de nosso exemplo que desejássemos calcular as seguintes informações: Fgts para cada funcionário (Fgts_Func). Inss para cada funcionário (Inss_Func). Ticket alimentação para cada funcionário (Ticket_Func). Projeto em que o funcionário está alocado (Proj_Func). Projetos do Departamento (Proj_Depto). Para não misturar com o exemplo anterior criaremos um novo relatório DM05, partindo da mesma Query do DM04, porém sem os sumários anteriores. DETERMINANDO A FREQÜÊNCIA DE IMPRESSÃO Nosso primeiro trabalho será determinar onde criaremos as colunas de fórmula. Desta vez usaremos a ferramenta Coluna de Fórmula (Formula Column) da Paleta de Ferramentas do Modelo de Dados (Data Model). A determinação da freqüência de impressão obedece às mesmas regras estudadas na parte de sumário. Vejamos se o seu raciocínio confere com o resultado da figura ao lado. Neste caso teremos três colunas numérics e duas alfanuméricas. DETERMINANDO O TIPO DE RETORNO Quando o resultado da fórmula for atribuído às colunas que acabamos de criar o tipo de retorno da fórmula deve ser compatível com o tipo da coluna. Caso contrário, receberemos um erro de atribuição. Verifiquemos, então, o tipo e o tamanho das colunas que acabamos de criar. Fgts para cada funcionário (Fgts_Func). Numérico. Tamanho: 7,2. Inss para cada funcionário (Inss_Func). Numérico. Tamanho: 7,2. Ticket alimentação para cada funcionário (Ticket_Func). Numérico. Tamanho: 7,2. Projeto em que o funcionário está alocado (Proj_Func). Alfanumérico. Tamanho: 6. Projetos do Departamento (Proj_Depto). Alfanumérico. Tamanho: 40. Estas informações devem ser atribuídas às propriedades Tipos de Dados (Data Type) e Largura (Width). Outra informação interessante de ser preenchida no caso de uma fórmula é o valor da coluna se o retorno da fórmula for Null. Esta informação é dada pela propriedade Valor se Nulo (Value If Null). Usaremos zero para as colunas numéricas e 3 hífens para as colunas alfanuméricas. CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 34

41 DETERMINANDO A FUNÇÃO DA FÓRMULA Nossa próxima tarefa será escrever o código de PL/SQL associado a cada fórmula. Esta informação deve ser utilizada na propriedade Fórmula PL/SQL (PL/SQL Formula). Como regra para utilização das colunas selecionadas na fórmula, temos que: Podemos mencionar qualquer coluna que esteja na mesma freqüência de impressão. Podemos mencionar qualquer coluna que esteja em uma freqüência de impressão menor, ou seja, de um grupo acima daquele onde se encontra a fórmula. No nosso caso, temos que: Se a fórmula foi criada no nível de Funcionário, poderá mencionar as colunas presentes no próprio nível de Funcionário ou no nível da quebra ou no nível do relatório (fora dos grupos). Se a fórmula foi criada no nível de Departamento, poderá mencionar as colunas presentes no próprio nível de Departamento ou no nível do relatório (fora dos grupos). As fórmulas a serem utilizadas são: Fgts para cada funcionário (Fgts_Func). Numérico. Tamanho: 7,2. Fórmula: 0.1 * :vl_sal. function FGTS_FUNCFormula return Number is begin return.1 * :vl_sal; end; Inss para cada funcionário (Inss_Func). Numérico. Tamanho: 7,2. Fórmula: 0.08 * :vl_sal. function INSS_FUNCFormula return Number is begin return.08 * :vl_sal; end; Ticket alimentação para cada funcionário (Ticket_Func). Numérico. Tamanho: 7,2. Fórmula: dia_útil* function TICKET_FUNCFormula return Number is dia_util number := 0; dia_ini date := trunc(sysdate); dia_fim date := add_months(trunc(sysdate), 1); begin while dia_ini < dia_fim loop if to_number(to_char(dia_ini, 'd')) between 2 and 6 then dia_util := dia_util + 1; end if; dia_ini := dia_ini + 1; end loop; dia_util := dia_util * 5; return dia_util; end; CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 35

42 Projeto em que o funcionário está alocado (Proj_Func). Alfanumérico. Tamanho: 6. Fórmula: obter o projeto que tenha um responsável com a matrícula mais próxima da matrícula do funcionário e no mesmo departamento. function PROJ_FUNCFormula return Char is cod_projeto varchar2(10); begin for r1 in (select cd_proj from proj where cd_depto = :cd_depto order by abs(cd_resp - :cd_mat)) loop cod_projeto := r1.cd_proj; exit; end loop; if cod_projeto is null then return 'Não Alocado'; else return cod_projeto; end if; end; Projetos do Departamento (Proj_Depto). Alfanumérico. Tamanho: 40. Fórmula: obter todos os códigos de projeto deste departamento. function PROJ_DEPTOFormula return Char is cod_projeto varchar2(40) := ''; begin for r1 in (select cd_proj from proj where cd_depto = :cd_depto) loop cod_projeto := cod_projeto r1.cd_proj ' - '; end loop; if length(cod_projeto) > 1 then return cod_projeto; else return 'Não associado a projetos'; end if; end; Agora só falta gerar o layout e executar o relatório. CAPÍTULO 4: SUMÁRIO E FÓRMULAS - 36

43 CAPÍTULO 5: PARÂMETROS CONCEITUAÇÃO Neste tópico trataremos de dois assuntos relacionados: dos parâmetros e da tela de parâmetros. Os parâmetros são variáveis para as quais associamos valores a tempo de execução, isto é, são Containers de dados. Por este motivo estão subordinados ao Data Model. Observemos no Navegador de Objetos (Object Navigator), que existem dois nós associados a parâmetros: Parâmetros de Sistema (System Parameters) e Parâmetros de Usuário (User Parameters). Parâmetros de Sistema Os parâmetros de sistema são variáveis pré-definidas associadas a todas as aplicações de relatório. Estão associados a ações específicas, que conheceremos a seguir: BACKGROUND Este parâmetro indica se o relatório deve ser executado em background. O valor Yes não é suportado pelo Report Builder. Os valores válidos são: Yes ou No (default). COPIES Este parâmetro determina o número de cópias do relatório. Será ignorado se o destino não for impressora. Os valores válidos variam de 1 a O valor default é 1. CURRENCY Este parâmetro determina o símbolo a ser usado como símbolo financeiro para formatos numéricos. O valor default para este parâmetro é dado pela NLS em uso. DECIMAL Este parâmetro determina o símbolo a ser usado como caracter decimal para formatos numéricos. O valor default para este parâmetro é dado pela NLS em uso. DESFORMAT Este parâmetro possui dois significados diferentes: Em ambientes bitmap especifica o driver da impressora a ser usado quando o destino (destype) é arquivo. Em ambientes Caracter especifica as características da impressora cujo nome é dado pelo parâmetro desname. Este parâmetro é ignorado se o destino for vídeo. Alguns dos valores válidos são: hpl, hplwide, dec, decwide, decland, dec180, deflt, wide, pdf, html, htmlcss. Quando escolhemos como formato PDF, estamos indicando que o arquivo gerado poderá ser lido por um software similar ao Adobe Acrobat Reader. As características do arquivo serão determinadas pelo driver de impressora atualmente selecionado. Deve existir um driver de impressora configurado e selecionado na estação para que seja possível a geração do arquivo: Quando escolhemos HTML estamos indicando que o arquivo gerado poderá ser lido por um browser que seja compatível com o formato HTML 3.0 (por exemplo, Netscape 2.2). Quando escolhemos HTMLCSS estamos indicando que o arquivo gerado poderá ser lido por um browser que seja compatível com o formato HTML 3.0 que suporte Cascading Style Sheets (por exemplo Microsoft Internet Explorer 3.01). CAPÍTULO 5: PARÂMETROS - 37

44 O valor default para este parâmetro é obtido da propriedade valor inicial. Se não houver valor inicial ou for dflt, o driver da impressora atualmente selecionado é usado. Se não houver uma impressora selecionada, PostScript é o default. DESNAME Neste parâmetro informamos o nome do arquivo, nome da impressora, mail-id (ou lista de distribuição) para onde o relatório será enviado. Este parâmetro será ignorado se o destino for vídeo. Se o destino for Preview, o Report Builder se utiliza deste parâmetro para determinar o tipo de fonte a ser usado para apresentação do resultado. Se o destino for arquivo e este parâmetro estiver vazio, o nome default para o arquivo gerado será <nome do relatório>.lis. DESTYPE Este parâmetro determina o destino do relatório em execução. Os valores válidos são: screen, file, printer, preview, sysout ou mail. O valor Screen direciona a saída para o Previewer, assim como o valor Preview. A opção Preview gerará a formatação como PostScript. A opção Sysout não é válida para execução pelo RWBLD60. Somente podemos usá-la com o RWRUN60 quando o parâmetro Batch (do RWRUN60) receber o valor Yes. MODE Indica se o relatório terá formato gráfico (BitMap) ou formato caracter (character mode). Se no ambiente Windows especificarmos Mode=Character, será acionado o driver ASCII para que seja produzida uma saída compatível. Os valores válidos para este parâmetro são: Bitmap, Character ou Default. O valor Default (que é o default) indica que o modo do relatório deve ser compatível com o executável em uso. ORIENTATION Este parâmetro determina a direção de impressão das páginas do relatório. Os valores válidos são: Default, Landscape e Portrait. O valor Default (que é o default) indica que a direção de impressão será determinada pela orientação que estiver especificada para a impressora. PRINTJOB Este parâmetro determina se deve ou não ser apresentado o diálogo de Print Job antes da execução do relatório. Este diálogo permite que o usuário imprima parte do relatório. Se o relatório for executado a partir de outro programa, por exemplo, o RWRUN60 é acionado a partir do RWBLD60, o diálogo de Print Job não é apresentado mesmo que tenha o valor Yes. Os valores válidos para este parâmetro são: Yes (default) e No. THOUSANDS Este parâmetro determina o símbolo a ser usado como separador de milhar para formatos numéricos. O valor default para este parâmetro é dado pela NLS em uso. CAPÍTULO 5: PARÂMETROS - 38

45 Parâmetros de Usuário Os parâmetros de usuário são variáveis criadas na aplicação que podem ser utilizadas em qualquer ponto do relatório. Seu uso mais comum é a restrição de linhas a serem selecionadas por alguma das queries definidas no relatório. Existem duas formas de referenciarmos os parâmetros na aplicação: Bind e Lexical. BIND REFERENCE Uma referência do tipo Bind é usada para substituição de um valor em uma expressão SQL ou PL/SQL. É muito comum sua utilização nas cláusulas Select, Where, Group By, Order By, Having, Connect By e Start With da Query do relatório. Este tipo de referência não pode ser usado na cláusula From ou em substituição a palavras reservadas. Sua utilização é feita com os dois pontos precedendo o nome do parâmetro na cláusula escolhida. Façamos um teste para melhor entendimento. Salve seu módulo DM05 como DM06, retire todas as variáveis de fórmula e qualquer filtro de grupo que ainda reste na aplicação. Em seguida, salve-a. Abra a Query da aplicação e inclua a cláusula Where apresentada no texto a seguir. SELECT CD_DEPTO, CD_MAT, NM_FUNC, VL_SAL FROM FUNC WHERE CD_DEPTO = :P_DEPTO Quando clicarmos no botão OK, a mensagem apresentada na figura abaixo será mostrada, indicando que o Report Builder criou o parâmetro mencionado na sintaxe da Query QFunc. Ao retornarmos para o Navegador veremos que foi adicionado um parâmetro no nó Parâmetros de Usuário (User Parameters). A criação automática do parâmetro não nos exime da tarefa de verificar as características do parâmetro gerado, portanto, dê um click duplo (ou use o botão direito do mouse) para obter a tela de propriedades desta variável. Observe que o tipo do parâmetro é caracter e o tamanho é 40. Apesar do tipo ser compatível com o tipo da coluna cd_depto, o tamanho foi determinado de forma independente do comprimento da coluna. Alteremos seu tamanho para 3 e façamos nossa primeira execução para descobrir onde o parâmetro é solicitado. A tela de parâmetros apresentada na figura ao lado é construída automaticamente pelo Report Builder quando executa um relatório que possui parâmetros e não encontra a tela de parâmetros correspondente. CAPÍTULO 5: PARÂMETROS - 39

46 LISTA DE VALORES Suponhamos, agora, que nosso usuário além de poder escrever o valor do parâmetro poderá selecionar o valor de uma lista pré-definida. Para tal, retornemos às propriedades do parâmetro e selecionemos a propriedade Lista de Valores (List of Values). O diálogo da figura acima mostra que podemos montar os valores para a lista de duas formas: fornecendo valores estáticos (static values) ou fornecendo um comando Select (Select Statement) que obtenha os valores do banco de dados. Iniciaremos com os valores estáticos. Preencheremos o campo Valor (Value) com o texto D11 e em seguida pressionaremos o botão Incluir>>(Add>>). Repetiremos esta operação para os valores D21, E21, E11 e A00. No canto superior esquerdo encontramos um check box com o texto: Restringir Lista a Valores Predeterminados (Retrict List to Predetermined Values). Isto significa que a tempo de execução o usuário não poderá digitar outro valor, somente escolher um dos valores da lista. Como este não é o nosso desejo, desmarcaremos esta opção. O resultado deve ficar igual ao da última figura apresentada. Para encerrar, click em OK e execute a aplicação. Escolha um dos parâmetros e veja o resultado. Em seguida execute novamente e preencha o parâmetro com B01 e veja o resultado. Retornemos, então, à propriedade Lista de Valores (List of Values), com a intenção de apresentar para o usuário não mais o código do departamento, mas sim o nome do departamento. Neste caso escolheremos uma lista de valores baseada no comando Select. No diálogo apresentado preencheremos o campo Instrução de Consulta de SQL com o texto abaixo: SELECT CD_DEPTO, NM_DEPTO FROM DEPTO Observe que no comando Select definido, incluímos duas colunas: cd_depto e nm_depto. A primeira coluna definida no comando Select é atribuída ao parâmetro. Desta forma se o usuário escolher a terceira linha da lista de valores, o código do departamento desta linha será atribuído ao parâmetro P_Depto, mesmo que este código não fique visível. CAPÍTULO 5: PARÂMETROS - 40

47 No canto superior direito deste diálogo temos dois check boxes que nos indicam: Restringir Lista a Valores Predeterminados (Retrict List to Predetermined Values) quando marcamos esta opção o usuário somente poderá selecionar um dos valores da lista. Não poderá efetuar nenhuma digitação. Ocultar Primeira Coluna (Hide First Column) quando marcamos esta opção indicamos que na lista de valores apresentada não será mostrado o valor da primeira coluna. Desta forma o usuário verá o nome do departamento, porém, estaremos obtendo para o parâmetro o código do departamento. Façamos, a seguir, a execução da aplicação com estas condições e vejamos o resultado. Inicialmente verifique que não podemos digitar no campo Pdepto, somente escolher um valor da lista. Também não temos visibilidade do código. Outra questão é que a largura da lista não é suficiente para que todo o texto do parâmetro seja apresentado. A duas primeiras situações foram provocadas por nós através das opções Restringir Lista a Valores Predeterminados (Retrict List to Predetermined Values) e Ocultar Primeira Coluna (Hide First Column). A outra situação foi provocada pelo fato do Report Builder construir a tela de parâmetro automaticamente. Só poderemos contornar esta situação quando pudermos construir nossa própria tela, o que será visto ainda neste tópico. CAPÍTULO 5: PARÂMETROS - 41

48 LEXICAL REFERENCE Outra forma de fazermos referência a um parâmetro dentro do comando SQL Select é chamada de léxica, porque podemos alterar o texto do comando Select a ser enviado para o banco de dados. Suponhamos, então, que desejássemos que a ordenação da consulta fosse feita ora por matrícula, ora por nome e ora por salário, de acordo com um parâmetro informado. Usaremos um parâmetro com o nome de P_Order, do tipo caracter e com comprimento de 40 bytes. Você poderá criá-lo pelo Navegador ou se utilizar do mesmo estratagema anterior, isto é, mencioná-lo no comando Select da Query e deixar que o Report Builder crie-o automaticamente para você. No caso de uma referência léxica a sintaxe a ser utilizada no comando Select é diferente daquela usada na referência Bind. SELECT CD_DEPTO, CD_MAT, NM_FUNC, VL_SAL FROM FUNC &P_ORDER Neste caso estamos informando ao Report Builder que haverá uma alteração na sintaxe do comando Select a ser enviado para o banco de dados. Para que o usuário possa decidir qual a melhor ordem para o resultado, criaremos uma lista estática com os valores : matrícula, nome e salário. Adicionalmente impediremos que o usuário informe qualquer outro valor. Estes valores, se anexados ao comando de SQL, naturalmente gerarão um erro de sintaxe. Por este motivo devemos, de acordo com o valor recebido, montar a cláusula Order By da forma que desejamos. Sendo assim, usaremos a propriedade Gatilho de Validação (Validation Trigger) para escrever um código de PL/SQL adequado. function P_ORDERValidTrigger return boolean is begin IF :P_ORDER = 'Matrícula' THEN :P_ORDER := 'ORDER BY CD_MAT'; ELSIF :P_ORDER = 'Nome' THEN :P_ORDER := 'ORDER BY NM_FUNC'; ELSE :P_ORDER := 'ORDER BY VL_SAL'; END IF; return (TRUE); end; Quando você selecionar a propriedade Gatilho de Validação (Validation Trigger) será acionado o editor de PL/SQL, contendo uma função boleana. Como este gatilho é de validação, isto significa que poderíamos efetuar uma crítica no valor do parâmetro recebido e desejar que o usuário voltasse a digitá-lo. Por este motivo o gatilho é boleano. Se a informação digitada pelo usuário estiver correta, devemos retornar True, caso contrário False, o que fará com que a tela de parâmetros seja apresentada novamente para as devidas correções. CAPÍTULO 5: PARÂMETROS - 42

49 O texto que escrevemos não necessita deste recurso porque o usuário não tem a possibilidade de informar um valor inválido, portanto, digite o texto e execute a aplicação. Na figura acima verificamos o resultado obtido para o valor Nome. Antes de seguirmos com nossos testes, retorne ao Navegador e observe que ao lado do ícone do parâmetro P_Depto existe um indicador preenchido com um P. Todas as vezes que incluirmos um código de PL/SQL em um objeto que permita tal ação, poderemos no Navegador saber que isto aconteceu. CAPÍTULO 5: PARÂMETROS - 43

50 Criando uma Tela de Parâmetros Podemos criar uma tela de parâmetros com as características que desejarmos para ser mostrada quando a execução da aplicação iniciar. Para efetuarmos os testes deste assunto retornaremos à nossa aplicação DM06, no qual desejávamos aumentar o tamanho do nome do departamento apresentado na tela de parâmetros. USANDO UM CRIADOR AUTOMÁTICO Iniciaremos a criação da tela de parâmetros ativando uma ferramenta para a criação automática. A partir dela faremos as alterações necessárias. Selecione a opção Criador de Form de Parâmetros (Parameter Report Builder) no menu Ferramentas (Tools). Na lista apresentada estão presentes todos os parâmetros existentes na aplicação sejam parâmetros de usuário ou parâmetros de sistema. Se clicarmos sobre o nome do parâmetro, um retângulo em volta do nome ficará em preto (veja o parâmetro P_Depto na figura ao lado), indicando que este parâmetro será selecionado e montado na tela gerada. Ao lado de cada parâmetro aparece um campo (Etiqueta Label) em que podemos definir um texto que será colocado lateralmente ao parâmetro na execução. No nosso caso, selecionaremos os parâmetro DesType e P_Depto. Para o parâmetro P_Depto preencheremos a coluna Etiqueta (label) com o texto Departamento. Ainda temos, neste mesmo diálogo, possibilidade de escrever três outros textos aplicáveis à tela como um todo: Título (Title), Linha de Dicas (Hint Line) e Linha de Status (Status Line). Preencheremos com os seguintes textos: Título (Title) Linha de Dicas (Hint Line) Linha de Status (Status Line) Parâmetros do Relatório. Preencha adequadamente. O preenchimento é obrigatório. Quando você clicar em OK, será acionado o Editor da Tela de Parâmetros. Se você já estudou o Form Builder, não terá dificuldades em alterar a tela de parâmetros gerada pois o editor é semelhante ao editor de Layout do Form Builder. Se você ainda não estudou o Form Builder, em breve veremos o editor de layout do Report Builder que permitirão a você fazer as modificações que faremos a seguir. Faremos algumas poucas modificações no layout a fim, principalmente, de visualizarmos integralmente o texto do parâmetro: Aumente o tamanho da caixa de texto dos dois parâmetros apresentados. Troque a cor do texto parâmetros do relatório para vermelho e tipo de letra atrial, tamanho 12, negrito. Sublinhe o texto preencha adequadamente Coloque em branco o texto o preenchimento é obrigatório. Quando usamos o editor da tela de parâmetros aparece uma linha preta do lado direito da tela. Esta linha é indicadora do tamanho da tela. Em breve veremos como alterar este tamanho. Momentaneamente estamos limitados ao tamanho definido atualmente. CAPÍTULO 5: PARÂMETROS - 44

51 CAPÍTULO 6: OS PRIMEIROS OBJETOS DO LAYOUT Introdução Neste tópico começaremos a estudar como o Report Builder formata o layout de nossos relatórios. Nosso objetivo principal é o entendimento que nos possibilitará interferir no resultado gerado. Para o acompanhamento passo a passo, iniciaremos montando um relatório, porém sem a definição do layout, ou seja, sem o auxílio do Assistente (Wizard). Para este fim criaremos um novo relatório ainda sem nome. Abriremos o editor do Data Model, criaremos uma Query (com a ferramenta adequada), o que causará o aparecimento do diálogo Instrução de Consulta de SQL. SELECT CD_MAT, NM_FUNC, VL_SAL, CD_DEPTO FROM FUNC Preencheremos este diálogo com o comando Select apresentado acima e clicaremos em OK. O Data Model será novamente apresentado já com o objeto gráfico (da consulta) montado. Para completar retorne ao Navegador e salve o relatório indicando o nome de LY01. Nosso estudo começa agora. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 45

52 Quadros de Repetição (Repeating Frames) Inicialmente vamos observar o que foi definido no Data Model : temos uma Query de nome Q1, um grupo de nome G1 e quatro colunas de nomes cd_mat, nm_func, vl_sal e cd_depto. Existe uma relação entre os objetos do Layout e os objetos do Data Model como veremos a seguir: Cada coluna, seja ela do banco de dados, de fórmula, de sumário ou parâmetro, possui um correspondente Field no Layout. Cada Grupo presente no Data Model possui um correspondente Repeating Frame no Layout. Para os objetos do Data Model fornecemos características relativas à obtenção dos dados e armazenamento, como por exemplo o tipo de coluna, o tamanho, tabela de origem, etc. Para os objetos do Layout as propriedades dizem respeito à apresentação da informação como por exemplo a máscara de edição, a cor do objeto, títulos, etc. Vamos, então, abrir o editor do Layout(dê um clique duplo no ícone do Layout no Navegador) para criarmos manualmente nosso relatório. Raciocinemos, então, se no Data Model um Grupo abriga (é pai) de diversas colunas, no Layout, o Repeating Frame será o objeto que realizará esta ação. Na barra de ferramentas vertical (do lado esquerdo) encontramos ferramentas para a criação de diversos objetos, dentre eles uma chamada de Quadro de Repetição (Repeating Frame). Cliquemos o mouse sobre esta ferramenta e façamos um retângulo no espaço de desenho do layout. Criemos, agora, dentro deste quadrado, quatro fields, ou seja clique na ferramenta campo (Field) e crie um retângulo dentro do retângulo relativo ao Repeating Frame. Repita esta operação 4 vezes. O resultado até agora está presente na figura abaixo. Para que o relatório fique pronto para a execução falta apenas fazermos a associação entre cada um dos elementos e o objeto do Data Model correspondente. Portanto, usaremos a tela de propriedades de cada um dos objetos do Layout para estabelecer esta associação. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 46

53 Abra a tela de propriedades do Repeating Frame, estudaremos, inicialmente, apenas algumas das propriedades: Origem (Source) Esta propriedade determina qual o grupo do Data Model que corresponde a este Repeting Frame. Direção de Impressão (Print Direction) Nesta propriedade determinamos de que forma este Repeating Frame se desenvolverá ao longo da página. Máximo de Registros por Página (Maximum Records per Page) Nesta propriedade definimos o número máximo de Repeating Frames por página, ou seja, o número máximo de registros deste grupo em uma determinada página do relatório. Espaçamento Horizontal entre Quadros (Inter-Frame Horizontal) Nesta propriedades definimos o espaço a ser preservado entre um Repeating Frame e outro no sentido horizontal. Espaçamento Vertical entre Quadros (Inter-Frame Vertical) Nesta propriedades definimos o espaço a ser preservado entre um Repeating Frame e outro no sentido vertical. Devemos, portanto, preencher a propriedade Origem com o nome do grupo G1. Repetiremos esta ação para os campos (Fields), com o objetivo de também definir qual a coluna correspondente ao campo. As propriedades iniciais de um campo (Field) são: Origem (Source) esta propriedade relaciona o campo (Field) definido no Layout com um objeto do Data Model, seja ele um objeto criada pelo usuário, um parâmetro de sistema ou um objeto do próprio Report Builder (como por exemplo Data Atual). Tipo de Dados de Origem (Source Datatype) esta propriedade não pode ser alterada, é readonly, e indica qual o tipo de dados do objeto que estamos associando. Esta informação é necessária quando o tipo de dados não foi declarado por nós no Data Model, ou seja, para os objetos do Report Builder. Visível (Visible) - esta propriedade indica se o campo (field) ficará visível no Layout. Esta propriedade será usada quando desejarmos incluir o conteúdo de um objeto (coluna por exemplo) no meio de um texto (por exemplo uma carta). Máscara de Formato (Format Mask) esta propriedade define uma máscara a ser aplicada ao campo (field) a tempo de impressão. Esta propriedade só é válida para objetos numéricos ou datas. Para cada um dos Fields de nosso relatório associaremos as colunas correspondentes, ou seja: F_1 cd_mat F_2 nm_func F_3 cd_depto F_4 vl_sal A execução do relatório apresenta o aspecto da figura ao lado. Observe que o Repeating Frame é impresso também. Os objetos contidos dentro dele ao tempo de definição são formatados cada vez que ele é formatado. Ele é o controle. Como teste, vamos determinar que o número máximo de registros por página é 3 (propriedade do Repeating Frame). Retorne ao Layout, altere esta propriedade e execute novamente o relatório. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 47

54 Para retornar ao Layout você tem duas opções: Fechar o Previsualizador Ativo (Live Previewer) e no Navegador dar um clique duplo no ícone do Layout Model. Na própria tela do Previsualizador Ativo (Live Previewer), na barra de ferramentas horizontal, no canto esquerdo superior, existem três botões: Modelo de Dados (Data Model), Modelo de Layout(Layout Model) e Form de Parâmetros (Parameter Form). Pressione o botão Modelo de Layout(Layout Model) e você navegará para o editor do Layout (veja a marcação do botão na figura acima). Como resultado temos que apenas 3 Repeating Frames foram impressos em cada uma das páginas e, consequentemente, apenas 3 linhas da tabela Func foram apresentadas. Retornemos novamente ao layout e alteremos a propriedade Direção de Impressão (Print Direction). Esta também é uma propriedade do Repeating Frame. Observe que esta propriedade possui quatro opções: Vertical (Down), Horizontal (Across), Vertical/Horizontal (Down/Across) e Horizontal/Vertical (Across/Down). Para que esta propriedade possa apresentar um resultado compreensível, seu Repeating Frame deve ter um tamanho horizontal suficiente para que ao menos dois sejam impressos horizontalmente. No caso do meu desenho o Repeating Frame possui um tamanho um pouco menor que 3 polegadas de largura. Como a minha página está com disponibilidade de até 7,5 polegadas, cabem duas impressões no sentido horizontal. Verifique o seu desenho antes de fazer este teste. Caso seja necessário diminua o tamanho dos campos e do Repeating Frame e aproxime o desenho da margem esquerda e superior do relatório. No caso do exemplo desenvolvido até agora, podemos alterar esta propriedade para o valor Vertical/Horizontal (Down/Across). Isto significa que o Repeating Frame será impresso inicialmente no sentido vertical, quando a página acabar será iniciada a impressão na segunda coluna da mesma página e assim por diante. Antes de iniciarmos a execução devemos retirar a restrição referente ao número de registros por página. Observe o resultado deste teste. Veja o desenvolvimento da impressão: matrículas 10, 20, 30, 50, 60, 70, 90, 100, 110, 130 (impressas verticalmente na primeira coluna). Com o fim da página (no sentido vertical), ocorre o retorno para a impressão da segunda coluna: matrículas 150, 170, 200, etc até o fim da página no sentido vertical. Novamente é feita uma tentativa de montagem de uma próxima coluna, que não cabe mais nesta página (no sentido horizontal). Sendo assim, ocorre a mudança de página. Um novo teste para que esta propriedade fique bem clara para nós. Alteremos novamente a propriedade Direção de Impressão (Print Direction). Vamos escolher desta ver o valor Horizontal/Vertical (Across/Down). Observe agora a diferença de resultado. No sentido horizontal temos as matrículas 10 e 20. Como acabou a página (no sentido horizontal), foi necessária a criação de uma segunda linha com as matrículas 30 e 50. Novamente acabou a página horizontalmente e uma nova linha (vertical) foi adicionada e assim por diante até que página tenha se completado. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 48

55 A figura anterior apresenta a imagem dos Repeating Frames para as quatro opções de desenvolvimento de impressão. As setas presentes na borda do objeto indicam exatamente como se desenvolverá a impressão do objeto. Nosso último teste com este objeto será aumentarmos o espacejamento entre os Repeating Frames a tempo de impressão. Usando na direção de impressão o valor horizontal/vertical, preenchemos o valor da propriedade Espaçamento Horizontal entre Quadros (Inter-Frame Horizontal) com 0.3 (polegadas) e na propriedade Espaçamento Vertical entre Quadros (Inter-Frame Vertical) o valor 0.6 (polegadas). Na execução obtemos como resultado a impressão dos Repeating Frames com um intervalo entre eles tanto na horizontal como na vertical. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 49

56 Campos (Fields) Você observou que o tamanho do desenho que fazemos determina o tamanho do objeto a tempo de impressão e que as características que definimos para os objetos são refletidas na impressão. Para entendermos como o Report Builder monta os objetos no Layout, diminuiremos o tamanho vertical dos campos (fields), atribuiremos máscara para os campos numéricos e trabalharemos com cor. Inicialmente diminuiremos verticalmente o tamanho dos campos e aproximaremos as bordas do Repeating Frame. Observe que na figura acima, diminuímos verticalmente o tamanho dos objetos, do quadro e aumentamos horizontalmente o tamanho do campo F_4 (salário). Isto será necessário para que possamos atribuir a este objeto uma máscara (propriedade máscara de formato format mask), que será LNNNGNN0D00. O valor para formato N no Report Builder corresponde ao valor para formato 9 do Form Builder e do PL/SQL. Antes de executarmos, vamos atribuir nomes adequados aos campos para que possamos identificá-los com mais facilidade. Associe, portanto o nome do objeto do Data Model a que corresponde incluindo um F na frente, ficando desta forma Fcd_mat, Fcd_depto e assim por diante. No Layout os campos, agora serão apresentados com o nome que atribuímos, ficando, portanto, mais fácil de identificarmos o resultado. Para que tenhamos um resultado mais coerente, retire o espaçamento que definimos tanto horizontalmente quanto verticalmente para os Repeating Frames. Execute o relatório e verifique o resultado até aqui. Para que este resultado fique com mais aspecto de relatório devemos retirar a cor dos objetos. Sendo assim, selecione o objeto e utilize na barra de ferramentas vertical o botão Cor de Linha (Line Color). No quadro de cores apresentado, escolha a opção Nenhuma Linha (No Line). Da mesma forma selecione cada objeto (inclusive o Repeating Frame) e com o botão Cor de Preenchimento (Fill Color) escolha a opção Nenhum Preenchimento (No Fill). Na figura acima vemos o resultado desta ação no Layout. Execute a aplicação e veja o que acontece na impressão. Se você desejar que o intervalo entre as linhas seja ainda menor, deverá diminuir ainda mais o tamanho do campo e o espaço entre o campo e o quadro. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 50

57 Boilerplates Nosso próximo objeto de estudo é o boilerplate, ou seja, um objeto que só é apresentado no Layout e tem a finalidade de permitir a montagem gráfica do relatório. Temos dois tipos de boilerplates: os gráficos e o de texto. Os boilerplates gráficos permitirão que desenhemos linhas, retângulos, curvas, e outros objetos de desenho. Poderemos até montar um relatório tipo pré-impresso, com linhas, campos, etc, só que gerado pelo Report Builder. O boilerplate de texto permitirá que coloquemos títulos, identificadores de campos, enfim informações de texto fixas nas páginas do relatório. Em nosso primeiro teste, incluiremos títulos para as colunas. Sendo assim aumentaremos o tamanho dos Repeating Frames e incluiremos títulos imediatamente acima do objeto. Veja a figura a seguir. Execute o relatório e observe o resultado. Como era de se esperar o título foi impresso para cada uma das linhas. Isto ocorre porque incluímos o título dentro do Repeating Frame. Coloquemos, agora, o título do lado de fora para analisarmos as diferenças. Remova o título da parte de dentro e o crie novamente do lado de fora ou arraste-o para fora do Repeating Frame. Para que esta operação tenha sucesso o ícone do cadeado (na barra de ferramentas) deve estar aberto. Veja o resultado na próxima figura. Ao executarmos este relatório verificaremos que apesar do Repeating Frame ter se repetido na horizontal, o boilerplate foi impresso uma única vez sobre o primeiro grupo de registros. Se desejarmos que ele também apareça sobre a segunda coluna, devemos desenhá-lo novamente na posição desejada. Na figura anterior apresentamos esta situação. Tente montar este layout e verifique o resultado na execução. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 51

58 Camadas de Impressão O Editor de Layout é composto de diversas camadas de impressão. Cada vez que desenhamos um objeto ele é incluído em uma diferente camada. Não temos dois objetos presentes na mesma camada. A figura ao lado nos mostra o que acontece quando desenhamos cada um dos objetos no layout. Cada objeto pertence a uma camada diferente. Para que um objeto seja considerado contido em outro, ele não só deve estar dentro dos limite do outro como também deve estar em uma camada acima do outro. Veja o field F_cd_mat na figura frontal (abaixo); ele está contido nos limites de R_1. Na figura lateral (superior) este campo F_cd_mat está à frente de R_1. Neste caso podemos dizer que ele está contido em R_1. Façamos um teste em nossa aplicação. Como primeiro passo removeremos o Repeating Frame criado(r_1). Vamos colorir (usando o botão Cor de Preenchimento Fill Color), agora, os campos de amarelo. Como próximo passo, criaremos um Repeating Frame em torno dos campos (pinte-o de verde). Você observará que o Repeating Frame ficou na frente de todos os campos. Sendo assim os campos não estão contidos neste Repeating Frame. Para testarmos o erro que ocorre a tempo de execução, associe o Repeating Frame ao Grupo (preencha a propriedade Origem Source) e execute a aplicação. O erro recebido indica que a coluna F_cd_mat está com uma freqüência de impressão inferior ao seu grupo. Isto que dizer que existem mais linhas com cd_mat do que a quantidade de linhas a serem impressas. Está sobrando matrícula. Como o campo F_cd_mat não está contido no Repeating Frame R_1, ele só será impresso uma vez, no entanto existem diversos registros com matrículas a serem impressas, o que causa o erro REP1213: O campo F_cd_mat referencia a coluna CD_MAT a uma freqüência abaixo de seu grupo. Para corrigirmos esta situação devemos posicionar o Repeating Frame R_1 atrás dos demais objetos. Utilize a opção Mover para Trás (Move Backward) ou F8, do menu Organizar(Arrange) para que você vá movendo o Repeating Frame para trás passo a passo. Você perceberá que o objeto F_vl_sal será o primeiro a aparecer, em seguida o objeto F_cd_depto e assim por diante. Como cada um está em uma camada diferente, cada vez que o Repeating Frame navega uma camada para trás, um objeto aparece. Se você desejar pode enviar o Repeating Frame para trás de todos em um único comando, com a opção Enviar para Trás (Send to Back) ou F6, do menu Organizar (Arrange). Após a arrumação verificamos no resultado que o Repeating Frame ficou atrás de todos os itens. A execução é bem sucedida nesta situação. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 52

59 Freqüência de Impressão Um bom entendimento de Freqüência de Impressão nos garantirá uma execução sempre bem sucedida do relatório, pois este é um dos pontos mais importantes de nosso estudo. Já verificamos que existe uma ligação bastante significativa entre as camadas de um relatório e a freqüência de impressão. Aprofundaremos um pouco mais nosso estudo neste sentido. A figura ao lado nos mostra nosso relatório contendo os objetos R_1 (Repeating Frame), F_cd_mat (Field) e dois outros objetos chamados de Corpo (Body) e Margem (Margin). Estes últimos são objetos internos do Report Builder e estão presentes em todos os relatórios. Quando um relatório é executado o Report Builder executa os seguintes passos: Monta todos os objetos que estiverem diretamente pendurados na Margem. Monta todos os objetos que estiverem pendurados diretamente no Corpo. No nosso caso o único objeto pendurado diretamente no corpo é o Repeating Frame R_1. Sendo assim, ele monta o primeiro registro (G_1) relativo R_1. Como existem objetos pendurados em R_1, ele monta os objetos pendurados em R_1. Mas existem mais registros a serem impressos, sendo assim ele monta o próximo registro (G_1) relativo a R_1. Como existem objetos pendurados em R_1, ele monta estes objetos. Este último parágrafo se repete enquanto houver registros referentes ao grupo G_1. Observe, então que o objeto R_1, a tempo de execução acontece mais de uma vez, isto é, existe mais de um objeto R_1 na impressão. Tantos quantos forem os registros G_1. Concluímos, então, que para uma determinada página de relatório, o Report Builder imprime: Uma vez todos os objetos que estiverem pendurados na margem. Uma vez todos os objetos que estiverem pendurados no corpo. Se o objeto for do tipo Repeating Frame, ele será gerado tantas vezes quantas couberem na página ou de acordo com os limites que tivermos estabelecido (por exemplo, número máximo por página). Nosso próximo teste será analisar a freqüência de impressão dos boilerplates que adicionamos como cabeçalho de coluna no relatório. Para que nosso relatório ocupe mais de uma página, alteremos a direção de impressão do Repeating Frame para Vertical (Down) e executemos novamente nosso relatório. Quando o relatório for executado, poderemos observar que nos será apresentada a impressão da primeira página (campo Página, na barra de ferramentas superior preenchido com 1). Navegue para a segunda página usando a ferramenta Página Seguinte (Next Page), presente na barra de ferramentas horizontal ao lado (esquerdo) do campo Página. Você observará que o boilerplate não apareceu na segunda página. Por quê? CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 53

60 Selecione um dos boilerplates e abra sua tela de propriedade. Analisemos o grupo Layout Avançado (Advanced Layout). As propriedades Impressão de Objeto Ativada e Impressão de Base Ativada são as responsáveis por este resultado. Impressão de Base Ativada (Base Printing On) nesta propriedade indicamos qual é o objeto que comandará a impressão do objeto atual. Temos duas opções neste caso: o objeto no qual o atual está contido (objeto que contém enclosing object) ou o objeto no qual ele está ancorado (objeto de ancoragem anchoring object). Impressão de Objeto Ativada (Print Object On) nesta propriedade definimos com que freqüência o objeto atual será impresso em relação ao objeto no qual ele está pendurado (contido ou ancorado). Os valores válidos para esta propriedade são: - Todas as Páginas (All) esta opção indica que o objeto atual deve ser montado em todas as páginas que o objeto no qual ele está pendurado for impresso. - Tudo, Exceto a Primeira Página (All But First) esta opção indica que o objeto atual deve ser montado em todas as páginas que o objeto no qual ele está pendurado for impresso, exceto na primeira página. - Tudo, Exceto a Última Página (All But Last) esta opção indica que o objeto atual deve ser montado em todas as páginas que o objeto no qual ele está pendurado for impresso, exceto na última. - Default esta opção indica que o Report Builder deverá determinar a freqüência de impressão mais adequada para o objeto. - Primeira Página (First) esta opção indica que o objeto atual deve ser montado apenas na primeira página em que o objeto no qual ele está pendurado for impresso. - Última Página (Last) esta opção indica que o objeto atual deve ser montado apenas na última página em que o objeto no qual ele está pendurado for impresso. Nosso Boilerplate, portanto está pendurado no objeto Corpo, sua freqüência de impressão está preenchida com First (Primeira Página). Sendo assim ele será impresso apenas na primeira página em que o objeto Corpo for impresso. Alteremos, então, sua freqüência para Todas as Páginas (All) em todos os quatro boilerplates. No resultado obtido na execução do relatório veremos que os textos foram montados na segunda página do relatório, como desejávamos. Antes de estudarmos outro aspecto do Report Builder, vamos verificar o valor das propriedades estudadas para os Fields F_cd_mat, F_nm_func, etc. Este grupo de propriedades Layout Avançado (Advanced Layout) existe para todos os objetos do Layout. Você descobrirá que a propriedade Impressão de Objeto Ativada (Print Object On) também está preenchida com Primeira Página (First). Como é que este objeto é impresso, então, tantas vezes? O objeto no qual ele está contido é um Repeating Frame, sendo assim, quem é impresso diversas vezes em uma determinada página é o Repeating Frame. Portanto os objetos que estão dentro dele somente precisam ser impressos uma vez (First) a cada vez que o Repeating Frame for impresso. Entendeu agora? Este assunto ainda não acabou, continuaremos a estudá-lo juntamente com outros assuntos. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 54

61 Elasticidade Montaremos, agora, um relatório com um nível de quebra. Salve o relatório atual com o nome de LY02 e retorne ao Editor do Data Model. Criaremos um grupo de quebra contendo a coluna cd_depto. Clique sobre ela e arraste-a para fora e para cima do grupo G_1. Como resultado temos um grupo G_1 contendo três colunas (cd_mat, nm_func e vl_sal), um grupo G_2 contendo uma coluna(cd_depto). Este resultado deve ser reproduzido no Layout, conforme a figura a seguir. Definimos um novo Repeating Frame, associamos o grupo G_2 e enviamos este Repeating Frame para trás. O Field F_cd_depto saiu do Repeating Frame R_1 e ficou pendurado apenas no Repeating Frame F_2, da mesma forma que no Data Model ele saiu do grupo G_1 e ingressou no grupo G_2. A execução deste relatório, no entanto, será uma surpresa. Na figura ao lado, escolhemos propositalmente a página 15 da execução, pois é uma das poucas páginas em que encontramos mais de uma impressão dos objetos. Analisemos, então, o que temos aqui. Se você consulta sua base de dados verificará que a funcionária Marta está alocada no departamento D21. O único funcionário do departamento E01 é o João(matrícula 90) e que a Eliane é um dos funcionário do departamento E11. O que observamos então, é que nesta página cada um dos registros pertence a departamento diferentes, ou seja, formatamos o Repeating Frame R_2 três vezes (são 3 R_2 presentes nesta página). Ao navegarmos para a página 16, veremos a presença solitária do funcionário João (matrícula 290), que também pertence ao departamento E11 (o mesmo da Eliane). Por que, então este funcionário não foi impresso na mesma página do João? Retorne ao seu layout e dê uma boa olhada em seu desenho. Você sabe que o Repeating Frame R_1 será impresso diversas vezes (uma para cada registro). Quando ele estava sozinho diretamente pendurado no Corpo, ele era impresso tantas vezes quantas coubessem em uma página. Agora ele está pendurado no Repeating Frame. Logo, ele está sendo impresso tantas vezes quantas cabem no Repeating Frame. Como fizemos um desenho muito pequeno, só cabe uma impressão. Sendo assim, o Report Builder quebra de página, pois não consegue montar uma segunda impressão. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 55

62 Podemos resolver este problema de duas formas: Na primeira esticaremos o Repeating Frame R_2 verticalmente até o fim do Corpo. Execute desta forma e verifique o resultado. Nesta forma conseguimos imprimir diversos funcionários na mesma página, porém quando um determinado departamento possui poucos funcionários, o Repeating Frame continua ocupando todo o espaço do Corpo, impedindo que um novo Repeating Frame seja gerado na mesma página. Nossa segunda solução não requer que estiquemos o Repeating Frame. Alteraremos, no entanto, algumas propriedades. Abra a tela de propriedades focando o grupo Layout Geral, o qual possui duas propriedades de nosso interesse atual: Elasticidade Vertical (Vertical Elasticity) e Elasticidade Horizontal (Horizontal Elasticity). Estas propriedades determinam qual o comportamento do objeto quando seu conteúdo é maior (no sentido vertical ou no sentido horizontal) que seu desenho no Layout. Os valores válidos para estas propriedades são: Fixo (Fixed) esta opção indica que o objeto não se expande, desta forma seu conteúdo será impresso apenas no espaço destinado a ele. Para Fields, quando o conteúdo não cabe aparecem *** (asteriscos), indicando que não foi possível a impressão do conteúdo. Para Repeating Frames, o Report Builder toma outra atitude, quebrando de página e tentando continuar a impressão em uma próxima página. Expandir (Expand) esta opção indica que o objeto é expansível, ou seja, se o conteúdo for maior que o desenho, o objeto crescerá para acomodar todo o conteúdo. Se, ao contrário, o conteúdo for menor que o desenho, no mínimo, o espaço do desenho será ocupado pelo objeto. Contrato (Contract) esta opção indica que o objeto é contrátil, ou seja, se o conteúdo for maior que o desenho, somente será utilizado o espaço do desenho, ou seja terá comportamento similar ao fixo. Se, ao contrário, o conteúdo for menor que o desenho, o espaço ocupado pelo objeto será apenas o suficiente para a impressão de seu conteúdo. Variável (Variable) esta opção indica que o objeto é variável, ou seja se o conteúdo for maior que o desenho, o objeto crescerá para acomodar todo o conteúdo. Se, ao contrário, o conteúdo for menor que o desenho, o espaço ocupado pelo objeto será apenas o suficiente para a impressão de seu conteúdo. No nosso caso, desejamos que o Repeating Frame R_2 cresça no sentido vertical, portanto, o tornaremos expansível (ou variável) no sentido vertical. Execute o relatório e verifique o resultado. Retorne ao Layout e observe o que aconteceu com seu Repeating Frame. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 56

63 A figura anterior nos mostra o resultado gráfico de modificarmos a elasticidade no sentido vertical para o Repeating Frame R_2. Para cada uma das opções um indicador é adicionado ao Repeating Frame. Nosso teste, porém, ainda não acabou. Analisaremos apenas mais uma situação antes dos exercícios. Limite a quantidade de registros do Repeating Frame R_1 (o de dentro) a três por página. Execute novamente seu relatório e passe para a página 2. A figura acima nos apresenta esta página (2). Os registros de matrícula 21 e 4 pertencem ao departamento A00, no entanto, o código do departamento não foi impresso nesta página. Por quê? Voltamos à freqüência de impressão. O Repeating Frame R_2 foi formatado na primeira página para o departamento A00, quando ocorreu a mudança de página (por causa do limite que impusemos), o que foi impresso na segunda página foi a continuação do Repeating Frame R_2, ainda do departamento A00. Como a freqüência de impressão do objeto F_cd_depto é Primeira Página (First) ele não foi impresso na segunda. Quando mudamos de departamento, podemos dizer que também mudamos de Repeating Frame. É um outro Repeating Frame R_2 que está sendo impresso (uma outra instância deste objeto), por isso, quando este novo objeto é impresso o código do departamento é formatado, pois é a primeira impressão deste objeto (é a primeira página para este objeto). Nos exercícios você vai se deparar com diversas situações dessa. Estude para realizá-los com facilidade. CAPÍTULO 6: OS PRIMEIROS PARÂMETROS DO LAYOUT - 57

64 CAPÍTULO 7: O EDITOR DO LAYOUT MODEL A Janela do Editor de Layout O Editor de Layout possui os seguintes componentes: WORKSPACE É a área de janela do Layout, ou seja, a área disponível para desenho. Seu tamanho é independente do tamanho atual da janela, isto é, o Workspace pode ser maior ou menor que a área da janela. Quando o Workspace é maior que a janela, podemos rolar a janela para ver outras partes do Workspace. O tamanho desta área de desenho é definida dentro das propriedades do relatório atual, ou seja, nas propriedades do módulo relatório que estamos trabalhando (o LY02). Esta definição será vista quando estudarmos as propriedades específicas do módulo. BARRA DE TÍTULO (TITLE BAR) É uma barra de informações que aparece na parte superior da janela, com: <produto> [<modulo>: <editor>], onde: <produto> - nome da ferramenta Oracle, neste caso Report Builder. <modulo> - nome do módulo ativo (LY02). <editor> - nome do editor ativo, este caso Editor de Relatórios Modelo de Layout, ou seja, o editor do Layout. RÉGUAS (RULERS) Uma régua horizontal (em cima) e uma vertical (lateral esquerda). Esta régua pode ser apresentada em unidades diferentes (ex.: centímetros, caracteres, pés, etc.), de acordo com a unidade em vigor no relatório. GUIAS Podem ser selecionadas guias (tracejadas) horizontais e verticais para referência. Para selecionarmos uma guia basta que posicionemos o mouse sobre uma das réguas, o pressionemos e arrastemos até a posição desejada para apresentação da guia. GRID Existe uma grade dentro do Workspace para auxílio no posicionamento de objetos. Se desejarmos visualizar esta grade devemos usar o menu Visualizar (View), opção Grade (Grid). Aparecem uns pontinhos na área de desenho com um determinado espacejamento vertical e horizontal. Podemos alterar a quantidade de pontos se utilizarmos a opção Réguas (Rulers) do submenu Opções de Layout (Layout Options) do Menu Formatar (Format). O diálogo da figura ao lado é apresentado. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 58

65 Neste diálogo podemos alterar a unidade de apresentação das réguas, a quantidade de linhas de grade (de quantos em quantos pontos da unidade escolhida será definida uma grade grid) e a quantidade de pontos dentro da grade para alinhamento (se usarmos a opção de alinhamento pela grade). Por exemplo, suponhamos de tenhamos definido que a grade será impressa a cada polegada. Se definirmos que a quantidade de pontos de alinhamento é 5, na verdade estaremos dizendo a grade será criada a cada 0.2 polegadas, porém somente será mostrada visualmente a cada 1 polegada. Desta forma para efeito de alinhamento existirão 5 linhas de grade por polegada, o que permitirá que um determinado objeto seja posicionado em 0.2, 0.4, 0.6, etc. Visualmente, no entanto, o objeto não estará sobre uma das linhas de grade (que só ocorrem a cada polegada). LINHA INDICATIVA DE SITUAÇÃO (STATUS LINE) A linha de status no pé da página do layout mostra as seguintes informações: Posição absoluta do mouse. Distância de afastamento do mouse (quando criando / movendo objetos). Ângulo de rotação (quando em movimento). Nível de zoom. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 59

66 As Barras de Ferramentas Ao olharmos para a tela do Layout Editor observamos a presença de duas barras de Ferramentas Superiores e uma Vertical, na lateral esquerda. Começaremos nosso estudo por elas. A BARRA DE FERRAMENTAS HORIZONTAL SUPERIOR Observamos que o primeiro conjunto de botões presentes na barra de ferramentas horizontal superior permitirá que naveguemos para os demais editores existentes no Report Builder(passe o mouse vagarosamente sobre os botões da esquerda para a direita e acompanhe): Previsualizador Ativo (Live Previewer), Modelo de Dados (Data Model) e Form de Parâmetros (Parameter Form). Quando pressionamos cada um destes botões fechamos o editor atual e abrimos um outro associado a outra parte do Report Builder, respectivamente: execução, modelo de dados e tela para recepção dos parâmetros. O próximo conjunto já é nosso conhecido, pois é o mesmo que se encontra presente no Navegador de Objetos: Abrir (abrir um relatório existente), Salvar (gravar/salvar o relatório atual), Executar (executar o relatório atual direcionando-o para o Previsualizador Ativo), Imprimir (executar o relatório atual direcionando-o para a impressora default do sistema), Recortar / Copiar / Colar (estas ações recortam, copiam ou colam objetos no layout). Os dois próximos botões ampliam ou reduzem o nível de detalhamento do Layout, ou seja, o nível de Zoom. Seus nomes são, respectivamente: Ampliar(Magnify) e Reduzir (Reduce). Estas ferramentas são muito úteis quando estamos desenhando e precisamos colocar os objetos muito próximos uns dos outros sem que se sobreponham. A seguir encontramos os botões Inserir Data e Hora (Insert Date and Time) e Inserir Número de Página (Insert Page Number). Estes botões incluem em nosso relatório Fields que têm como origem objetos internos do Report Builder, ou seja, Data Atual e Número de Página. Uma vez que estes objetos são incluídos na margem e não no Corpo estudaremos seu uso mais tarde. Os próximos três botões acionam os três Assistentes (Wizards) disponibilizados pelo Report Builder: Assistente de Relatórios, Assistente de Gráficos (este assistente aciona o Oracle Graphics para o desenvolvimento de um gráfico com os dados oriundos do modelo de dados, não será visto neste material) e Assistente de Web (este assistente nos auxilia a gerar um relatório direcionado para Web em formato HTML ou um relatório em formato PDF). Testaremos esta opção posteriormente neste material. Os quatro botões a seguir permitem a navegação para as partes constitutivas de um relatório, ou seja seção Cabeçalho, seção Principal e seção de Trailer e Editar Margem (Margin) para cada uma das seções. Estes botões requerem um estudo mais específico e voltaremos a eles em seguida. O último botão da barra de ferramentas superior aciona a Ajuda do Editor. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 60

67 A BARRA DE FERRAMENTAS HORIZONTAL INFERIOR (BARRA DE ESTILO) A segunda barra de ferramentas horizontal apresenta diversas ações associadas à formatação dos objetos do layout. Basta que selecionemos um ou mais objetos, cliquemos no efeito (ou estilo) desejado e este é aplicado ao objeto selecionado. As duas primeiras listas determinam o tipo de letra e tamanho. Para que esta ação tenha efeito devemos selecionar (clicar o mouse sobre o objeto) o campo ou objeto de texto (boilerplate, por exemplo) e modificar sua letra e tamanho. Selecione simultaneamente os fields F_cd_mat, F_nm_func, F_vl_sal e F_cd_depto e seus boilerplates correspondentes troque a letra para Arial Black e o tamanho para 18. Em seguida temos os botões que afetam as características das letras B(Bold Negrito), I (Italic Itálico), U(Underline Sublinhado). Coloque os boilerplates Mat e Depto em negrito. Os boilerplates Mat, Nome e Salário em itálico e os fields sublinhados. O grupo de botões a seguir realiza alinhamento interno dos objetos de layout, ou seja, o conteúdo de um determinado objeto pode ser alinhado à esquerda, centralizado, à direita ou justificado (ajuste rente). Como teste, alinharemos os campos F_vl_sal e Fcd_mat pela direita, o campo F_cd_depto pelo centro e o campo F_nm_func pela esquerda. Os próximos 5 botões modificam a propriedade Máscara de Formato (Format Mask) do field selecionado a fim de incluir indicação de moeda, percentual, vírgulas, adicionar ou retirar casas decimais. Selecione um field, por exemplo, F_vl_sal, clique em um destes botões, acione a tela de propriedades e veja o que foi colocado como máscara para o objeto. O próximo botão tem a finalidade de ativar ou desativar o Modo de Restrição (Confine Mode). Isto significa que se o cadeado (ícone do botão) estiver fechado não conseguimos arrastar um determinado objeto para fora do objeto que o contém. Quando o cadeado está aberto esta operação é possível. A ação de arrastar um determinado objeto não troca o objeto de layer (ou seja de camada). Experimente clicar e arrastar o objeto F_vl_sal de dentro do Repeating Frame R_1 com o cadeado fechado. Abra o cadeado e tente novamente. O penúltimo botão desta barra de ferramentas tem a finalidade de ativar ou desativar o Modo Flex (Flex Mode). Isto significa que quando arrastamos um objeto e o encostamos na borda do objeto que o contém este cresce. Imagine que desejássemos incluir, agora, uma nova coluna em nosso relatório, por exemplo, o cargo do funcionário. Além de alterarmos a query para incluir a nova coluna, devemos incluí-lo no Layout, dentro do Repeating Frame R_1. Sendo assim, devemos aumentar o Repeating Frame R_2 (onde R_1 está contido), aumentar o Repeating Frame R_1 e estabelecer o posicionamento do Field no local desejado. Se ativarmos o modo Flex, poderemos, simplesmente, arrastar o Field F_vl_sal para a direita, a fim de que os dois Repeating Frames cresçam simultaneamente. Quando o tamanho for aquele desejado, desativamos o modo Flex e movimentamos o field F_vl_sal para a posição desejada. O último botão desta barra tem a finalidade de selecionar o objeto Pai do objeto que tivermos selecionado atualmente. Aparentemente esta opção é pouco útil, pois podemos selecionar diretamente o objeto pai. Lembre-se, porém, que num relatório real teremos dezenas de Fields, diversos Repeating Frames e todos bastante próximos uns dos outros. Às vezes fica muito difícil saber onde um determinado objeto está contido. Esta opção é bastante valiosa. Quando você estiver trabalhando com o Report Builder no desenvolvimento de um relatório real saberá porque. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 61

68 A BARRA DE FERRAMENTAS VERTICAL OU PALETA DE FERRAMENTAS À esquerda da janela do editor encontramos a barra de ferramentas vertical ou Paleta de Ferramentas com um conjunto de botões para efetuar diversas ações. Subdividimos estes botões em grupos comuns. O primeiro grupo contém botões que se aplicam a diversos tipos de objetos, são gerais para os diversos elementos presentes no editor de Layout: Selecionar (Select) - seleciona um objeto ou grupo de objetos. Basta que efetuemos um clique sobre o objeto desejado. Seleção de Quadro (Frame Select) Quando selecionamos esta ferramenta e clicamos sobre um objeto, faz com que este objeto e todos que estiverem contidos dentro dele sejam selecionados simultaneamente. Útil para Quadros de Repetição (Repeating Frames) e Quadros (Frames). Girar (Rotate) - gira os objetos (gráficos, itens não podem ser rodados). Para girarmos um elemento devemos selecioná-lo, clicar na ferramenta e, com o mouse, pressionar um dos indicadores de tamanho (presentes nos cantos do objeto) e sem soltar o botão esquerdo do mouse rodar. Reformar (Reshape) - permite que se modifique um objeto (gráfico) selecionado (ex.: ângulo de um arco). Para efetuarmos um teste com esta ferramenta, devemos criar um objeto do tipo Arco, selecione-o na paleta de ferramentas e faça um arco. Com este objeto selecionado pressione o botão Reformar. Você perceberá que apenas dois pontos ficam indicados no elemento. Utilize o mouse para arrastar um destes pontos e modificar o ângulo do arco. Ampliar (Magnify) - aumenta ou reduz a apresentação do Layout (fator - 2x), isto é, zoom. Para obtermos este efeito devemos clicar sobre o botão e em seguida sobre o Layout. O efeito inverso é obtido com os mesmos movimentos, porém, a tecla Ctrl (ou Shift) deve esta pressionada simultaneamente. O segundo grupo de botões é composto de ferramentas gráficas, ou seja, ferramentas para a criação de elementos gráficos, também chamados de boilerplates gráficos. Neste grupo se encontram as ferramentas: Linha (Line) - cria objetos lineares (linha). Retângulo Arredondado (Rounded Rectangle) - cria retângulos com as bordas arredondadas. Retângulo (Rectangle) - cria retângulos. Elipse (Elipse) - cria objetos ovais. Arco (Arc) - cria objetos em forma de arco. Polígono (Polygon) - cria polígonos. Polilinha(Polyline) - cria linhas quebradas. Mão Livre (Freehand) - cria desenhos livres (linhas curvas). Texto (Boilerplate Text) - cria textos. O terceiro grupo cria objetos. Nosso único cuidado é não esquecer de associar cada um dos objetos criados ao correspondente no Data Model quando se tratar de Field ou Repeating Frame. Quadro (Frame) cria um objeto do tipo Frame. Quadro de Repetição (Repeating Frame) cria um objeto do tipo Repeating Frame. Campo (Field) cria um objeto do tipo Field. Arquivo de Ligação (Link File) cria um objeto do tipo Link File. Gráfico (Chart) - cria um objeto do tipo gráfico(chart) desenhado no Oracle Graphics. Botão (Button) - cria objetos do tipo botão (Button). Âncora (Anchor) cria um objeto do tipo âncora para ligar dois outros objetos. Objeto OLE (OLE2 Object) - cria um item do tipo OLE2 para interface com outras aplicações do ambiente Windows. Layout Default Adicional (Additional Default Layout ) esta ferramenta aciona o Assistente de Relatório a fim de determinar um layout para a região que viermos a delimitar, não afetando o layout já construído. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 62

69 O último grupo de botões contém o que chamamos de paleta de atributos visuais, pois os botões presentes nesta paleta têm a finalidade de atribuir cor aos objetos (fields e boilerplates). A paleta de atributos visuais contém os seguintes elementos: Caixa de Atributos (Attributes Box) - Reflete os atributos definidos para o objeto selecionado. Quando um elemento é selecionado a Caixa de Atributos mostra a cor de borda, a cor de preenchimento e a cor de letra do objeto. Quando nenhum objeto estiver selecionado, ela mostra os atributos atualmente em uso, ou seja, qualquer objeto criado adquirirá estes atributos. Cor de Preenchimento (Fill Color) - Indica as características de preenchimento do objeto. Possui as seguintes opções: A) Um conjunto de cores - o objeto terá esta cor de preenchimento. B) Nenhum Preenchimento (No Fill) - o objeto será transparente C) Padrões (Patterns) - exibe a janela de textura quando desejamos que o objeto possua 2 cores de preenchimento simultaneamente (Foreground Color e Background Color). D) Tirar Paleta (Tear Off Palette) - fixa a janela de cores para movimentação. Cor de Linha (Line Color) - Indica as características da linha que envolve o objeto (borda). Pode ser preenchido com um dos seguintes valores: A) Uma cor do conjunto - a linha terá esta cor de preenchimento. B) Nenhuma Linha (No line) - o objeto não terá borda visível. C) Tirar Paleta (Tear Off Palette) - fixa a janela de cores para movimentação. Cor de Texto (Text Color) - Indica a cor do texto. Podemos escolher uma das opções a seguir: A) Uma cor do conjunto - o texto terá a cor selecionada. B) Tirar Paleta (Tear off palette) - fixa a janela de cores para movimentação. NOTA A informação de cor de cada objeto é armazenada com um índice para localização de cor na paleta. Se alterarmos a paleta como conseqüência, teremos a modificação involuntária da cor do objeto. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 63

70 Manipulando Objetos no Editor de Layout Neste tópico veremos, passo a passo, as etapas necessárias para efetuarmos diversas ações sobre os objetos usando, diretamente, o editor de Layout. CRIANDO OBJETOS Para criarmos um novo objeto, devemos cumprir os seguintes passos: Na paleta de ferramentas, selecionar a ferramenta para o tipo de objeto que desejamos criar. Posicionar o cursor área de desenho onde desejamos que o canto esquerdo superior do objeto seja posicionado. Pressionar e arrastar o mouse até o desenho atingir o tamanho desejado. MOVER OBJETOS Para mover um objeto, usamos o mouse. Esta opção irá alterar o posicionamento do objeto na área de desenho e, possivelmente, sua freqüência de impressão se for retirado de dentro do objeto onde está contido atualmente. REDIMENSIONANDO UM OBJETO O redimensionamento individual de um objeto também é feito com o mouse. Basta de cliquemos sobre o objeto para que sejam mostrados pequenos quadrados sobre a borda do objeto. Para modificar seu tamanho devemos clicar sobre um destes quadrados e arrastar o mouse na direção desejada. Para aumentar, em direção à parte externa do objeto e para diminuir em direção à parte interna do objeto. REDIMENSIONANDO DIVERSOS OBJETOS O dimensionamento de um objeto em relação a outro pode ser feito com a opção Dimensionar Objetos (Size Objects) do menu Organizar (Arrange). Neste diálogo poderemos dimensionar os objetos selecionados pelo maior, pelo menor, pela média ou atribuir um valor específico. Este valor pode ser fornecido nas unidades: polegadas, centímetros, pontos ou caracteres. Posteriormente, podemos reutilizar as opções definidas sem necessidade de reabrir o diálogo usando a opção Repetir Dimensionamento (Repeat Sizing) do mesmo menu Organizar (Arrange). ALINHANDO OBJETOS O alinhamento pode ser feito em relação à grade (grid) ou um objeto em relação ao outro. Para tal, devemos escolher a opção Alinhar Objetos (Align Objects) no menu Organizar (Arrange). As opções de alinhamento dependem da direção horizontal ou vertical. Horizontalmente temos: alinhar à esquerda, alinhar à direita, centralizar, distribuir (espaços entre objetos horizontalmente iguais) e pilha (objetos colados lateralmente uns nos outros). Verticalmente temos: alinha no topo, alinhar na base, centralizar, distribuir (espaços entre objetos verticalmente iguais) e pilha (objetos colados lateralmente uns nos outros). O alinhamento também pode ser repetido com a opção Repetir Alinhamento (Repeat Alignment) do menu Organizar (Arrange). CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 64

71 OBTER AS PROPRIEDADES DE UM OBJETO As propriedades podem ser obtidas de 3 formas diferentes: Efetuando-se um duplo clique sobre o objeto. Usando-se o botão direito do mouse e escolhendo-se a opção paleta de propriedades. Selecionando-se o objeto com o mouse e escolhendo a opção paleta de propriedades do menu ferramentas (f4). Manipulando Boilerplates no Editor de Layout BOILERPLATE DE TEXTO Para criar um Boilerplate de Texto, devemos: Selecionar a ferramenta Texto (Text) na Paleta de Ferramentas. Posicionar e pressionar o mouse no local que desejamos escrever o texto. Digitar o texto desejado. Cancelar o modo texto, pressionando o mouse fora do espaço do texto. Para desistir da criação pressione a tecla Esc. Para editar um texto já existente: Selecionar a ferramenta Texto (Text) na Paleta de Ferramentas. Posicionar e pressionar o mouse sobre o texto que desejamos alterar. Editar o texto. Pressionar o mouse fora do espaço do texto. BOILERPLATE GRÁFICO Para adicionarmos um boilerplate gráfico a uma Canvas, usamos as ferramentas adequadas da paleta de ferramentas. O modo de criação é semelhante ao visto anteriormente para Boilerplate de Texto, Items, etc. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 65

72 Ações Comuns aos Objetos de Layout As ações presentes no menu Formatar são comuns a vários objetos do Layout, como veremos a seguir. ATRIBUINDO FONTE Para modificarmos a fonte de um elemento qualquer, devemos selecioná-lo e escolher a opção Fonte (Font) no menu Formatar. Neste diálogo podemos determinar a fonte, estilo de letra, tamanho e efeitos para o item ou boilerplate selecionado. Observe que algumas destas opções se acham presentes na Barra de Ferramentas Horizontal Inferior. MODIFICANDO A LINHA Ainda no menu Formatar (Format), encontramos cinco opções para customização de linha: Largura da Linha (Line Width) Apresenta um conjunto de opções de espessuras de linha. Bevel (Bevel) Apresenta um conjunto de opções relevo para linha. Traço (Dash) Apresenta um conjunto de tipos de linhas (tracejado, pontilhado, contínua, etc). Seta (Arrow) Apresenta opções para inclusão de setas nas linhas. Borda Apresenta a possibilidade de apresentarmos ou escondermos qualquer um dos quatro lados da borda de um elemento. ALINHAMENTO E ESPACEJAMENTO O alinhamento e espacejamento dos textos dos itens pode ser feito com as opções Espacejamento de Texto (Spacing) e Justificar (Alignment). O espacejamento diz respeito ao espaço interno entre linhas de um objeto. Facilmente visível quando um boilerplate de texto ocupa mais de uma linha. A justificação está relacionada ao alinhamento horizontal do conteúdo dentro de um determinado objeto. Esta opção também se encontra presente na barra de ferramentas horizontal (Estilo). SELEÇÃO DE UM OU VÁRIOS OBJETOS Para manipular objetos (redimensionar, cortar, copiar, mover, colar, etc.), devemos inicialmente selecionálos. Para isto usamos as opções SELECT da paleta de ferramentas. A seleção de um único elemento é feita quando clicamos sobre ele. A seleção de diversos elementos pode ser feita de duas maneiras: Clicando-se sobre os diversos elementos, mas mantendo a tecla Ctrl pressionada. Desenhando-se um retângulo (apenas com a ferramenta Select) em torno de todos os elementos desejados. OPERAÇÕES As seguintes operações podem ser feitas com objetos (fields e boilerplates): Movimentação pode ser feita diretamente com o cursor. Redimensionamento pode ser feito diretamente com o cursor. Recorte - após a seleção, devemos escolher a opção Recortar (Cut) ou Copiar (Copy) do menu Editar (Edit). Colagem - selecionar a opção Colar (Paste) do menu Editar (Edit). Exclusão - usar a opção Limpar (Clear) do menu Editar (Edit )ou apertar a tecla Delete. Duplicação - após a seleção, usar a opção Duplicar (Duplicate) do menu Editar (Edit). CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 66

73 GRUPANDO OBJETOS No menu Organizar (Arrange) encontramos as opções: Agrupar (Group) / Desagrupar (Ungroup) - Estas opções permitem que montemos ou desmontemos um grupamento formado de dois ou mais objetos. O grupamento é um auxílio que o Report Builder proporciona para que, após o desenho (Layout) do relatório, estes objetos possam sempre ter o mesmo posicionamento perante outros objetos, ou seja, quando movemos um objeto movemos, na verdade, o grupo ficando o objeto em si, com o mesmo tamanho e alinhamento anteriores. Quando grupamos objetos, o Report Builder os tratará como se fossem um único objeto. Agrupar Operações (Group Operations) - São operações realizadas sobre grupamentos, tais como: a) Selecionar Pai (Select Parent) - marca o grupo pai, ou seja, o envoltório. b) Selecionar Filhos (Select Children) - marca todos os objetos pertencentes ao grupo. c) Incluir no Grupo (Add To Group) - adiciona um objeto ao grupo. d) Remover do Grupo (Remove From Group) - retira um objeto do grupo. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 67

74 Navegando pelas diversas partes de um relatório Um relatório é composto de três partes: Cabeçalho (Header), Principal e Trailer (Trailer). Na barra de ferramentas horizontal superior encontramos os botões que permitem a navegação para cada uma das partes do relatório: Principal é a parte onde desenvolvemos o layout principal do relatório. Cabeçalho (Header) - capa inicial do relatório. Impresso somente uma vez no início do relatório. Trailer - capa final do relatório. Impresso somente uma vez no fim do relatório. Na figura anterior, apesar do letreiro indicar Seção Cabeçalho, a seção selecionada é a Principal. O editor de layout só apresenta uma parte do relatório de cada vez. Quando escolhemos a seção cabeçalho, principal ou trailer, estamos determinando qual delas desejamos que esteja ativa para desenharmos. Para cada uma delas podemos escolher o desenvolvimento no corpo ou na margem. OBS: A maioria dos desenhos é feita na seção Principal do relatório. A figura ao lado nos mostra como as diversas partes do relatório são montadas. A seção principal é apresentada subdividida em margem e corpo. Inicialmente é montada a seção cabeçalho. Apenas uma vez no início do relatório. Isto não quer dizer que não possam ocupar mais de uma página. Indica apenas que sua montagem só é realizada uma vez. Funciona como uma capa para o relatório. É muito comum utilizarmos o Cabeçalho para a impressão de destinatário. Em seguida ocorre a montagem da seção principal. Esta seção é formatada tantas vezes quantas forem necessárias para o desenvolvimento de todos os Repeating Frames e Fields definidos. Observe pelo desenho da figura que a margem não é exatamente uma margem como imaginamos e sim uma camada (layer) montado antes do corpo. O corpo é montado sobre esta margem. Podemos utilizar a margem para a montagem de objetos que se repetirão em todas as páginas como por exemplo uma marca d água para o papel, numeração de página, título, data, título do relatório, etc. Podemos diminuir o tamanho do corpo para que ele fique menor que as bordas da margem para que possamos desenhar objetos na margem que não sejam recobertos pelo corpo. Na figura ao lado visualizamos a margem e o corpo. Na margem definimos diversos objetos que serão impressos em todas as páginas, independente do que estiver sendo desenvolvido no corpo. O objeto amarelo criado no centro da margem funciona como uma marca d água, ou seja, os objetos presentes no corpo são formatados por cima dele. Os demais objetos definidos na margem aparecem em todas as páginas sem sobreposição pois diminuímos o tamanho do corpo para que ficasse menor que a margem, sobrando uma borda em torno de todo o corpo para definição de objetos constantes. A última parte do relatório é o Trailer, que é formatado uma única vez ao fim do relatório. Também poderá ocupar mais de uma página. Como exemplificação de margem e corpo e simultaneamente testando campos de paginação e de data, navegaremos para a margem do relatório. Observamos que quando navegamos para a margem continuamos a visualizar o corpo, porém não conseguimos selecionar nenhum dos objetos pertencentes a ele. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 68

75 MÚLTIPLOS LAYOUTS O Report Builder 6i nos possibilita a definição de múltiplos layouts definidos no mesmo relatório, cada um dos quais com formatação própria de saída, layout de página e orientação diferenciados. Poderemos definir até 3 seções diferentes, cada uma das quais com Corpo e Margem. Abra um relatório qualquer e, no Navegador, expanda o nó Layout Model. Você observará a presença de três seções Cabeçalho, Principal e Trailer. Aparentemente não encontramos diferença com relação à versão anterior, no entanto, façamos a expansão de uma destas seções (por exemplo Seção Cabeçalho) e encontraremos dois nós Corpo e Margem. Para compatibilidade com versões anteriores os nomes das seções foram, praticamente, mantidos (anteriomente tínhamos Cabeçalho Header, Corpo Body e Trailer), porém sua amplitude de capacidade foi implementada. Podemos criar diferentes layout em cada uma das seções com objetos vindos das mesmas queries ou de queries diferentes do Data Model. São áreas independentes. Em versões futuras da ferramenta, há a previsão de adição ou remoção de seções. Se desejarmos, no entanto, poderemos continuar utilizando as seções da mesma forma que usávamos na versão anterior. Por default o Assistente de Relatório desenvolve o layout na seção Principal, no entanto, podemos utilizar o próprio Assistente para o desenvolvimento de layouts nas outras seções, bastando que no Editor de Layout façamos a navegação para a seção desejada. Criemos, então, um relatório bem simples que selecione as colunas cd_mat, nm_func e nr_cargo da tabela Func e calcule os totais: Max de nr_cargo, Min de nr_cargo e Count de cd_mat. Como título para este relatório, escolheremos Seção Principal, formato Form, gabarito Confidential Background e título Seção Principal. Quando o relatório tiver sido montado, abriremos o Layout Model. Observe que na barra de ferramentas superior, os botões que nos permitiam a navegação para o Header, Trailer ou Margin ainda existem, porém estão organizados de forma diferente. Temos um grupo com os três botões indicativos da Seção: Cabeçalho, Principal e Trailer e, em separado, um outro botão indicativo da Margem (que se aplica a cada uma das seções). Façamos a navegação para a Seção Cabeçalho e recorramos ao Assistente de Relatório novamente, agora escolhendo relatório com formato tabular, gabarito Corporate 1 e título Seção Cabeçalho. Navegue novamente para o Layout Model e verifique o resultado desta montagem. Execute, em seguida, este relatório e observe os dois resultados produzidos. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 69

76 INCLUINDO DATA / HORA E NUMERAÇÃO DE PÁGINA Utilizaremos as ferramentas da barra de ferramentas horizontal para a criação de data / hora e numeração de página. A figura ao lado mostra o diálogo apresentado quando clicamos sobre a ferramenta Inserir Data e Hora (Insert Date and Time). Com este diálogo podemos definir não apenas a máscara do objeto como também seu posicionamento na margem do relatório (topo-centralizado, topo-esquerda, etc). O objeto criado é um field associado ao objeto interno Data Atual (Current Date). Abra a tela de propriedades e verifique. Ao criarmos um objeto de paginação (ferramenta Inserir Número de página Insert Page Number), o diálogo presente na figura abaixo nos permite definir apenas o posicionamento da numeração. Observe que o tipo de objeto é diferente do anterior. Neste caso foi criado um boilerplate que faz referência aos objetos internos &PageNumber (Número da Página) e &TotalPages(Total de Páginas). Esta forma de montagem é prática pois podemos alinhar com mais facilidade o texto com o valor da quantidade, no entanto, tem como desvantagem a utilização direta do nome interno do objeto (em inglês, inclusive). Podemos resolver esta situação de outra forma, criando um objeto do tipo Field e associando o objeto interno desejado, da mesma forma que com a data. Em seguida criamos o boilerplate com o texto que desejamos preceder ou adicionar ao valor e fazemos alinhamento como fizemos com os demais objetos do layout. Esta forma permite que trabalhemos sem ter de saber o nome exato do objeto interno, faremos a seleção a partir de uma lista. Se você abrir a tela de propriedades do objeto F_página verificará que podemos estabelecer além da máscara de formato (format mask) como a numeração deverá ser contabilizada através da propriedade Numeração de Página (Page Numbering). Podemos definir quais os tipos de páginas (Header, Trailer, Body) devem ser contabilizados, o valor inicial de contagem, e quando esta numeração deverá ser zerada (em um determinado Repeating Frame, ou seja, em uma determinada quebra ou no final do relatório). CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 70

77 Importando Arquivos para o Layout Selecionar do menu Arquivo (File) o submenu Importar (Import) e dentro das opções apresentadas, a opção Imagem (Image), para que o diálogo correspondente seja apresentado. No diálogo apresentado devemos especificar a localização e o formato do arquivo que desejamos importar. Um arquivo carregado desta forma não precisa estar presente em disco a tempo de execução, pois seu conteúdo é incorporado ao fonte do relatório. Observe que no submenu Importar (Import), também podemos importar um arquivo de texto ou um desenho. Ambas as opções são semelhantes à importação de um arquivo imagem, a diferença está apenas no tipo de arquivo. ADICIONANDO UM BOILERPLATE POR UM ARQUIVO DE LIGAÇÃO (LINKED FILE) Outra forma de incluirmos um arquivo em um relatório é a utilização de um Arquivo de Ligação (Linked File). Com esta forma de associação o arquivo precisa estar presente em disco no diretório de trabalho do Report Builder ou no caminho determinado (pelo path ou pelo registrador do Windows) a tempo de associação. Ao usarmos a ferramenta Arquivo de Ligação (Link File), criamos um boilerplate no Layout. Na tela de propriedades deste objeto temos condições de definir o tipo de arquivo e seu nome. CAPÍTULO 7: O EDITOR DO LAYOUT MODEL - 71

78 CAPÍTULO 8: PL/SQL NO RELATÓRIO CONCEITOS INICIAIS No Report Builder também podemos nos utilizar da PL/SQL a fim de aumentar a flexibilidade de nossos relatórios. Existem quatro tipos de PL/SQL à nossa disposição: PL/SQL Intrínseca são programas de PL/SQL armazenados dentro do nosso relatório e que fazem parte constitutiva dos objetos, são intrínsecos aos objetos do Data Model ou do Layout, tais como Format Triggers, Fórmulas, Filtros, etc. PL/SQL Interna são rotinas armazenadas dentro da própria aplicação. São utilizadas para estruturação do código. Gatilhos de Relatório são rotinas armazenadas dentro de nosso relatório e que são acionadas de acordo com a ocorrência de um determinado evento. PL/SQL Externa são programas de PL/SQL armazenados em uma biblioteca na rede (Libraries) ou armazenados no banco de dados (Stored Procedures). Antes de iniciarmos nosso estudo, porém, façamos uma análise do editor de PL/SQL que se apresentará em todos os momentos deste capítulo. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 72

79 Edição de PL/SQL Uma vez que começamos a tratar da parte de programação, neste tópico analisaremos o editor de PL/SQL. INDENTAÇÃO AUTOMÁTICA A cada linha digitada o posicionamento do cursor na linha subseqüente acompanha a indentação da linha que lhe é superior. Digite o seguinte trecho de programa e avalie o resultado da digitação. IF VARIAVEL > 'ABC' THEN VARIAVEL := 'CDE'; -- COMENTÁRIO VARIAVEL := 'ABC' 'CDE'; VARIAVEL := TO_CHAR(SYSDATE, 'DD/MM/YYYY'); VARIAVEL := 5; VARIAVEL := VARIAVEL + 1; END IF; Listagem 4 INDENTAÇÃO MANUAL Para indentação manual contamos com as opções Endentar e Endentar Invertido do menu Editar (se usarmos o mouse) e com as teclas Tab e Shift + Tab, respectivamente, se usarmos o teclado. CORES Ocorre variação no colorido das informações. As palavras chaves, comentários, constantes strings e numéricas, os símbolos de atribuição ( := ) e de concatenação ( ) são destacados com cores diferentes que os identificam facilitando a localização das informações. SELEÇÃO Podemos selecionar tanto linhas de texto quanto colunas. Para selecionar uma linha, posicione o mouse no canto esquerdo da linha (sobre a faixa existente na lateral esquerda) até que o formato do ícone seja a seta e clique no botão esquerdo. Para selecionar uma coluna pressione a tecla ALT e com o mouse selecione ( pinte ) as coluna(s) desejada(s). CÓPIA E MOVIMENTAÇÃO DE TEXTOS Podemos tanto movimentar textos selecionados (ou pintados ) quanto copia-los para outra parte do código. Para realizar estas ações basta que façamos a seleção do trecho de código desejado (linha) e em seguida soltemos o mouse. Quando aproximarmos o mouse novamente sobre a área selecionada o desenho do cursor mudará para seta (em vez do i ). Neste momento se desejarmos efetuar uma movimentação, simplesmente arrastamos o mouse (sem soltar o botão) para o ponto desejado e, em seguida, soltamos o botão do mouse. Notaremos que o cursor mudará de posição indicando a localização onde o trecho será incluído. Durante a movimentação o desenho do ícone do mouse ganhará um retângulo sob a seta. Se desejarmos copiar o trecho em vez de apenas movimenta-lo, devemos pressionar a tecla Ctrl e efetuar as mesmas ações descritas anteriormente. Neste caso o desenho do ícone do mouse além do retângulo apresentará também um quadrado preenchido com o sinal +, ambos sob a seta. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 73

80 SPLIT DA ÁREA DE EDIÇÃO A área de edição pode ser subdividida em até 4 painéis. Na lateral direita, acima da seta da barra de rolagem vertical a existe uma pequena barra de split. Ao clicarmos sobre ela e arrastarmos o mouse para baixo (sem soltar o botão), dividiremos a tela. No canto inferior esquerdo, ao lado da seta da barra de rolagem horizontal encontramos a mesma barra de split. Se repetirmos a operação de divisão, obteremos o resultado da figura 43. Para desfazer este efeito basta um clique duplo sobre a linha separadora dos quadros, destacadas na figura ao lado. IMPRESSÃO, EXPORTAÇÃO E IMPORTAÇÃO Podemos imprimir a unidade de programa corrente através do menu Arquivo, opção Print. Outra ação válida é a de Importar Texto ou Exportar Texto também presente no menu Arquivo. OPÇÃO DESFAZER A opção desfazer (Undo) pode ser repetida muitas vezes (e não apenas uma). O Form Builder guarda todas as modificações realizadas no código desde a última operação de Salvar. Esta ação está disponível no menu Editar. Paleta de Sintaxe Para edição de trechos de PL/SQL ou para obtenção da chamada de uma rotina pré-definida contamos, agora, com a ajuda de uma paleta de sintaxe. Devemos mater o editor de PL/SQL aberto e escolher a opção Paleta de Sintaxe do menu Programa (apresentado na figura 44). Esta paleta possui duas pastas, uma relativa a sintaxe de PL/SQL e a outra relativa às rotinas pré-definidas. No exemplo da figura ao lado, selecionamos o conjunto de instruções relativas a Controlar Fluxo (veja a janela superior). Dentro da lista apresentada escolhemos a instrução IF ELSIF ELSE. Quando pressionarmos o botão Inserir, o trecho de código mostrado na janela inferior é copiado para a posição do cursor no editor de PL/SQL aberto. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 74

81 PL/SQL Intrínseca Consistem de funções acionadas pelo Report Builder e associadas a elementos do Data Model ou do Layout. Faremos, então, uma revisão de todos estes pontos e objetos em que podemos associar código de PL/SQL. Para acompanharmos esta revisão usaremos o último relatório montado e o salvaremos com o nome de PL01. No Layout retiramos as formatações feitas e os objetos da margem para que o relatório fique bem simples e nos concentremos somente na PL/SQL. FILTROS DE GRUPO (GROUP FILTERS) A PL/SQL associada ao grupo é utilizada com a finalidade de restringirmos as informações obtidas do banco de dados. Podemos estabelecer uma função que quando retorna True indica que a linha foi aceita pela aplicação e quando retorna False indica que aquela linha foi rejeitada. Para criá-la, devemos acionar a tela de propriedades do grupo no Data Model e indicar que o tipo de filtro é PL/SQL. Na propriedade Filtro PL/SQL (PL/SQL Filter) poderemos, então, definir o texto de uma lógica de PL/SQL. Para teste, criaremos um filtro no grupo G_2 (de departamento). function G_2GroupFilter return boolean is begin IF :CD_DEPTO IN ('D11', 'D21', 'E21', 'E01') THEN return TRUE; ELSE return False; END IF; end; No texto acima fizemos uma lógica bastante simplificada. Sabemos, porém que, em um código de PL/SQL, poderemos utilizar todas as partes da linguagem inclusive realizando acesso ao banco de dados. Esta ação, no entanto, não é recomendada uma vez que tornará a aplicação mais lenta, pois este filtro é executado uma vez para cada linha lida. Como regra geral de filtragem devemos tentar somente trazer as linha úteis à aplicação, isto é, tentar filtrar ao máximo na própria Query que traz as linhas para impressão. Desta forma estaremos diminuindo o fluxo de informações pela rede. Se isto for totalmente impossível, então, nos utilizamos da filtragem do grupo, procurando colocar na lógica de PL/SQL apenas restrições que não necessitem de acesso ao banco de dados. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 75

82 GATILHOS DE VALIDAÇÃO (VALIDATION TRIGGERS) Os gatilhos de validação são outro tipo de função PL/SQL. Desta vez associados aos parâmetros. Seu objetivo é criticar o valor fornecido pelo usuário. Se o valor fornecido estiver correto, devemos retornar True, caso contrário, devemos retornar False. Como teste, criaremos um parâmetro P_mat que fornecerá a menor matrícula do relatório. Desta forma, no Navegador, sob o nó Parâmetros de Usuário (User Parameters) criamos um parâmetro de nome P_1, em seguida, acionamos a tela de propriedades deste objeto. Observe que dentre as propriedades do parâmetro existe uma chamada de Gatilho de Validação (Validation Trigger), que utilizaremos para estabelecer a crítica desejada. function P_1ValidTrigger return boolean is begin IF :P_1 < 0 THEN SRW.MESSAGE(1, 'Valor do parâmetro deve ser positivo'); RETURN FALSE; ELSIF :P_1 > 900 THEN SRW.MESSAGE(2, 'Valor do parâmetro deve ser inferior a 900'); RETURN FALSE; ELSE RETURN TRUE; END IF; end; No texto acima criamos uma crítica para o parâmetro P_1, no qual vemos aparecer pela primeira vez menção ao pacote SRW. Se você expandir o nó Pacotes Embutidos verificará que quase todos os pacotes já são de nosso conhecimento, pois são os mesmos utilizados pelo Form Builder. O pacote SRW, no entanto, ainda não é de nosso conhecimento, pois se trata de um conjunto de rotinas específicas do Report Builder. Dentre elas encontramos aquela que nos permite enviar uma mensagem. Teste esta crítica e veja os resultados. Existe um tópico específico para que façamos uma revisão das rotinas deste pacote. Retorne ao Navegador e verifique a existência de dois ícones ( P ), indicando a presença dos dois códigos de PL/SQL adicionados até agora. O Report Builder, como já sabemos, faz a indicação visual da presença de PL/SQL nos objetos (G_2 e P_1). CAPÍTULO 8: PL/SQL NO RELATÓRIO - 76

83 FÓRMULA (FORMULA) Uma fórmula nada mais é do que uma coluna adicionada em um dos grupos ou fora da Query no Data Model. Seu posicionamento define a freqüência com que o código de PL/SQL será executado. Criaremos, então uma fórmula que define o valor do INSS dos funcionários. Como se trata de uma ação a ser calculada para cada funcionário, criaremos esta fórmula no grupo G_1. Na tela de propriedades deste novo objeto encontramos uma propriedade com o nome de Fórmula PL/SQL (PL/SQL Formula), onde poderemos adicionar um código de PL/SQL que será retornado para a variável associada ao código. Observe ainda que o tipo da variável definirá o tipo da fórmula, ou seja, nossa variável é numérica, portanto a função criada pelo Report Builder será do tipo numérica, retornando um Number. function INSSFormula return Number is begin RETURN :VL_SAL * 0.08; end; Uma fórmula pode se tornar um ponto crítico para a execução do relatório. Lembre-se de que o posicionamento da fórmula indica a quantidade de vezes com que ela será executada. Uma fórmula presente no bloco de detalhe (como é o nosso caso) será executada tantas vezes quantas linhas forem trazidas pela aplicação. Procure, portanto, estabelecer apenas cálculos locais. Não utilize a fórmula para acesso ao banco de dados pois isto poderá degradar significativamente a performance de seu relatório. Como regra geral para as fórmulas, devemos tentar sempre que possível efetuar os cálculo na própria Query (no nosso caso isto era perfeitamente possível), pois estaremos diminuindo a freqüência com que a PL/SQL Engine é acionada para a execução de uma ação específica. Se isto for totalmente impossível, então, nos utilizamos da fórmula, procurando colocar na lógica de PL/SQL apenas cálculos que não necessitem de acesso ao banco de dados. GATILHOS DE FORMATO (FORMAT TRIGGER) Os gatilhos de formatação estão associados aos objetos de layout. Todos os objetos do Layout possuem a propriedade Gatilho de Formato (Format Trigger). O objetivo deste tipo de código de PL/SQL é a possibilidade de modificarmos a aparência do objeto condicionalmente ou, ainda, permitir que o objeto somente seja impresso sob determinadas condições. Escolhemos para teste o campo F_vl_sal. Desejamos que se o valor do salário for maior que 3000, seja apresentado em negrito e vermelho. Utilizaremos a propriedade Gatilho de Formato (Format Trigger) do item de layout F_vl_sal para definirmos o código de PL/SQL adequado à situação. FUNCTION F_VL_SALFORMATTRIGGER RETURN BOOLEAN IS BEGIN IF :VL_SAL > 3000 THEN SRW.SET_FONT_WEIGHT(SRW.BOLD_WEIGHT); SRW.SET_TEXT_COLOR ('RED'); END IF; RETURN (TRUE); END; CAPÍTULO 8: PL/SQL NO RELATÓRIO - 77

84 Neste exemplo utilizamos o pacote SRW para estabelecer a formatação desejada para o campo. O resultado deste código está apresentado na figura acima. Mais tarde estudaremos as opções deste pacote SRW. Os gatilhos de formatação são inerentes a todos os objetos do Layout, inclusive Repeating Frames e Frames. Observe no texto anterior, que na verdade é criada uma função que deve retornar True quando desejarmos que o objeto seja formatado e False quando não desejarmos. Com ele podemos ter situações em que um objeto seja impresso condicionalmente. Lembre-se, porém, que este é o último ponto de filtragem. Só devemos utilizá-lo se não houver qualquer outra alternativa. O melhor lugar para a filtragem é sempre a Query, pois os dados não são trazidos pela rede. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 78

85 PL/SQL Interna A PL/SQL Interna consiste de funções, procedures ou pacotes armazenados dentro da própria aplicação. São utilizadas para estruturação do código e não tem utilização em outros módulos. Está localizada localmente, porque: Não precisa ser compartilhada por outras aplicações. Não utiliza estruturas do banco de dados ou utiliza apenas para atualização, não causando impacto no tráfego da rede. Está associada a ações específicas do ambiente cliente (usa alguma rotina dos Pacotes Embutidos do Report Builder). A criação de uma rotina local é feita através do Navegador: Selecione o nó Unidade de Programa (Program Unit). Utilize a ferramenta Criar (Create). O diálogo da figura ao lado será apresentado para que possamos determinar o nome e tipo da unidade de programa. Avaliemos quais as opções de unidades de programa e sua melhor utilização: Procedimentos (Procedures) - Podem receber parâmetros e retornar valores para a rotina chamadora através de parâmetros de saída (out). Deve ser o tipo escolhido se mais de uma informação de retorno for necessária. Quando temos necessidade de retornar ao programa chamador mais de uma informação é mais comum o uso de um procedimento do que de uma função, porém não há impedimento de uso. Funções (Functions) - Podem receber parâmetros. Sempre retornam um valor através da própria chamada da função. Também podem retornar valores através de parâmetros de saída (out), mas é pouco comum esta forma de uso. Deve ser o tipo escolhido se apenas uma informação de retorno for necessária. Pacotes (Packages) - Nos pacotes podemos criar: procedures, functions e ainda variáveis e cursores globais (declarados na especificação) ou de uso apenas no pacote (declarado no corpo). Pacotes favorecem a organização, utilize-os sempre. Use e abuse de sua funcionalidade para grupar rotinas afins. Quando aceitarmos este diálogo, o editor de PL/SQL será acionado para que possamos escrever o código desejado. PROCEDURE TESTE IS BEGIN NULL; END; Neste caso o tipo de código é Unidade de Programa. Observe que o campo Objeto fica desabilitado. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 79

86 PL/SQL Externa ROTINAS ARMAZENADAS NO BANCO DE DADOS Quando decidimos pelo cadastramento de uma determinada rotina no banco de dados, nossa principal motivação é compartilhamento. Aquele código pode ser aproveitado (reutilizado) por diversas aplicações estejam elas no ambiente cliente (módulos de tela ou relatório) ou no ambiente servidor (outras rotinas armazenadas no banco de dados). Porém o compartilhamento também é possível com bibliotecas. Escolheríamos seu uso no banco de dados, porque: A rotina executa ações de leitura e atualização no banco de dados (local ou remoto), de tal forma que sua performance seja melhorada em função da diminuição do tráfego na rede. A rotina não está associada a ações específicas do ambiente cliente (tela, navegação, etc). A rotina será utilizada por aplicativos em batch (pl/sql, pro*c, etc) apesar de não fazer acesso a estruturas do banco de dados. Neste caso específico deve-se analisar o impacto de se duplicar esta rotina. Uma para utilização por aplicativos online (no ambiente de cliente) e outra para os aplicativos em batch (no ambiente servidor). A criação ou manutenção de uma stored procedure pode ser feita com o próprio Report Builder, da seguinte forma: Expanda o nó Objetos do Banco de Dados (Database Objects). Veremos a lista de usuários criados no banco. Expanda o nó Desenv (nosso usuário de trabalho). Serão apresentados 4 nós principais: Unidades de Programa Armazenadas (Stored Program Units), Tabelas (Tables), Bibliotecas de PL/SQL (PL/SQL Libraries) e Views. Se você expandir o nó Tabelas você verá a lista de tabelas do usuário Desenv. Escolha uma tabela qualquer e expanda novamente o nó. Encontrará dois nós: Trigger(Database Trigger) e Colunas (Columns). Se desejarmos agora dar manutenção em uma rotina gravada no banco de dados ou se quisermos incluir uma nova rotina, devemos selecionar o nó Unidades de Programa Armazenadas (Stored Program Units) e expandir para encontrar a rotina desejada ou pressionar o botão Criar (Create) para que seja apresentado novamente o diálogo da figura anterior. Para efeito de teste, abra uma delas (click duplo no ícone ou botão direito do mouse com a opção Editor de PL/SQL). Observe que a janela do editor de PL/SQL é ligeiramente diferente daquelas vistas anteriormente. Ela mostra quem é o usuário dono da rotina (Owner), o nome e tipo da rotina. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 80

87 Os botões da parte superior possuem o seguinte significado: Novo (New) Com este botão podemos criar uma nova unidade de programa. O diálogo em que indicamos o tipo de unidade será apresentado novamente. Salvar (Save) Este botão dispara a compilação da unidade de programa e armazenamento no banco de dados. Não se esqueça que o Oracle armazena as rotinas mesmo com erro de compilação. Caso seja encontrado um erro, haverá a apresentação da indicação do erro em um painel abaixo do painel de texto. Introduza um erro e veja o resultado. Reverter (Revert) Desfaz as modificações realizadas após o último Salvar (Save) ou Reverter (Revert). Observe que após o uso do botão Salvar não podemos retornar o código anterior. O código é armazenado mesmo contendo erros. Descontinuar (Drop) Remove a unidade de programa do banco de dados. Esta opção pedirá confirmação. Fechar (Close) Fecha o diálogo. Esta opção pede confirmação se forem detectadas alterações no código. Se você não modificou o código e ainda assim a tela de confirmação for apresentada, escolha a opção Reverter (revert) deste diálogo apresentado. Ajuda (Help) Aciona uma tela contendo a descrição desta janela. ROTINAS ARMAZENADAS EM BIBLIOTECAS (LIBRARIES) Quando decidimos pelo cadastramento de uma determinada rotina em bibliotecas da rede, desejamos o compartilhamento apenas para o ambiente cliente. Aquele código pode ser aproveitado (reutilizado) por diversas aplicações no ambiente cliente (módulos de tela ou relatório). Escolheríamos seu armazenamento em um biblioteca, porque: A rotina poderá ser compartilhada por mais de um módulo (de relatório ou de tela). A rotina não utiliza estruturas do banco de dados ou utiliza apenas para atualização, não causando impacto no tráfego da rede. A rotina está associada a ações específicas do ambiente cliente (usa rotinas de um dos pacotes embutidos do report builder). A criação de bibliotecas no ambiente, será vista em um tópico à parte pois trata-se de um módulo. Não é um objeto de dentro do nosso relatório. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 81

88 Gatilhos de Relatório (Report Triggers) São códigos de PL/SQL executados pelo Report Builder de acordo com o evento ao qual estão associados. Ao expandirmos o nó Gatilhos de Relatório (Report Triggers), verificaremos que o Report Builder conta apenas com 5 tipos de gatilhos (triggers) associados ao relatório. Já vimos no tópico referente à PL/SQL Intrínseca os demais gatilhos associados aos objetos e as situações de sua execução. Estudaremos a seguir em que momento eles são acionados. Os gatilhos serão apresentados exatamente na ordem de execução: Before Parameter Form este gatilho é acionado antes da tela de parâmetros (se houver) ser apresentada. Neste gatilho (trigger) podemos, por exemplo, atribuir valor para os parâmetros. Este gatilho é acionado mesmo que não haja uma tela de parâmetros. After Parameter Form este gatilho é acionado depois da apresentação da tela de parâmetros (se houver). Podemos efetuar críticas complexas em relação aos parâmetros, obter e alterar seus valores. Se esta função retornar False, a tela de parâmetros é, novamente, apresentada. Até este ponto podemos atribuir valores aos parâmetros utilizados como substituição léxica para as Queries do relatório uma vez que os comandos de SQL presentes nas Queries ainda não sofreram o Parse. A próxima tarefa do Report Builder será executar o Parse. Sendo assim qualquer alteração nestes parâmetros após este ponto não afeta mais o que será selecionado pelas Queries presentes no relatório. Before Report este gatilho é disparado antes do Report Builder efetuar o primeiro Fetch mas, após ter enviado o texto do SQL para verificação (Parse). Between Pages este gatilho é disparado antes da formatação de uma determinada página e após a formatação da página anterior. Por exemplo entre a primeira e a segunda páginas, entre a segunda e a terceira e assim por diante. After Report este gatilho é disparado após o término da execução do relatório. Pode ser utilizado com o objetivo de remover uma determinada tabela, reinicializar algum tipo de controle ou mesmo executar outro relatório seqüencialmente. Nos exercícios testaremos alguns usos para estes gatilhos. Empacotamento da Lógica As formas de empacotamento (procedimentos, funções e pacotes) apresentadas acima existem tanto no ambiente cliente quanto no ambiente servidor. Com todas estas opções não há justificativa para um código não modular, não estruturado. Considere quebrar seu código PL/SQL em um pacote (do código X) se a visualização do texto ultrapassar 3 páginas (em torno de 80 linhas). Considere criar rotinas (procedures ou functions) para trechos de programas repetitivos. Crie uma biblioteca com rotinas que você possa utilizar em diversos sistemas. Podem existir soluções já criadas em um sistema que facilitem sua programação em outro. Documente sempre. A lista acima são apenas sugestões. Você encontrará a forma mais adequada para o desenvolvimento das suas aplicações. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 82

89 Database Triggers Já vimos que a atualização de objetos do banco de dados é possível com a ferramenta Report Builder. Veremos a manutenção de um trigger do banco de dados. Expandiremos o nó Objetos do Banco de Dados (Database Objects), o nó Desenv (usuário em uso), o nó Tabelas (Tables), a tabela Func para encontrarmos o nó Trigger. Acionaremos, então, a ferramenta Criar (Create) para que seja mostrado o diálogo de manutenção de Database Triggers (o mesmo apresentado pelo Form Builder). Neste diálogo pressionaremos o botão Novo (New) para que a tela seja habilitada. Poderemos preencher então: O nome do trigger no campo Nome (Name). A definição do evento do trigger no campo Disparando (Triggering) e no campo Instrução (Statement). Observe que se a instrução for Update, o campo de Colunas (Of Columns) fica habilitado para que informemos as colunas que causarão o evento quando modificadas. Indicação de trigger de comando ou de linha. Se marcarmos o check box Para Cada Linha (For each Row) estamos indicando um trigger de linha, o que faz com que os dois campos abaixo fiquem habilitados. Alteração do nome das áreas de trabalho (quando usamos trigger de linha). Ao preenchermos o campo Referenciando Antigo como (Referencing Old as) e Novo como (New as). Definição de uma restrição de leitura ao preenchermos o campo Quando (When). Finalmente o texto do trigger no campo Corpo do Gatilho (Trigger Body). Para relembrar as características básicas de um database trigger, retorne ao estudo de PL/SQL. CAPÍTULO 8: PL/SQL NO RELATÓRIO - 83

90 CAPÍTULO 9: MAIS OBJETOS DO LAYOUT Introdução Após termos trabalhado bastante no layout conheceremos mais alguns objetos específicos do Layout: Quadros (Frames), Âncoras (Anchors) e Botões (Buttons). Neste tópico, continuaremos desenhando o layout manualmente para que nosso entendimento seja o melhor possível. Criaremos uma nova aplicação de nome LY03 contendo duas Queries, relacionadas a seguir: QFunc contém o seguinte comando Select cd_mat, cd_depto, nm_func, vl_sal from Func. QPrjatv contém o seguinte comando Select cd_proj, cd_ativ, dt_ini, dt_fim from PrjAtv. No Layout, inicialmente criaremos apenas a Query QFunc, de acordo com o formato apresentado na figura abaixo. Neste Layout desenhamos o Repeating Frame Rfunc contendo as quatro colunas presentes na Query. Abaixo deste Repeating Frame criamos um objeto do tipo Arquivo de Ligação (Link File) e incorporamos um arquivo do ambiente. Sabemos que o Repeating Frame vai se desenvolver verticalmente ao longo da página. O que acontecerá? Os dados passarão sobre o desenho? Ao executarmos observamos que o Report Builder empurrou o objeto até o fim do relatório. O arquivo BMP só foi impresso na última página do relatório, após a última linha impressa. Por quê? A figura ao lado nos dá uma explicação. Subordinado ao objeto B_1 e ao objeto Rfunc aparece um nó chamado de Informações sobre Ancoragem. Isto significa que existe uma âncora ligando o objeto B_1 ao objeto Rfunc. Esta âncora vai garantir que somente após a formatação do objeto Rfunc, o objeto B_1 será formatado, impedindo que o Repeating Frame se sobreponha ao objeto. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 84

91 Visualizando as Informações de Ancoragem No Navegador selecione o menu Navigator e marque a opção Opções do Navigator para que seja apresentado o diálogo da figura ao lado. Neste diálogo existem duas pastas: Geral (General) e Layout. O objetivo deste diálogo é determinar o que deve ser visualizado no Navegador. Na pasta Geral (General) temos apenas duas opções que indicam se desejamos visualizar os ícones dos objetos e se desejamos visualizar o ícone indicador de PL/SQL. Na pasta Layout indicamos se desejamos visualizar: texto padronizado de texto, texto padronizado gráfico, texto padronizado externo (Arquivo de Ligação Link File), texto padronizado de imagem, campos, botões, gráficos (do Graphics Builder), objetos OLE2 e informações sobre ancoragem (que é o nosso objetivo). CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 85

92 Âncoras (Anchors) Âncoras determinam o posicionamento relativo de todos os objetos na impressão do relatório. Elas associam um objeto de Layout chamado de objeto Filho a um segundo objeto chamado de objeto Pai. Elas também definem o posicionamento vertical e horizontal do filho em relação ao pai. Existem dois tipos de âncoras no Report Builder: implícitas e explícitas. No exemplo anterior tivemos um exemplo de ancoragem implícita. O Report Builder cria uma âncora implícita todas as vezes em que há o risco de um objeto se sobrepor a outro. Isto é muito comum quando definimos um objeto de tamanho variável. Como teste adicional, vamos diminuir o campo que apresenta o nome do funcionário e vamos transformálo em variável no sentido horizontal. Retorne ao Navegador e verifique o que o Report Builder criou: Ele ancorou o código do departamento no nome do funcionário e o salário do funcionário no código do departamento. Observe que o campo Fcd_depto possui duas âncoras (com aspectos diferentes), indicando que ele é filho na que se relaciona com Fnm_func e é pai na que se relaciona com Fvl_sal. Portanto, podemos entender os tipos de âncora da seguinte forma: Âncoras Implícitas criadas pelo Report Builder a tempo de execução. Ele as cria objetivando garantir que não ocorrerá sobreposição de objetos. Somente são geradas âncoras implícitas para objetos que não tenham âncora explícita definida. Âncoras Explícitas criadas pelo desenvolvedor no Report Builder. São criadas com o objetivo de garantir o posicionamento relativo de objetos. Sobrepõem-se a qualquer âncora implícita criada. Como exemplo, criaremos uma âncora explícita entre Fnm_func e Fcd_depto. A criação da âncora deve seguir os passos abaixo: Clicar no objeto âncora (anchor) na paleta de ferramentas (vertical). Clicar na linha (lateral esquerda) do objeto fcd_depto. Não adianta clicar no interior do objeto. Tem de ser na linha. Se necessário aumente o nível de zoom para melhor visualização. Pode soltar o mouse. Duplo clique na linha (lateral direita) do objeto fnm_func. Observe o resultado na figura ao lado. Apesar de não identificarmos diferenças no Navegador. As características da âncora explícita são determinadas por nós. Vejamos suas propriedades. Selecione o objeto âncora e dê um clique duplo ou use o botão direito do mouse. A tela de propriedades é apresentada. Neste diálogo observamos logo a indicação de qual objeto é o pai da relação e qual objeto é o filho. As demais propriedades, porém requerem um pouco mais de análise. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 86

93 Começaremos analisando o que significa o tipo de limite para pai e filho (Child Edge Type e Parent Edge Type). Cada objeto possui 4 lados: Topo, Base, Esquerda e Direita. No exemplo acima, o objeto pai (Fnm_func) está com a âncora posicionada no lado direito (+Direita Right) e o objeto filho (Fcd_depto) está com a âncora posicionada no lado esquerdo (+Esquerda Left). É esta a informação fornecida pelas propriedades Tipo de Limite-Pai (Parent Edge Type) e Tipo de Limite Filho (Child Edge Type). Estas propriedades, portanto, determinam as laterais dos dois objetos onde a âncora está pendurada. Nosso próximo conjunto de propriedades chama-se Percentual de Limite (Edge Percent) tanto para pai (parent) quanto para filho (child). No nosso caso os dois objetos estão posicionados lado a lado. Sendo assim a distância entre eles é fixa, ou seja, a tempo de impressão o posicionamento lateral será sempre distante o tamanho da âncora no desenho. No entanto o posicionamento vertical é fornecido como percentual. Isto ocorre porque nosso objeto poderá crescer também na vertical, sendo assim a âncora garante que o posicionamento relativo dos dois objetos se manterá constante a tempo de execução. Se os objetos estivessem posicionados um sobre o outro, o que se manteria constante seria a distância vertical, enquanto que a distância horizontal se manteria variável. Na figura ao lado verificamos como o Report Builder controla o posicionamento com a âncora. Na parte superior do desenho apresentamos a definição feita a tempo de Layout. O posicionamento lateral fixo e o posicionamento vertical 50% para o pai e 50% para o filho em relação à lateral onde está pendurada a âncora. Na parte inferior, verificamos o que acontece a tempo de execução. Suponhamos que o objeto Pai tenha crescido tanto verticalmente quanto horizontalmente. Sendo assim, após sua formatação (ele é formatado primeiro que o objeto filho) o Report Builder deve manter as mesmas proporções definidas a tempo de Layout. Portanto, ele determina o posicionamento vertical de 50% em relação à lateral direita traça uma distância fixa na horizontal e monta o objeto filho com o ponto central (50%) de sua lateral esquerda exatamente na fronteira da distância determinada. O posicionamento relativo é mantido. Esta é a intenção da ancoragem. Garantir que o posicionamento relativo dos objetos seja mantido. Ainda temos dois parâmetros para analisar: Fechar Horizontalmente (Collapse Horizontally) e Fechar Verticalmente (Collapse Vertically). Estes parâmetros indicam que se o objeto pai não for formatado, o objeto filho deverá ser formatado colado à posição onde terminaria o objeto pai, sem a manutenção da distância fixa. Para entendermos toda esta explicação, retornemos ao nosso exemplo. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 87

94 A figura ao lado nos mostra o layout de teste do nosso exercício. As âncoras foram tornadas todas explícitas. Para que o nome do funcionário não fosse formatado em determinada situação, criamos o gatilho de formatação associado a Fnm_func apresentado na listagem abaixo. function F_nm_funcFormatTrigger return boolean is begin IF :NM_FUNC = 'CRISTINA' THEN RETURN FALSE; ELSE RETURN TRUE; END IF; end; Neste primeiro teste as âncoras não estão com a marcação de colapso. Quando o nome do funcionário não é formatado, a âncora posiciona o objeto filho exatamente com a distância definida a tempo de layout. Veja que na figura acima desenhamos a âncora para mostrar esta distância. O espaço entre a âncora e o objeto Fcd_mat corresponde à distância que existiria entre Fcd_mat e Fnm_func. Alteraremos a propriedade desta âncora para definir o colapso horizontal. Observe o resultado na figura acima. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 88

95 Quadros (Frames) Um Quadro (Frame) possui um subconjunto das funções de um Repeating Frame. São semelhantes aos Quadros de Repetição (Repeating Frame) nos seguintes aspectos: Podem conter qualquer objeto de layout, incluindo outros Quadros (Frames). Podem se expandir, contrair, ser variáveis ou de tamanho fixo, horizontalmente ou verticalmente. Podemos definir atributos de apresentação (cor, fontes, etc.) e condições lógicas para o Quadro (Frame) e todos os objetos pertencentes a ele usando triggers. Os Quadros (Frames), no entanto, são diferentes dos Quadros de Repetição (Repeating Frames) pois não estão associados a registros. São impressos tão freqüentemente quanto o objeto no qual eles estão contidos ou aos quais eles estão associados. Devemos criar frames quando desejamos: Juntar objetos para assegurar que eles permaneçam em suas posições relativas durante a impressão. Delimitar seções no relatório. Impedir a sobreposição de objetos. Atribuir a mesma freqüência de impressão a diversos objetos. Faremos, a seguir, dois exemplos de utilização do Frame. No primeiro exemplo definiremos títulos de coluna para os objetos do layout. Sabemos que para que estes objetos sejam formatados em todas as páginas, devemos definir a freqüência de impressão como Todas as Páginas (All). Outra forma de resolver este problema é pendurá-los em um quadro(frame) e definir esta propriedade para o quadro (frame). No exemplo da figura anterior, a propriedade Impressão de Objeto Ativada (Print Object On) foi preenchida com Todas as Páginas (All Pages) apenas para o Quadro (Frame). Todos os boilerplates de texto estão com esta propriedade preenchida com Primeira Página (First Page). Uma vez que o Quadro (Frame) será formatado em todas as páginas, ou seja, haverá uma nova instância do Frame em cada página, os objetos pendurados no quadro serão formatados também em todas as páginas do relatório, porém na primeira página de cada instância do objeto Frame. Como segundo teste em nossa aplicação, criaremos agora um Layout que apresente não só funcionário como também Projeto e Atividade. No Layout montado, colocamos os dois Repeating Frames(funcionário e projeto atividade) lado a lado e abaixo de ambos incluímos um boilerplate gráfico. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 89

96 Sabemos que o Report Builder percebendo que existe o risco de sobreposição dos objetos criará uma âncora implícita entre o objeto boilerplate e o objeto que cresce. Neste caso, porém, existem dois objetos com crescimento vertical. Nesta situação o Report Builder determina onde será feito o posicionamento da âncora baseado em algoritmos internos, ou seja, a âncora tanto pode ficar pendurada em Rfunc quanto em Rprjatv. O que aconteceria se o Report Builder decidisse pela ancoragem em Rfunc? O objeto gráfico ficaria sobreposto aos objetos do Repeating Frame Rprjatv. Este problema ocorre porque um objeto filho só pode estar ancorado em um objeto pai. Como solução de contorno, envolveremos os dois Repeating Frames em um Quadro (Frame), de tal forma que a ancoragem ocorra em relação ao Frame e não mais em relação aos Repeating Frames. A figura acima nos mostra a solução referida anteriormente. Observe que este Quadro (Frame) deve ter a propriedade de elasticidade vertical ativada, pois os objetos em seu interior gerarão diversas linhas. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 90

97 Botões (Buttons) Podemos criar botões num relatório a fim de gerar relatórios interativos (online), isto é, um relatório que apresente o resultado no vídeo. Estes botões servem para: Permitir o acesso a arquivos multimídia (Imagens, Vídeo ou Som) Permitir o acesso a imagens gravadas no banco de dados. Executar códigos PL/SQL (por exemplo, executar outro relatório). Criaremos um pequeno exemplo de utilização. Para tal salvaremos nossa aplicação LY03 com o nome de LY04 e retiraremos todas as informações referentes a Projeto Atividade. Neste exemplo anexaremos um botão ao lado do Repeating Frame de funcionário, como apresentado no layout da figura abaixo. Este botão só será apresentado uma vez no início do relatório, uma vez que não está associado aos objetos do quadro. Observe, porém que poderíamos criar um relatório que recebesse como parâmetro um código de matrícula ou nome e que fosse acionado quando o usuário clicasse no botão. Dentro do conjunto de propriedades associadas ao botão observamos dois grupos principais: Label de Botão (Button Label) Neste grupo de propriedades forneceremos a configuração relativa à imagem do botão para o usuário. Poderá ser um texto (label) ou um ícone. No caso de texto devemos definir o texto e no caso de ícone, devemos definir o nome do arquivo. Comportamento do Botão (Button Behavior) Neste grupo de propriedades estaremos fornecendo: a) o nome e tipo de um arquivo multimídia (neste caso será ativado o media player do Windows). b) o nome de uma coluna (do banco de dados selecionada no relatório) que possua imagens armazenadas (raw ou long raw) ou c) um texto de PL/SQL a ser executado quando o usuário acionar o botão. Uma destas três opções deve ser selecionada e configurada. No caso de nosso exemplo definimos um código de PL/SQL que envia uma mensagem. Para que o botão possa ser acionado, devemos executar o Report Runtime. Para simular esta execução, escolha a opção Previsualizador de Runtime (Runtime Previewer) do menu Visualizar (View) a partir do Layout Model. CAPÍTULO 9: MAIS OBJETOS DO LAYOUT - 91

98 CAPÍTULO 10: PACOTES EMBUTIDOS O NÓ PACOTES EMBUTIDOS Falaremos, agora, nos pacotes que aparecem sob o nó Pacotes Embutidos (Built-in Packages). Conheceremos o objetivo de todos eles, mas exemplificaremos apenas alguns. Quando estivermos falando sobre cada um deles, expanda o nó correspondente para que você possa visualizar as rotinas pertencentes a ele e entender um pouco melhor seus objetivos. Para os testes deste grupo criaremos um relatório de nome Pacote, com as seguintes características: Colunas cd_depto e nm_depto da tabela Depto. Botão (pode ser incluído na linha de cada departamento ou ficar isolado). SRW Este é o pacote padrão do Report Builder, ou seja, é aquele pacote que contém as rotinas básicas para utilização dentro de um relatório. Com ele podemos alterar as propriedades de um objeto (Set_Attr), determinar a quantidade máxima de linhas de uma query (Set_MaxRow), acionar outro relatório (Run Report) muitas outras funcionalidades, algumas delas já utilizadas ao longo dos exemplos e exercícios deste capítulo. OLE2 Conjunto de rotinas PL/SQL APIs para criação, manipulação e acesso a tributos de objetos OLE2 Automation. Os objetos OLE2 Automation encapsulam um conjunto de atributos e métodos que podem ser manipulados ou invocados de um OLE2 Automation Client. O pacote OLE2 permite que façamos acesso aos objetos OLE2 Automation Servers diretamente do PL/SQL. No Form Builder este pacote, apesar de presente, deixará aos poucos de ser utilizado uma vez que as rotinas presentes no pacote Standard Extensions realizam as mesmas operações de forma mais simples e eficiente (veja exercício EX56 do capítulo de Form). No Report Builder estas rotinas não estão disponibilizadas ainda. Para os mesmos resultados ainda devemos nos utilizar do pacote OLE2. DDE Este pacote permite a utilização do suporte a Dynamic Data Exchange (DDE) dentro dos componentes Oracle Developer 6i. DDE é um mecanismo pelo qual aplicações podem se comunicar e trocar dados em um ambiente Windows. As funções habilitadas para as aplicações Oracle (Client) se comunicarem com outras aplicações do ambiente Windows compatíveis com DDE (Server) compreendem 3 ações: Importação de dados Exportação de dados Execução de comandos para o servidor dde (a outra aplicação). Não desenvolveremos exemplos com este pacote. Para maiores informações utilize a ajuda do Report Builder para exemplos e forma de utilização. CAPÍTULO 10: PACOTES EMBUTIDOS - 92

99 ORA_FFI Este pacote provê uma interface de uso de funções C (terceira geração) diretamente dentro do PL/SQL. No ambiente Windows as funções externas devem ser DLLs que, depois de registradas via funções ORA_FFI podem ser usadas em uma aplicação Reports. Para utilização de uma DLL em uma aplicação Reports, devemos: Usar a função Load_Library para obter um handle da DLL, ou seja, uma identificação física (nome diretório, etc). Usar a função Register_Function para obter um handle da função, ou seja, uma identificação no ambiente da função (C) a ser usada. Deve-se especificar o nome da função e sua localização (o handle da DLL). Usar a função Register_Parameter para registrar cada parâmetro e estabelecer a paridade com os tipos de parâmetro da PL/SQL. Usar a função Register_Return para registrar o tipo de retorno da função C e estabelecer a paridade com o equivalente PL/SQL. Não desenvolveremos exemplos com este pacote. Para maiores informações utilize a ajuda do Report Builder para exemplos e forma de utilização. ORA_DE Este pacote é para uso interno do Report Builder. Contém construções usadas pelo Oracle Developer 6i para serviços privativos de PL/SQL. Não desenvolveremos exemplos com este pacote. CAPÍTULO 10: PACOTES EMBUTIDOS - 93

100 ORA_PROF Este pacote contém procedimentos, funções e condições de erro que nos permitirão verificar o tempo de execução de uma determinada unidade de programa. Repetiremos o teste feito no Form Builder para verificação de tempo transcorrido. PROCEDURE Prof IS tempo NUMBER; conta NUMBER := 0; BEGIN ORA_PROF.CREATE_TIMER('TEMPO'); ORA_PROF.START_TIMER('TEMPO'); FOR I IN LOOP CONTA := 0; END LOOP; ORA_PROF.STOP_TIMER('TEMPO'); TEMPO := ORA_PROF.ELAPSED_TIME('TEMPO'); ORA_PROF.DESTROY_TIMER('TEMPO'); SRW.MESSAGE(1, 'Tempo transcorrido = ' TEMPO); END; No texto acima decidimos determinar o tempo total de somar 1 a uma variável vezes. Para isto criamos o timer, iniciamos a contagem (start), executamos a operação desejada, interrompemos a contagem (stop), destruímos a área de contagem do tempo e obtivemos o valor do tempo transcorrido (retornado em milisegundos). PROCEDURE CRIA_PROF IS BEGIN ORA_PROF.CREATE_TIMER('TEMPO'); ORA_PROF.START_TIMER('TEMPO'); END; Separaremos, agora este procedimento em duas partes, uma que criará o Timer e outra que verificará o tempo decorrido. Este dois procedimentos serão acionados por um botão a ser incluído em nossa aplicação. O procedimento do texto acima apenas cria o Timer. PROCEDURE Result_Prof IS TEMPO NUMBER; BEGIN ORA_PROF.STOP_TIMER('TEMPO'); TEMPO := ORA_PROF.ELAPSED_TIME('TEMPO'); ORA_PROF.DESTROY_TIMER('TEMPO'); SRW.MESSAGE (1, 'Tempo transcorrido = ' tempo); END; No procedimento anterior apenas obtemos o resultado do tempo decorrido. Observe que utilizamos a rotina Message do pacote SRW. Esta rotina mostra a mensagem em uma janela de Alerta. Recebe como parâmetro um número dado por nós e o texto da mensagem. O número também aparece na mensagem apresentada. Com a seqüência de testes deste tópico acionaremos estas rotinas a fim de contabilizar o tempo total de execução das ações programadas. Para reinicializar o contador de tempo devemos usar a rotina Reset_Timer deste pacote. CAPÍTULO 10: PACOTES EMBUTIDOS - 94

101 ORA_NLS Este pacote permite que obtenhamos informações sobre o ambiente corrente. Faremos um pequeno teste a título de exemplo. PROCEDURE NLS IS DIA_SEMANA PLS_INTEGER; BEGIN IF ORA_NLS.MODIFIED_DATE_FMT THEN DIA_SEMANA := ORA_NLS.GET_LANG_SCALAR(ORA_NLS.WEEK_START); IF DIA_SEMANA= 0 THEN SRW.MESSAGE(2, 'O primeiro dia da semana é domingo'); ELSIF DIA_SEMANA = 1 THEN SRW.MESSAGE(2, 'O primeiro dia da semana é segunda feira'); END IF; ELSE SRW.MESSAGE(3, 'O formato de data não foi modificado'); END IF; END; No texto acima apresentamos uma procedure, na qual utilizamos duas rotinas do pacote Ora_Nls: a função Modified_Date_Fmt, que retorna um boleano indicando se o formato de data foi ou não modificado e a função Get_Lang_Scalar que pode fornecer diversas características a respeito da linguagem corrente. Podemos obter dados numéricos. O parâmetro recebido por esta rotina corresponde a uma constante definida no pacote. Os nomes e significados destas constantes estão na ajuda do Report Builder sob o título Ora_Nls Numeric Constants. Text_IO Este pacote permitirá que venhamos a ler ou gravar informações para um arquivo do ambiente. É equivalente ao pacote Text_IO do Form Builder. Trabalharemos com ele apenas nos exercícios. CAPÍTULO 10: PACOTES EMBUTIDOS - 95

102 TOOL_ENV Permite que obtenhamos informações das variáveis de ambiente do Oracle. Faremos um teste a título de exemplificação. PROCEDURE ENV IS linguagem VARCHAR2(100); BEGIN TOOL_ENV.GETVAR ('NLS_LANG', LINGUAGEM); SRW.MESSAGE(4, 'Linguagem em uso é ' LINGUAGEM); END; No trecho acima utilizamos uma rotina do pacote Tool_Env (Get_Var) para obter o nome de uma das variáveis do ambiente. Você pode ver o nome destas variáveis no registrador do Windows com o RegEdit (nó Hkey_Local_Machine, subnó Software, subnó Oracle). A rotina permite a obtenção destas informações dinamicamente. Com esta rotina encerramos os testes da aplicação Pacote. Podemos acionar todas as rotinas criadas no botão e verificar o tempo transcorrido total. O resultado é mostrado no texto abaixo. procedure botaobuttonaction is begin CRIA_PROF; ENV; NLS; RESULT_PROF; end; Para acionarmos o botão, devemos escolher a opção Previsualizador de Runtime no menu Visualizar (View). TOOL_RES Este pacote fornece um mecanismo para extrairmos informações de um arquivo de recursos. Os arquivos de recursos são providos pelas ferramentas (Form Builder, Report Builder, etc) e contém informações diversas utilizadas pelos softwares. Podemos gerar nossos próprios arquivos de recursos com o utilitário ResPa21 a partir de um texto com extensão PRN. Este utilitário é fornecido juntamente com o Oracle*Terminal. Não desenvolveremos exemplos com este pacote. Para maiores informações utilize a ajuda do Report Builder para exemplos e forma de utilização. TOOL_ERR O pacote Debug fornece um conjunto de informações a respeito do erro acontecido em uma área chamada Error Stack. Esta área contém códigos e mensagens de erro organizadas em uma área indexada de 0 a n-1 (onde n é o número de erros). Este pacote permitirá a manipulação desta área de stack. Não desenvolveremos exemplos com este pacote. Para maiores informações utilize a ajuda do Report Builder para exemplos e forma de utilização. CAPÍTULO 10: PACOTES EMBUTIDOS - 96

103 STPROC Este pacote é para uso interno do Report Builder. Contém construções usadas pelo Oracle Developer 6i para chamadas a subprogramas armazenadas no banco de dados. A utilização deste pacote nos relatórios é automaticamente montada quando solicitamos o uso de rotinas presente no banco de dados. Não desenvolveremos exemplos com este pacote diretamente. List Este pacote contém procedure, funções e condições de erro que podíamos usar para criar e manter listas de textos (strings). Esta era a forma alternativa de trabalharmos com arrays no Report 2.5 uma vez que a PL/SQL disponível era versão 1. No Report Builder já não temos mais necessidade desta utilização. Podemos usar o recurso do Type Table. Não desenvolveremos exemplos com este pacote diretamente. Debug O pacote Debug oferece um conjunto de rotinas, funções e condições de erro para realizarmos depuração em aplicações Reports. Os exemplos de utilização destes pacotes serão vistos no tópico relativo ao Interpreter. Para maiores informações utilize a ajuda do Report Builder para exemplos e forma de utilização. Standard Este pacote é utilizado implicitamente por nós todas as vezes que trabalhamos com PL/SQL, corresponde ao conjunto de rotinas de PL/SQL válidas no ambiente. Já está sendo utilizado nos exemplos e exercícios vistos até agora. CAPÍTULO 10: PACOTES EMBUTIDOS - 97

104 CAPÍTULO 11: VARIÁVEIS NO REPORT BUILDER INTRODUÇÃO Neste tópico trataremos dos diversos tipos de variáveis de um relatório. Trabalharemos um exemplo que mostrará a utilidade de cada uma delas. As variáveis podem ser de diversos tipos, com características e abrangências diferentes: Variáveis Locais a um PL/SQL Variáveis PlaceHolders Variáveis de Pacote Parâmetros Variáveis Locais São aquelas declaradas dentro de um gatilho ou rotina. Os valores desta variável são acessíveis apenas dentro do trecho de PL/SQL em que é declarada. Ao término do bloco de PL/SQL onde ela é declarada ela deixa de existir. Tem sua vida útil associada ao procedimento no qual estão declaradas. function BeforeReport return boolean is linguagem varchar2(100); begin tool_env.getvar('nls_lang', linguagem); return (TRUE); end; No trecho acima criamos uma variável de nome linguagem dentro da trigger Before Report. Esta variável está obtendo o nome da linguagem, território e charset em uso no banco de dados. Sua vida útil, no entanto é o término da trigger onde está inserida. O tipo destas variáveis é similar aos tipos válidos em PL/SQL (number, char, varchar2, date, <tabela ou cursor>%rowtype, <coluna>%type, tipos do usuário, etc). Uma variável local é, basicamente, uma variável de trabalho. Se desejássemos que o conteúdo da variável local apresentada no trecho de programa acima fosse incorporada ao relatório, teríamos necessidade de referenciá-la no Layout. Sabemos, no entanto, que os objetos do layout possuem como origem os objetos do Data Model. Sendo assim precisaremos de um objeto no Data Model para que nossa informação possa ser apresentada. CAPÍTULO 11: VARIÁVEIS NO REPORT BUILDER - 98

105 Coluna de Espaço Reservado (PlaceHolder) Um PlaceHolder é uma variável de trabalho que tem a possibilidade de apresentar seu conteúdo no relatório. A título de teste, criamos uma variável do tipo PlaceHolder de nome Linguagem no Data Model. Suas características são similares às de uma variável PL/SQL (com restrições). Podemos definir como tipo: caracter, data ou numérico. Podemos especificar ainda: tamanho e valor se nulo. Continuaremos o exemplo anterior, substituindo a variável local pela variável PlaceHolder (Linguagem) criada no Data Model. function BeforeReport return boolean is begin tool_env.getvar('nls_lang', :linguagem); return (TRUE); end; Em seguida refletiremos esta variável no Layout para visualizarmos o resultado. Suponhamos, agora, que desejássemos apresentar em cada página o valor acumulado de salário até o momento (no início da página) e o valor total incluindo os salários listados na página (no fim da página), ou seja, total antes e total depois. Poderíamos criar uma variável de sumário que realizasse esta soma para nós, porém, estamos estudando PlaceHolders e desejamos efetuar a soma a tempo de impressão. Portanto, criaremos duas variáveis numéricas (Anterior e Atual) e as apresentaremos no layout antes e depois da impressão dos salários. Para acumularmos o valor do salário, criaremos uma trigger de Formatação no campo vl_sal. function F_vl_salFormatTrigger return boolean is begin :anterior := :vl_sal + :anterior; :atual := atual + :vl_sal; return (TRUE); end; Quando executamos a aplicação, recebemos a mensagem ao lado. Ela nos avisa que não podeos atualizar as variáveis Atual e Anterior a tempo de montagem do layout, o que nos impede de realizar a operação desejada. Precisamos acumular o salário a tempo de montagem do layout e precisamos de uma variável no Data Model que nos permita a apresentação dos valores, no entanto não podemos atualizar esta variável durante a montagem do relatório. CAPÍTULO 11: VARIÁVEIS NO REPORT BUILDER - 99

106 Variáveis de Pacote Quando criamos a parte de especificação de um pacote no Report Builder, todas as variáveis definidas neste local são chamadas de variáveis de pacote, pois são variáveis de PL/SQL com visibilidade em toda a aplicação. As variáveis de pacote possuem os mesmos tipos de uma variável local. PACKAGE pacote IS valor number := 0; END; Na listagem acima criamos uma variável Valor no package de nome Pacote. function F_vl_salFormatTrigger return boolean is begin PACOTE.valor := :vl_sal + PACOTE.valor; return (TRUE); end; Em nossa aplicação substituímos as variáveis PlaceHolders pela variável do pacote no acúmulo de valores. E não tivemos erro de execução. Temos, ainda, de apresentar o valor. Sendo assim criaremos um trigger de Formatação para o field da variável Anterior e outro para o field da variável Atual. function F_AnteriorFormatTrigger return boolean is begin srw.set_field_num(0, pacote.valor); return (TRUE); end; A rotina Set_Field_Num permite que alteremos o valor a ser apresentado em um Field. Desta forma, alteramos o valor do field Anterior, posicionado no início da página, acumulamos os valores na variável de pacote Valor e novamente atribuímos esta variável ao field Atual, posicionado no fim da página. Numa execução normal o término da programação seria aqui. No entanto, sabemos que variáveis presentes em pacotes persistem durante a sessão. Sendo assim se viermos a executar este programa novamente (sem encerrarmos a sessão atual), o valor inicial não será zero e sim o valor acumulado na execução anterior. CAPÍTULO 11: VARIÁVEIS NO REPORT BUILDER - 100

107 Por este motivo temos mais uma tarefa a cumprir, ou seja, zerar esta variável Pacote.valor. function BeforeReport return boolean is begin tool_env.getvar('nls_lang', :linguagem); pacote.valor := 0; return (TRUE); end; Escolhemos zerar a variável no início da execução, no trigger Before Report. Parâmetros As variáveis do tipo Parâmetro já foram estudadas em tópico específico anteriormente. CAPÍTULO 11: VARIÁVEIS NO REPORT BUILDER - 101

108 CAPÍTULO 12: FORMATAÇÃO DINÂMICA Conceitos Iniciais Ao tempo de execução é possível modificar a formatação de um determinado objeto de Layout. Suponhamos que desejássemos destacar todos os valores de salário dos funcionários com matrícula entre 40 e 100. Criemos um relatório baseado na query a seguir. SELECT CD_MAT, NM_FUNC, VL_SAL FROM FUNC Defina um layout tabular sem gabarito. Retorne ao navegador e abra a tela de propriedades da coluna F_Vl_Sal. No grupo Layout Geral, encontramos uma propriedade chamada Formatação Condicional. Selecione esta propriedade para que seja mostrada a figura ao lado. Neste diálogo poderemos definir diversas condições para formatação. Editar uma condição anteriormente definida (botão Editar), remover uma condição existente (botão Deletar) e mudar a ordem de montagem das condições (botões Para Cima e Para Baixo) Pressione o botão Novo para que seja criada uma nova formatação condicional. Teremos a apresentação de um novo diálogo, mostrado abaixo. Preencheremos este diálogo com as condições associadas ao campo que desejarmos. Observe que a formatação será feita sobre o campo F_Vl_Sal, porém a condição pode ser montada em relação a qualquer dos parâmetros ou elementos presentes no Modelo de Dados. O diálogo apresentado é composto de duas partes: na parte superior trataremos de definir as condições e na parte inferior as formatações. CAPÍTULO 12: FORMATAÇÃO DINÂMICA - 102

109 Na parte superior contamos com um indicador de validade da condição (check box do lado esquerdo), de um operador para a condição (entre, maior do que, igual a, etc) e de dois campos para preenchimento de valores (no caso da condição necessitar). Se marcarmos uma nova linha de condição, à direita será habilitado um campo para que informemos o operador de ligação entre as condições (And ou Or). Na parte inferior podemos formatar a fonte, cor de preenchimento, cor de linha e a supressão do elemento na impressão (check box do lado esquerdo - Ocultar o Objeto). O botão Redefinir Formato apaga todas a formatação que tivermos estabelecido. Para efeito de teste determinaremos como condição que cd_mat esteja entre 40 e 100 e como formatação, escolheremos como fonte Bookman tamanho 12 e estilo Negrito e Itálico, cor de fundo Cinza e Cor de linha Azul. Quando você retornar ao Navegador, verificará que foi anexado um trigger de formatação ao campo F_vl_sal, cujo conteúdo é apresentado a seguir. FUNCTION F_VL_SALFORMATTRIGGER RETURN BOOLEAN IS BEGIN -- CRIADO AUTOMATICAMENTE A PARTIR DO REPORT BUILDER. IF (:CD_MAT BETWEEN '40' AND '100') THEN SRW.SET_FOREGROUND_BORDER_COLOR('BLUE'); SRW.SET_BORDER_PATTERN('SOLID'); SRW.SET_FOREGROUND_FILL_COLOR('GRAY20'); SRW.SET_FILL_PATTERN('SOLID'); SRW.SET_FONT_FACE('BOOKMAN'); SRW.SET_FONT_SIZE(12); SRW.SET_FONT_WEIGHT(SRW.BOLD_WEIGHT); SRW.SET_FONT_STYLE(SRW.PLAIN_STYLE); SRW.SET_FONT_STYLE(SRW.ITALIC_STYLE); END IF; RETURN (TRUE); END; Este trigger usa um conjunto de rotinas do pacote SRW para a montagem da formatação dos itens. Não precisamos mais usar o método antigo de atribuir os formatos para a máscara e em seguida atribuir a máscara ao campo (SRW.Set_Attr). A forma atual é bem mais amigável. Verifique as novas rotinas no capítulo sobre os pacotes do Report Builder. Execute este relatório e verifique o resultado produzido. CAPÍTULO 12: FORMATAÇÃO DINÂMICA - 103

110 Algumas Rotinas do Pacote SRW Procedure Srw.Set_Background_Border_Color ( color ) esta procedure especifica uma cor de background para a borda do objeto (é ignorada em Character Mode). De acordo com o tipo de textura (pattern) esta cor pode não ser vista. Por exemplo, se Pattern é sólido, a cor de background não é apresentada, somente a cor de foreground é apresentada. Procedure Srw.Set_Background_Fill_Color ( color ) esta procedure especifica uma cor de background para o objeto (é ignorada em Character Mode). De acordo com o tipo de textura (pattern) esta cor pode não ser vista. Por exemplo, se Pattern é sólido, a cor de background não é apresentada, somente a cor de foreground é apresentada. Procedure Srw.Set_Background_Border_Color ( color ) esta procedure especifica uma cor de background para a borda do objeto (é ignorada em Character Mode). De acordo com o tipo de textura (pattern) esta cor pode não ser vista. Por exemplo, se Pattern é sólido, a cor de background não é apresentada, somente a cor de foreground é apresentada. Procedure Srw.Set_Background_Fill_Color ( color ) esta procedure especifica uma cor de background para o objeto (é ignorada em Character Mode). De acordo com o tipo de textura (pattern) esta cor pode não ser vista. Por exemplo, se Pattern é sólido, a cor de background não é apresentada, somente a cor de foreground é apresentada. Procedure Srw.Set_Border_Pattern ( pattern ) esta rotina especifica a textura (pattern) para a borda do objeto. Este atributo é ignorado em modo Caracter. Procedure Srw.Set_Border_Width (width) esta rotina especifica a largura da borda do objeto em picas. Procedure Srw.Set_Custom_Spacing (spacing) - esta procedure determina o espacejamento interno de campos do tipo Char, Date ou Number e para boilerplates de texto. Este atributo é ignorado em modo Caracter. O valor informado é numérico em unidades VGS. Procedure Srw.Set_Fill_Pattern ( pattern ) esta rotina especifica a textura (pattern) para o objeto. Este atributo é ignorado em modo Caracter. Procedure Srw.Set_Font_Face ( face ) esta rotina especifica o tipo de fonte (ex. Arial) para o campo. Este atributo é ignorado em modo Caracter. Procedures Srw.Set_Font_Size (size) esta rotina especifica o tamanho da fonte para o campo. Este atributo é ignorado em modo Caracter. Procedure Srw.Set_Font_Style (style) esta rotina especifica o estilo da fonte para o campo. Este atributo é ignorado em modo Caracter. Os valores válidos para Style são: srw.italic_style, srw.oblique_style, srw.underline_style, srw.outline_style, srw.shadow_style, srw.inverted_style, srw.blink_style, srw.plain_style. Procedure Srw.Set_Font_Weight (weight) esta rotina especifica a intensidade da fonte para o campo. Este atributo é ignorado em modo Caracter. Os valores válidos para weight são: srw.ultralight_weight, srw.extralight_weight, srw.light_weight, srw.demilight_weight, srw.demibold_weight, srw.bold_weight, srw.extrabold_weight, srw.medium_weight. Procedure Srw.Set_Foreground_Border_Color ( color ) esta rotina especifica uma cor de foreground para a borda do objeto (é ignorada em Character Mode). Procedure Srw.Set_Foreground_Fill_Color ( color ) esta rotina especifica uma cor de foreground para o objeto (é ignorada em Character Mode). CAPÍTULO 12: FORMATAÇÃO DINÂMICA - 104

111 Procedure Srw.Set_Format_Mask ( mask ) esta rotina especifica uma máscara de formatação para campos do tipo Date ou Number. Procedure Srw.Set_Justification (justification) esta rotina especifica uma justificação horizontal para campos do tipo Char, Date ou Number. Os valores válido são: srw.left_hjust, srw.right_hjust, srw.flush_hjust, srw.center_hjust. Procedure Srw.Set_Text_Color( color ) esta rotina especifica a cor do texto para campos do tipo Char, Date ou Number. Este atributo é ignorado em modo Caracter. COR O Report Builder utiliza uma paleta de cores padrão cujo arquivo se chama default.pal e que será detalhada a seguir: A primeira parte da paleta (região superior esquerda) é composta de 16 cores básicas nomeadas como: black, white, green, darkgreen, gray, darkgray, cyan, darkcyan, red, darkred, blue, darkblue, yellow, darkyellow, magenta, darkmagenta. A segunda parte da paleta (região inferior esquerda) é composta de 8 células vazias em que podemos definir cores customizadas. (Não recomendado em função da portabilidade). As próximas 4 colunas são compostas de variações de cinza. Cada cor tem o formato gray<valor>, onde o valor varia de acordo com a percentagem de cinza. Os valores válidos estão no intervalo de 4 a 96, com incremento de 4. Por exemplo: gray4, gray8, gray12, gray16, gray20, gray24, gray28, gray32,..., gray96. O restante da paleta de cores contém cores especificadas por variações percentuais das cores vermelha, verde e azul (RGB). Sendo que: a) Os valores percentuais para vermelho ou verde são: 0, 25, 50, 75, 88 ou 100. b) Os valores percentuais para a cor azul são: 0, 50, 75, 88 ou 100. Cada cor é nomeada de acordo com o formato: r<valor>g<valor>b<valor> de acordo com seus valores RGB. Por exemplo uma cor composta de 100% de vermelho, 88% de azul e 0% de verde teria o nome: r100g0b88. Se desejarmos visualizar a cor em questão e seu nome correspondente, devemos efetuar os seguintes passos: Na opção Preferências (Preferences) do menu Ferramentas (Tools) preencher a propriedade Modo de Cor (Color Mode) com o valor Editável (Editable). No editor do Layout, selecionar o menu Formatar (Format), submenu Opções de Layout (Layout Options), opção Paleta de Cores(Color Palette). Será apresentado um diálogo contendo a paleta de cores. Ao selecionarmos uma cor, seu nome é apresentado, permitindo que o modifiquemos e façamos a customização de novas cores. A seguir apresentamos alguns valores de Pattern (textura do objeto) na figura abaixo. CAPÍTULO 12: FORMATAÇÃO DINÂMICA - 105

112 CAPÍTULO 13: CARACTERÍSTICAS GERAIS Preferências Para obtermos as preferências do Report Builder, devemos escolher o menu Ferramentas e neste a opção Preferências. Será apresentado um diálogo composto de 5 pastas que estudaremos separadamente. PASTA GERAL A pasta Geral contém características que afetam a salva e compilação dos módulos desenvolvidos utilizando este Report Builder. No diálogo apresentado encontramos as seguintes opções: Suprimir Editor de Relatórios na Abertura (Suppress Report Editor on Open) Indica se o editor de Relatório deve ou não ser apresentado a tempo de abertura de um relatório. Suprimir Paleta de Propriedades na Criação de Objetos (Suppress Property Palette on Object Creation) Esta propriedade indica se a paleta de propriedades deve ou não ser apresentada imediatamente após termos criado um objeto de layout. A marcação desta propriedade agiliza o processo de criação dos objetos do layout, no entanto, não devemos nos esquecer de que Fields e Repeating Frames necessitam de relacionamento com o Data Model antes do relatório poder ser executado. Suprimir Recuperação da Lista na Entrada da Caixa de Diálogo (Suppress List Retrieval on Dialog Box Entry) Indica que nos diálogos de acesso ao banco de dados não será trazida a lista de objetos do banco de dados por default. Unidade de Medida (Unit of Measurement) Especifica a unidade a ser usada na definição de um novo relatório. As unidades disponíveis são: centímetros, polegadas ou pontos. O default é polegadas. Modo de Cor (Color Mode) Esta opção determina como será feita a carga da paleta de cores para a aplicação. Quando criamos ou abrimos ou carregamos uma aplicação a paleta de cores associada a ela é carregada na tabela de cores do sistema. Como esta tabela possui uma quantidade de espaços limitada, o Report Builder pode encontrar dificuldade em dar manutenção a aplicações utilizando diferentes paletas. Os valores válidos para esta opção são: Editável (Editable) indica que desejamos editar, ou seja, criar nossas próprias combinações de cores. Quando a propriedade Color Mode está preenchida com este valor a paleta de cores fica vulnerável a modificações, da nossa parte e, involuntariamente, em função da necessidade de carga de uma nova paleta. Somente devemos utilizá-la quando desejarmos fazer uma modificação na paleta. Ao término devemos retornar ao estado normal, que é Read Only Shared. CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 106

113 Para que esta opção tenha efeito devemos salvar as preferências e fechar o Report Builder. Ao ativarmos novamente o Report Builder, devemos acionar o Editor de Layout e usar no menu Formatar (Format), opções de Layout (Layout Options), Paleta de Cores (Color Palette). O Report Builder utiliza uma paleta de cores padrões cujo arquivo se chama default.pal já estudado no tópico anterior. Para editar uma cor, selecione uma das cores na parte vazia (branca), click sobre o botão editar. Será apresentado um diálogo com cores básicas e matizes. Selecione uma cor básica, varie seu matiz, saturação e luminosidade, clique sobre o botão Adicionar Cores Personalizadas e dê OK. A cor definida ocupará a posição selecionada inicialmente na tabela. Salve esta nova paleta de cores (Menu Arquivo File, opção Exportar - Export, Paleta de Cores Color Palette), volte ao modo Read Only Shared, preencha o nome do novo arquivo na opção Paleta de Cores, feche o Report Builder e torne a abri-lo com esta nova paleta. Somente Leitura Compartilhado (Read Only Shared) nesta opção ao fazer a carga da paleta de cores para a tabela de cores do sistema o Report Builder verifica através do nome se uma determinada cor já existe na tabela de cores do sistema para fazer o posicionamento similar. Se a cor não existir, será adicionada à tabela de cores do sistema. Isto diminui a probabilidade de ao utilizarmos aplicações com paletas de cores diferentes termos problemas de falta de espaço na tabela de cores. Somente Leitura Privado (Read Only Private) esta opção não tem efeito no Report Builder, serve apenas para compatibilidade com o Graphics Builder. PASTA ACESSAR Esta pasta definirá opções para as ações de abertura ou salva de uma aplicação. O conteúdo da pasta é analisado a seguir: Acessar indica se os módulos serão lidos / gravados em arquivo (file) do sistema operacional, no banco de dados ou arquivo/banco de dados. Esta última opção indica que a cada abertura ou salva será mostrado um diálogo que questionará o usuário do local de armazenamento (arquivo ou banco de dados). Mostrar esta opção filtra o que deve ser apresentado no caso de uma leitura. Podemos escolher Relatórios, Gabaritos, Consultas, Bibliotecas PL/SQL ou Tudo. Mais de uma opção pode ser marcada simultaneamente. CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 107

114 PASTA ASSISTENTES Esta pasta indica se desejamos ou não que o diálogo de abertura dos assistentes seja mostrado como primeiro diálogo. As opções disponíveis são as seguintes: Diálogo de Abertura (Welcome Dialog) Indica se este diálogo deve ser apresentado quando o Report Builder é inicializado. Página de Abertura do Assistente de Relatórios (Report Wizard Welcome Page) Indica se este diálogo deve ser apresentado quando iniciamos a execução do Assistente de Relatório. Página de Abertura do Assistente da Web (Web Wizard Welcome Page) Indica se este diálogo deve ser apresentado quando iniciamos a execução do Assistente de Web. Página de Abertura do Assistente de Gráficos (Chart Wizard Welcome Page) Indica se este diálogo deve ser mostrado quando iniciamos o Assistente de Gráficos. Espaçamento entre Objetos do Assistente de Relatórios (Não há Gabarito) Este conjunto de propriedades determina o espaço a ser deixado entre os objetos definidos no Layout. Somente válido quando não houver gabarito especificado. Estes valores são fornecidos em unidade de caracter. Intervalo Horizontal (Horizontal Gap) determina o intervalo horizontal entre um objeto e os objetos que ele envolve. Por exemplo entre o Frame (externo) e o Repeating Frame (interno). Esta especificação é ignorada se gerarmos um relatório Character Mode. Intervalo Vertical (Vertical Gap) determina o intervalo vertical entre um objeto e os objetos que ele envolve. Por exemplo entre o Frame (externo) e o Repeating Frame (interno). Esta especificação é ignorada se gerarmos um relatório Character Mode. Entrecampo Horizontal (Horizontal Interfield) determina o espaço horizontal entre dois campos (fields). Entrecampo Vertical (Vertical Interfield)- determina o espaço vertical entre dois campos (fields). PASTA VALORES DE RUNTIME Estas propriedades afetam o relatório durante a execução dele na sessão corrente. Estas especificações não são armazenadas com o relatório em desenvolvimento. Se desejarmos torná-las permanentes, devemos preencher a propriedade Initial Value de cada um dos parâmetros. Neste diálogo podemos atribuir valores aos parâmetros de sistema. CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 108

115 PASTA DEFINIÇÕES DE RUNTIME As opções desta pasta afetam à execução de uma aplicação através do Report Builder. As informações presentes nesta pasta são descritas a seguir: Tamanho do Array (Arraysize) especifica o tamanho da área de memória para recuperação de linhas do banco de dados. É fornecido em Kbytes. Pode variar de 1 a Este valor poderá ser utilizado para cada query do relatório. O valor default é 10Kb. Buffers (Buffers) especifica o tamanho da área de memória virtual cache para a execução do relatório. O valor é fornecido em Kbytes. Pode variar de 1 a O valor default é 640Kb. Tronco Extenso (Long Chunk) determina o tamanho (em Kbytes) dos incrementos em que o Report Builder recupera valores de uma coluna Long. Quando recuperamos um valor Long, podemos fazê-lo em partes (incrementos) em vez de trazê-lo de uma só vez em função de restrições de memória. Largura x Altura da Página (Pagesize) determina o tamanho da página física do relatório. O tamanho especificado deve ser suficiente para conter o layout definido, caso contrário o relatório não será executado. A unidade desta medida depende da especificação de Unidade de Dimensionamento (Unit of Measurement). Obtendo Êxito (On Success) indica o procedimento a ser adotado se o relatório acabar com sucesso. A ação definida aqui é executada após o trigger After Report ter sido executado. Ocorrendo Falha (On Failure ) - indica o procedimento a ser adotado se o relatório acabar com fracasso. A ação definida aqui é executada após a falha ter ocorrido. Perfil (Profile) indica o nome do arquivo no qual desejamos armazenar informações estatísticas de Performance geradas durante a execução do relatório. Se especificarmos um nome de arquivo, o Report builder calcula estatísticas relativas ao tempo total e tempo de CPU gasto para a execução do relatório. Arquivo com Erro (Error File) corresponde ao nome de um arquivo onde o Report Builder armazenará mensagens de erro. Função (Role) especifica uma role do banco de dados a ser validada quando o relatório for executado. A role é ignorada pelo Report Builder. Form de Parâmetros (Parameter Form) indica se a tela de Parâmetros deve ser apresentada a tempo de execução. Somente Leitura (Read Only) determina a utilização do comando Set Transaction Read Only, que garante a leitura consistente quando utilizamos mais de uma query no relatório. Esta opção só é útil se nosso relatório tiver mais de uma query e for imprescindível garantir a leitura relativamente a um mesmo momento. O Oracle já garante a leitura consistente individualmente por comando, por default. Executar Depuração (Run Debug) com esta opção marcada o Report Builder faz verificações extras no módulo. São elas: a) Frames ou Repeating Frames que cruzam mas não englobam (contém) completamente outro objeto. b) Objetos de Layout com dependência de página que não tem tamanho fixo. O Report Builder fará a marcação destes objetos com tamanho fixo independente da propriedade Elasticidade Vertical ou Horizontal. c) Variáveis Bind referenciadas (em PL/SQL) a uma freqüência inválida. Submissão Automática (Auto Commit) indica se as modificações relativas a banco de dados (por exemplo Insert) devem ser automaticamente efetivadas. SQL de Não-bloqueio (Non-Blocking SQL) indica se outros programas(oracle ou não Oracle) podem ser executados enquanto o Report Builder está obtendo dados do banco de dados. Páginas em Branco (Blank Pages) indica se as páginas em branco devem ou não ser impressas quando o relatório for enviado para a impressora. CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 109

116 Estudando o Módulo As propriedades relativas ao relatório são armazenadas juntamente com o módulo e afetam a todas as execuções deste. São subdivididas em quatro grandes grupos: Relatório (Report), Janela de Form de Parâmetros (Parameter Form Window), Escapes de Relatório (Report Escapes) e Modo Caractere (Character Mode). RELATÓRIO (REPORT) As propriedades deste grupo são: Unidade de Medida (Unit of Measurement) - Especificação da unidade de medida em que o Report Builder irá trabalhar. As opções são: Centímetros, Polegadas e Pontos. Máx. de Páginas de Corpo Horizontais (Maximum Horizontal Body Pages) - Número máximo de páginas físicas no corpo do relatório (para desenho), no sentido horizontal. Máx. de Páginas de Corpo Verticias (Maximum Vertical Body Pages) - Número máximo de páginas físicas no corpo do relatório (para desenho), no sentido vertical. Ordem de Impressão do Painel (Panel Print Order) Mostra a ordem de impressão das páginas físicas: para o lado e para baixo ou para baixo e para lado. Direção (Direction) - Associado ao Panel Print Order indica a direção (esquerda para direita ou vice-versa). Título do Previsualizador (Previewer Title) determina o título do Previsualizador (Previewer). Nome da Função (Role Name) indica o nome da role a ser adquirida a tempo de execução. Observe que uma role só pode ser adquirida se o usuário tiver autorização (Grant) para esta role no banco de dados. Para informarmos a password da role (se ela tiver) devemos clicar sobre o botão que é apresentado para a propriedade para que seja apresentado diálogo adequado. Distribuição (Distribute) Aciona o diálogo para distribuição do relatório. O número de páginas de corpo não representa o número de páginas necessárias para a impressão de um relatório, quem determina o número de páginas é a Query. Desta forma, poderão ser impressas dez mil páginas ou uma e o parâmetro maximum body pages (horizontal e vertical) continuará sendo 10 x 10. Este número de corpo é definido apenas para que possamos desenhar o relatório na página de Layout. JANELA DE FORM DE PARÂMETROS (PARAMETER FORM WINDOW) Neste grupo faremos a especificação de tamanho para a tela de solicitações de parâmetros a ser apresentada ao usuário. Largura (Width) Largura da tela de parâmetro apresentado a tempo de execução do relatório. É expressa na unidade de dimensionamento definida. Altura (Height) Altura da tela de parâmetro apresentado a tempo de execução do relatório. É expressa na unidade de dimensionamento definida. Número de Páginas (Number of Pages) - quantidade de páginas desta tela (Form). CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 110

117 ESCAPES DE RELATÓRIO (REPORT ESCAPES) Estes valores são aplicáveis a relatórios que sejam gerados para formato HTML e visualizados em um Bowser. Antes do Tipo de Relatório (Before Report Type) - especifica o tipo de cabeçalho a ser apresentado no início do documento (relatório). Os valores válidos para esta propriedade são Texto (Text) e Arquivo (File). Se preenchermos com texto, a propriedade Before Report Value deve conter textos de comandos de HTML. Se preenchermos com arquivo, a propriedade Before Report Value pode conter textos ou referências a arquivos gráficos (em HTML). Antes do Valor do Relatório (Before Report Value) - especifica qualquer nome de arquivo ou texto contendo comandos de HTML, dependendo do que tivermos especificado na propriedade Before Report Type. Depois do Tipo de Relatório (After Report Type) - especifica o tipo de rodapé a ser apresentado ao fim de todo o documento (relatório). Os valores válidos para esta propriedade são Texto (Text) e Arquivo (File). Se preenchermos com texto, a propriedade After Report Value deve conter textos de comandos de HTML. Se preenchermos com arquivo, a propriedade After Report Value pode conter textos ou referências a arquivos gráficos (em HTML). Depois do Valor do Relatório (After Report Value) - especifica qualquer nome de arquivo ou texto contendo comandos de HTML, dependendo do que tivermos especificado na propriedade After Report Type. Antes do Tipo de Página (Before Page Type) - especifica o tipo de cabeçalho a ser apresentado no início de cada página do relatório. Os valores válidos para esta propriedade são Texto (Text) e Arquivo (File). Se preenchermos com texto, a propriedade Before Page Value deve conter textos de comandos de HTML. Se preenchermos com arquivo, a propriedade Before Page Value pode conter textos ou referências a arquivos gráficos (em HTML). Antes do Valor do Página (Before Page Value) - especifica qualquer nome de arquivo ou texto contendo comandos de HTML, dependendo do que tivermos especificado na propriedade Before Page Type. Depois do Tipo de Página (After Page Type) - especifica o tipo de rodapé a ser apresentado ao fim de cada página do relatório. Os valores válidos para esta propriedade são Texto (Text) e Arquivo (File). Se preenchermos com texto, a propriedade After Page Value deve conter textos de comandos de HTML. Se preenchermos com arquivo, a propriedade After Page Value pode conter textos ou referências a arquivos gráficos (em HTML). Depois do Valor de Página (After Page Value) - especifica qualquer nome de arquivo ou texto contendo comandos de HTML, dependendo do que tivermos especificado na propriedade After Page Type. Antes do Tipo de Form (Before Form Type) - especifica o tipo de cabeçalho a ser apresentado antes de cada tela de parâmetros. Os valores válidos para esta propriedade são Texto (Text) e Arquivo (File). Se preenchermos com texto, a propriedade Before Form Value deve conter textos de comandos de HTML. CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 111

118 Se preenchermos com arquivo, a propriedade Before Form Value pode conter textos ou referências a arquivos gráficos (em HTML). Antes do Valor do Form (Before Form Value) - especifica qualquer nome de arquivo ou texto contendo comandos de HTML, dependendo do que tivermos especificado na propriedade Before Form Type. Depois do Tipo de Form (After Form Type) especifica o tipo de rodapé a ser apresentado ao fim da tela de parâmetros. Os valores válidos para esta propriedade são Texto (Text) e Arquivo (File). Se preenchermos com texto, a propriedade After Form Value deve conter textos de comandos de HTML. Se preenchermos com arquivo, a propriedade After Form Value pode conter textos ou referências a arquivos gráficos (em HTML). Depois do Valor de Form (After Form Value) especifica qualquer nome de arquivo ou texto contendo comandos de HTML, dependendo do que tivermos especificado na propriedade After Form Type. Tipo de Controle de Página de Navegação (Page Navigation Control Type) pode ser preenchido com File ou Texto. Indica um trecho de script (Java ou Html) a ser incluído nas páginas do relatório que possibilitem a navegação (na Web) entre as páginas. Valor de Controle da Página de Navegação (Page Navigation Control Value) - pode ser preenchido com o nome do arquivo que contém o script ou diretamente o texto do script, de acordo com o que tiver sido definido na propriedade anterior. MODO CARACTER (CHARACTER MODE) Indica os tipos de conversações a serem realizadas para que o relatório possa ser executado em ambiente caracter. Projetar em Unidades de Caractere (Design in Character Units) a grade (grid) no layout será em unidades de caracteres. O uso desta opção juntamente com a opção Include Borders faz com que o editor de layout mostre bordas em modo caracter para os objetos com espessura de linha maior que zero. Usar Linha de Dicas do Previsualizador (Use Previewer Hint Line) É a penúltima linha de texto mostrada na tela do Previewer. Para alterarmos o conteúdo padrão da linha, devemos marcar esta propriedade com Sim (Yes) e preencher a propriedade Previewer Hint LineText com o texto desejado. Incluir Objetos de Bitmap (Include Bitmapped Objects) Converte todos os objetos bitmapped (isto é Oracle Graphics e objetos boilerplates, exceto textos, linhas e retângulos) para caixas quando o relatório for executado no modo caracter. Se esta opção não for marcada todos os objetos bitmapped e qualquer âncora explícita para eles será removida quando o relatório for executado no modo caracter. Incluir Bordas (Include Borders) Apresenta uma borda no modo caracter para qualquer objeto que tenha uma largura de linha maior que zero (em bit-mapped). Se não marcarmos esta opção, todas as bordas serão omitidas. Se especificarmos isto e usarmos a opção Design in Character Units o editor de Layout mostra as bordas em caracteres para objetos com espessura linha maior que zero. Desativar Item de Menu do Host (Disable Host Menu Item) Inibe o item Host no menu File no Runtime Parameter Form e no Live Previewer. O item Host aparece no menu File do Oracle Reports no modo caracter. Desativar Tecla de Tela Dividida (Disable Split Screen Key) Inibe as teclas de função [SPLIT VERTICAL] e [SPLIT HORIZONTAL]. Desativar Tecla de Zoom (Disable Zoom Key) Inibe a tecla de função [ZOOM/UNZOOM] no Live Previewer. CAPÍTULO 13: CARACTERÍSTICAS GERAIS - 112

119 CAPÍTULO 14: DISTRIBUINDO E DELIMITANDO Neste capítulo trataremos de duas capacidades do Report Builder 6i, distribuição do relatório e uso de delimitadores. Capacidade de Distribuição Podemos efetuar a distribuição do relatório gerado para diversos destinatários. Esta distribuição pode ser feita a nível de relatório, ou seja todo o relatório é distribuído para meios de armazenamento diferentes, quantidade de cópias diferentes, usuários diferentes, etc. Esta distribuição também pode ser associada a seções diferentes (Layout Model), desta forma cada seção produzirá arquivos independentes com características diferenciadas. Como primeiro passo devemos definir a lista de distribuição. Esta lista poderá ser gerada dentro do Report Builder ou podemos criar um arquivo com extensão DST. Faremos um primeiro teste utilizando o diálogo fornecido pelo Report Builder. Crie um relatório de nome RelDistr a partir da tabela Depto (todas as colunas), formato Tabular e gabarito Cyan Grid Landscape. A propriedade Distribuição existe tanto a nível de Relatório quanto a nível de Seção (verifique). Suponhamos, então, que desejássemos definir, para todo o relatório, uma lista de distribuição. Começaríamos abrindo a tela de propriedades do relatório (módulo). Quando selecionamos a propriedade Distribuição, nos é apresentado o diálogo abaixo. Neste diálogo as seguintes informações devem ser preenchidas: Id de Distribuição - um identificador único para a distribuição. Pode ser numérico ou alfanumérico. NomeDes (Desname) - indica o destino, que pode ser um diretório com nome de arquivo (o diretório deve existir), impressora ou ID (ou lista de distribuição). FormatoDes (Desformat) - indica formato do arquivo ou driver da impressora quando o Tipo de Destino (Destype) for arquivo. CAPÍTULO 14: DISTRIBUINDO E DELIMITANDO - 113

120 Os valores válidos para este campo são apresentados por uma lista. Podem ser: BitMap (default, especifica o resultado como mostrado pelo Report Builder), HTML (formato compatível com browsers que suportem HTML 3.0), HTMLCSS (formato compatível com browsers que suportem HTML 3.0 com Cascading Style Sheets), PDF (pode ser lido por um PDF viewer), ASCII (especifica formato caracter, que pode ser lido por uma aplicação compatível com padrão MAPI) ou RTF (formato Rich Text Format, compatível com editores tais como Microsoft Word). TipoDes (Destype) - indica o tipo de destino, que pode ser: FILE (indica um arquivo nomeado por NomeDes), MAIL (especifica um identificado por NomeDes; o parâmetro de sistema Mode deve estar preenchido com Character) ou Printer (cuja impressora é identificada por NomeDes). Cópias (Copies) - determina a quantidade de cópias para esta distribuição. Podemos incluir diversas linhas, indicando vários destinos diferentes, que serão gerados simultaneamente na execução do relatório. Preencha este diálogo da mesma forma que o conteúdo da figura anterior. A execução deste relatório deve ser feita pela opção Distribuir do menu Arquivo. Uma execução normal (com o botão Executar não aciona a lista de distribuição). Quando acionamos a distribuição desta forma o Report Builder apresenta uma tela de alerta confirmando a distribuição. Execute e verifique os resultados. Se desejássemos, porém, executar esta mesma ação (gerando o mesmo resultado) para um relatório em produção utilizaríamos um arquivo de distribuição (extensão.dst) com o layout apresentado no texto abaixo: 1: DESNAME=REL_DIST1.HTM DESFORMAT=HTMLCSS DESTYPE=FILE COPIES=1 LEVEL=REPORT 2: DESNAME=REL_DIST2.RTF DESFORMAT=RTF DESTYPE=FILE COPIES=1 LEVEL=REPORT Onde o número 1: ou 2: correspondem ao ID da distribuição que utilizamos quando preenchemos o diálogo online. Como informação adicional temos o parâmetro Level, que indica, para cada destino, qual a parte do relatório deverá ser enviada. Os valores válidos para este parâmetro são: Report (indicando todo o relatório), Header_Section (indicando apenas a seção Cabeçalho), Main_Section (indicando apenas a seção principal) e Trailer_Section (indicando apenas a seção Trailer). Para executarmos este relatório, podemos gerar um ícone no Windows e no campo Alvo digitar o texto abaixo: C:\ORAWIN95\BIN\RWRUN60.EXE MODULE=RELDISTR.REP USERID=DESENV/DESENV@DESENV DESTINATION=ARQDIST.DST DISTRIBUTE=YES Não se esqueça que o campo Iniciar Em deve estar direcionado para o diretório onde se encontra o módulo. CAPÍTULO 14: DISTRIBUINDO E DELIMITANDO - 114

121 Uso de Delimitadores Podemos especificar delimitadores no relatório com a finalidade de separação dos diversos dados, facilitando a importação destes dados em outras ferramentas, tais como Microsoft Excel. Esta opção permite a definição de quatro informações: Delimitador Máscara de formato para números Máscara de formato para datas Envoltório de células Para efetuarmos os testes criaremos um relatório bem simples contendo todas as colunas da tabela Func, formato Tabular, sem gabarito e sem título para as colunas, de tal forma que apenas os dados sejam gerados. USANDO O REPORT BUILDER Como teste inicial faremos a geração pelo próprio Report Builder. Selecione o submenu Criar para Arquivo do menu Arquivo. Na lista de opções apresentadas escolha Texto para que o diálogo da figura abaixo seja apresentado. Observe que poderemos escolher um delimitador para separação dos dados e um outro para envoltório destes dados, isto pode ser útil quando trabalhamos com valores numéricos editados e usamos como separados a vírgula ou o ponto. A listagem abaixo apresenta parte de uma linha exemplo do resultado gerado para o tipo de preenchimento apresentado na figura anterior. "Cr$10,00":"Cristina":"HENDERSON":"A00":"Cr$4.190,00":"01/01/95":"Cr$66,00":" Observe que como escolhemos um formato para números, este formato foi aplicado a todos os números (matrícula, cargo, grau de instrução, etc). CAPÍTULO 14: DISTRIBUINDO E DELIMITANDO - 115

122 USANDO A LINHA DE COMANDO Repetiremos o mesmo relatório, porém utilizando os parâmetros diretamente na linha de comando. Preencha os parâmetros de sistema visíveis no Report Builder com os seguintes valores: Desname - <nome do programa>.txt Desformat - Delimited Destype File Compile o relatório gerando uma versão.rep. Crie um ícone no Windows com o texto apresentado a seguir, na linha de comando. C:\ORAWIN95\BIN\RWRUN60.EXE MODULE=<NOME>.REP USERID=DESENV/DESENV@CURSO DELIMITER=: DATEFORMATMASK=DD/MM/RR CELLWRAPPER=TAB NUMBERFORMATMASK=LNNNGNN0D00 Na listagem anterior apresentamos os parâmetros que substituem o diálogo online apresentado anteriormente: Delimiter determina o delimitador a ser usado entre os dados, como delimitador. DateFormatMask determina a máscara de formatação para os dados do tipo data. NumberFormatMask determina a máscara de formatação para os dados numéricos. CellWrapper determina um valor a ser incluído antes de depois de cada dado, como um envoltório da célula. Observe que para o parâmetro CellWrapper utilizamos a palavra reservada Tab no lugar de um caracter. Verifique na relação de parâmetros do Report Builder os valores válidos para este parâmetro. Na listagem a seguir apresentamos parte da linha gerada usando os parâmetros apresentados anteriormente. Cr$30,00 : SANDRA : KWAN : C01 : Cr$415,00 : CAPÍTULO 14: DISTRIBUINDO E DELIMITANDO - 116

123 CAPÍTULO 15: RELATÓRIOS MATRICIAIS Conceitos Uma matriz é um relatório tabular de, pelo menos, 4 conjuntos de dados: Um conjunto de dados é mostrado ao longo da largura da página. Um conjunto de dados é mostrado verticalmente na página. Um conjunto de dados é o produto do cruzamento, que determina todas as possíveis localizações onde os dados se cruzam. Um conjunto de dados é mostrado como o recheio das células que se cruzam. O esquema da figura ao lado nos mostra estas características. Os conjuntos de dados desenvolvidos ao longo da largura da página, tanto horizontalmente quanto verticalmente, são chamados de grupos de dimensionamento porque determinam a dimensão da matriz. Sendo assim se uma matriz é bidimensional possui um grupo se desenvolvendo horizontalmente e outro verticalmente; se uma matriz é tridimensional possui um grupo se desenvolvendo verticalmente, outro horizontalmente e um terceiro na horizontal ou vertical. Existem quatro tipos gerais de relatórios matriciais a serem abordados neste material, porém poderemos criar outros tipos a nosso critério. São eles: Simple Matrix Nested Matrix Cross Product Master/Detail Matrix Break Para caracterizarmos as diferenças entre cada um destes tipos criaremos relatórios exemplo de cada um deles. Nosso estudo começará pelo modelo Simple, que nos permitirá estudar três aspectos fundamentais de um relatório matricial: A quantidade de queries A quantidade de grupos A presença de sumários CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 117

124 Simple Matrix com uma Query Neste primeiro exemplo usaremos o Assistente para criar um relatório de duas dimensões que contenha a quantidade de funcionários por cargo e por departamento. De acordo com esta especificação, criamos uma query que atenda a esta solicitação. Veja o seguinte texto: SELECT CD_DEPTO, NR_CARGO, COUNT(*) QTD FROM FUNC GROUP BY NR_CARGO, CD_DEPTO O Assistente de Relatório nos questionará em seguida sobre os dados que se desenvolverão verticalmente na página. Escolheremos cd_depto. Como próximo passo, devemos especificar o grupo que se desenvolverá horizontalmente na página. Neste caso escolheremos nr_cargo. Em seguida, devemos informar o que será apresentado no interior de cada célula, ou seja, o recheio. Escolheremos o campo QTD. Criamos este primeiro exemplo sem gabarito para que tivéssemos somente as informações definidas por nós. Para que o resultado ficasse mais claro, no entanto, o grupo produto do cruzamento foi pintado de preto para ficar em destaque. Veja o resultado abaixo. Salvamos este relatório com o nome de Matriz1. Para que tenhamos plenos conhecimentos do que o Report Builder faz quando monta um relatório matricial, repetiremos a criação deste relatório, porém, faremos manualmente cada uma das etapas. Abra, portanto, um novo relatório sem a ajuda do assistente e navegue para o Data Model. Nossa primeira etapa será criar a mesma query definida anteriormente diretamente no modelo de dados. Com nossos conhecimentos do Report Builder já sabemos que a freqüência de impressão está relacionada diretamente aos grupos, portanto, se desejamos que haja um desenvolvimento horizontal e outro vertical, devemos ter pelos menos dois grupos. CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 118

125 No nosso caso, desejamos ainda um terceiro grupo que seja o recheio das células. Veja o resultado na figura ao lado. Observe na figura que os grupos foram renomeados para que indicassem exatamente a informação que contém. Não deixe de fazer esta ação, pois faremos muitas referências ao nome do grupo. Outro fato que devemos observar é a ordem em que foi feita a divisão dos grupos. Os grupos de dimensionamento ficam acima do grupo recheio, ou seja, os grupos de dimensionamento são pais do grupo de recheio. Para cada célula (chave cargo e departamento) será obtido um recheio. Neste resultado ainda falta a determinação de um elemento que ligue os dois grupos de dimensionamento, isto é, um grupo que faça o cruzamento de cada elemento vertical com cada elemento horizontal estabelecendo um produto. Este grupo é chamado de Cruzamento. O Repeating Frame horizontal se desenvolve no sentido Down e deve ser criado primeiro (ficará atrás), será associado ao grupo Departamento. O Repeating Frame vertical se desenvolve no sentido Across e será associado ao grupo Cargo. Para criarmos o grupo de cruzamento devemos selecionar simultaneamente os dois Repeating Frames e escolher a opção Matriz de Layout do menu Inserir. O resultado está na figura ao lado. Podemos defini-lo com a ferramenta Produto Híbrido da paleta de ferramentas (vertical) do Modelo de Dados. Com esta ferramenta devemos envolver os dois grupos de dimensionamento. Com esta especificação definimos o Modelo de Dados de uma Simple Matrix. Antes de passarmos ao Layout, observemos que possuímos 4 grupos, portanto precisaremos de quatro objetos no Layout que se relacionem com estes grupos. Definiremos, inicialmente, os dois primeiros Repeating Frames relativos ao relatório. O objeto marcado corresponde ao grupo de cruzamento. Podemos, então, dar cor diferenciada a este grupo para que tenhamos exata visibilidade do resultado gerado. Como próxima etapa, criaremos o grupo Recheio, que será desenhado dentro (e sobre) o grupo de cruzamento. Passaremos, agora a definir as colunas do Modelo de Dados nos locais correspondentes no Layout. Na figura ao lado vemos o modelo de layout de nosso relatório matricial. Na execução deste relatório verificamos que o grupo Recheio só é montado quando existem dados a serem apresentados e que a célula da matriz é montada em todas as situações. CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 119

126 SIMPLE MATRIX COM TRÊS QUERIES Tentaremos, a seguir, gerar o mesmo resultado, porém partindo de comandos Selects distintos. Suponhamos, então que tivéssemos uma tabela de Cargos, uma tabela de Departamentos e uma tabela de Funcionários. Se desejássemos apresentar a quantidade de funcionários por cargo, poderíamos preparar que query contendo todos os cargos, outra query contendo todos os departamentos e uma terceira que apresentasse a quantidade de funcionários para os valores obtidos anteriormente. Uma vez que não temos uma tabela de cargos, faremos uma simulação partindo da tabela de funcionários. Teríamos, então, as seguintes Queries: Q1 Select distinct nr_cargo from func; Q2 Select cd_depto from depto; Q3 Select cd_depto, nr_cargo, count(*) qtd from func group by nr_cargo, cd_depto; Na terceira query precisamos selecionar o cargo e o departamento a fim de estabelecer uma ligação com as queries anteriores. A primeira etapa deste relatório é mostrada na próxima figura. Observe que criamos o grupo Matriz (ou de cruzamento) antes de relacionarmos a terceira Query. Esta ordem deve ser respeitada para que o resultado seja satisfatório. Na figura ao lado concluímos o Modelo de Dados deste relatório. A ligação foi feita entre a coluna nr_cargo e a coluna num_cargo, entre a coluna cd_depto e a coluna cod_depto. Clique no botão Ligação de Dados (Data Link), em seguida na coluna nr_cargo e, sem soltar o mouse, arraste-o para a coluna num_cargo, soltando-o em seguida. Repita esta operação para as colunas cd_depto e cod_depto. A montagem do Layout é semelhante ao anterior, com a diferença de que as colunas cod_depto e num_cargo não são apresentadas no layout. Foram criadas apenas com a finalidade de relacionar as queries. Conclusão Concluímos destes exemplos que desenvolvemos que o número de queries não importa para o resultado final do relatório. O que define a quantidade de dimensões e a complexidade da matriz é o número de grupos. CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 120

127 SIMPLE MATRIX COM SUMÁRIO Partiremos do relatório Matriz2 (Simple Matrix com uma Query) para a inclusão de sumários no resultado. Suponhamos que desejássemos incluir neste relatório a quantidade total de funcionários por cargo, a quantidade total de funcionários por departamento e um total geral de funcionários. A inclusão de colunas de sumário é feita no grupo matricial quando o sumário estiver relacionado a pelo menos uma das dimensões da matriz, como é o caso da quantidade de funcionários por cargo (dimensão cargo) e a quantidade de funcionários por departamento (dimensão departamento). Já o total geral de funcionários não está associado a nenhuma dimensão, portanto, deve ser criado fora dos grupos. A criação de sumário para uma matriz requer mais informação que a criação de sumário para outros tipos de relatório. Quando criamos sumários para colunas da sua matriz, necessitamos indicar: A freqüência do sumário - A freqüência especifica os grupos de dimensionamento para os quais desejamos calcular o sumário. A ordem na qual devemos calcular o sumário - A ordem determina o critério de navegação para o cálculo (de cima para baixo ou da esquerda para a direita). No Report Builder esta especificação é fornecida com a opção Product Order para o(s) sumário(s). Obtenha a tela de propriedades da coluna de sumário Sum_Depto. Trata-se de uma soma (propriedade função) relativa ao item qtd (propriedade origem), que deve ser zerada quando houver quebra de departamento (propriedade reinicializar em), cujo valor, se não existir, deve ser mostrado zero (propriedade valor se nulo) e que para realizar a soma precisa que os valores estejam ordenados por departamento (propriedade ordem do produto). A única propriedade ainda não vista é justamente a propriedade Ordem do Produto (Product Order), a qual indica qual a ordenação a ser aplicada aos valores para que seja gerado o resultado desejado. No exemplo atual, a ordenação dos dados apenas por departamento ou por departamento e cargo simultaneamente não faz diferença para o resultado. O que é necessário para a soma correta da quantidade de funcionários por departamento é que os dados estejam em ordem de departamento. Baseado nestas explicações crie o sumário relativo ao cargo. O sumário geral também não requer nenhuma informação adicional. Passemos, então, ao layout para a criação destes sumários nos locais adequados. Veja o posicionamento do sumário na figura o lado. CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 121

128 Nested Matrix Neste tipo de matriz existem mais de duas dimensões. Trabalharemos com a quantidade de funcionários por cargo, por departamento e por sexo. Modelo de Dados Podemos criar o modelo de dados para uma Nested Matrix com uma query ou múltiplas queries. Devemos ter, pelo menos três grupos no interior do grupo de cruzamento. A listagem ilustra a query utilizada para desenvolvimento deste teste. SELECT NR_CARGO, CD_DEPTO, IN_SEXO, COUNT(*) QTD FROM FUNC GROUP BY NR_CARGO, CD_DEPTO, IN_SEXO Este modelo matricial é similar ao Simple, com a diferença da quantidade de dimensões. Utilizaremos os grupos na seguinte oredem: Cargo, Departamento e Sexo. Prepare o Data Model adequadamente. Layout Layout para uma Nested Matrix também é semelhante ao Simple, independendo do uso de uma ou múltiplas queries no seu modelo de dados. Na figura anterior observamos a presença de mais de um Repeating Frame no sentido vertical(cargo e sexo) cruzado por um Repeating Frame no sentido horizontal (departamento). Execute este relatório e confira o resultado. CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 122

129 Cross Product Master/Detail Este tipo de relatório matricial também é similar ao anterior, a diferença é que neste tipo de matriz, os registros que não possuem valor não aparecem. MODELO DE DADOS O modelo de dados deve ser criado com mais de uma query para que seja possível estabelecer o relacionamento Master/Detail. Novamente, devemos ter pelo menos três grupos pertencentes ao grupo de cruzamento, como vemos na figura. Observe que existe um relacionamento Master/Detail entre duas das dimensões do grupo. Uma vez que um dos grupos depende do outro, somente os registros detalhe relacionados aparecerão para cada registro pai. LAYOUT O layout para um relatório Cross-Product Master/Detail está apresentado na figura abaixo. Observe que o resultado da execução deste teste apresenta muito menos linhas que o do exemplo anterior (Nested Matrix). CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 123

130 Matrix Break Um relatório do tipo Matrix Break possui uma nova matriz para cada registro pai. No exemplo ao lado, para cada ano (master) no relatório, existe uma única matriz que contém somente os cargos de cada sexo para aquele departamento. MODELO DE DADOS Quando desejamos uma matriz com quebra, devemos definir no modelo de dados, um grupo pai para o grupo do cruzamento. LAYOUT A figura a seguir ilustra o layout para uma matriz com quebra. Observe que o repeating frame contendo o campo ano (F_cd_depto) envolve os Repeating Frames e objeto matricial que representam a matriz. Este Repeating Frame externo é que faz com que uma matriz separada seja apresentada para cada departamento. CAPÍTULO 15: RELATÓRIOS MATRICIAIS - 124

131 CAPÍTULO16: O ORACLE 8I E O REPORT BUILDER 6I Suporte a Large Objects (Lobs) Podemos obter dados de colunas Lobs para a construção de relatórios. Façamos um pequeno exemplo ilustrativo desta capacidade. Construa uma aplicação de nome Tlob que apresente as colunas c_clob1, c_blob1 e c_number. Use o Assistente para desenvolver a query. Observe na figura ao lado que no Data Model temos a indicação (através de ícone) do tipo de dado selecionado. Para a coluna Blob, o ícone apresentado é 0101, indicando que se trata de um valor binário. Antes de passar para o layout, abra a tela de propriedades para a coluna Blob e altere o valor da propriedade Formato de Arquivo para Imagem para que seja trazida a imagem armazenada no banco e não seu texto. Acione, agora, o Assistente de Relatório para a montagem do layout. Na pasta Labels, altere o tamanho dos campos C_Clob1 para 50 (o default é 4) e C_Blob1 para 100 (o default também é 4) a fim de que o layout gerado seja compatível com as informações armazenadas. Inicialmente gere o relatório sem modelo para que o resultado fique mais claro. Para que a imagem seja apresentada com um tamanho maior podemos indicar elasticidade na vertical tanto para o C_Blob1 quanto para o C_Clob1. Se você escolher esta ação não esqueça de expandir na vertical o Repeating Frame que envolve os objetos. CAPÍTULO 16: O ORACLE 8I E O REPORT BUILDER

132 Suporte a objetos do Oracle8 O suporte a objetos do Oracle8 ocorre de forma similar à do Form Builder. Criemos uma aplicação de nome TbDepto com a ajuda do Assistente de Relatórios. A query utilizada será aquela apresentada na listagem abaixo. SELECT * FROM TB_DEPTO No diálogo que apresenta os Campos Disponíveis para que venhamos a escolher aqueles que serão apresentados no relatório, nos deparamos novamente com as mesmas características apresentadas pelo Form Builder. Ou seja, as colunas do tipo Ref podem ser expandidas para que venhamos a selecionar os atributos presentes no objeto apontado pela referência. Observe na figura acima que selecionamos as colunas cd_depto, nm_depto, cd_mat (gerente) e nm_sobrenome(gerente). Conclua o desenvolvimento deste relatório. Na pasta de layout aumente o tamanho da coluna nm_depto para 40 posições e nm_sobrenome para 15. A execução deste relatório se processa normalmente. Observemos, no entanto, o Data Model produzido (veja a figura ao lado). Ele apresenta todas as colunas da tabela Tb_Depto (cd_depto, nm_depto, cd_depto_ctb e cd_gerente). Como não utilizamos nenhum atributo do objeto apontado pela referência cd_depto_ctb, esta aparece contraída. Para a coluna cd_gerente já escolhemos os atributos cd_mat e nm_sobrenome, desta forma não só esta coluna aparece expandida como também os atributos escolhidos estão localizados próximos às colunas cd_depto e nm_depto. Retornemos ao Assistente de Relatório e no diálogo para seleção das colunas expanda a coluna cd_depto_ctb, conclua a montagem do relatório e retorne ao Data Model (não precisa selecionar nada). Você observará que no Data Model os atributos apontados por cd_depto_ctb também aparecem expandidos. Esta ação tem a finalidade de tornar visível a nível de Data Model os atributos derivados para que possamos utilizar (talvez) funções sobre eles. Mais um detalhe: o atributo Nr_Tel (cd_gerente) aparece com um sinal de interrogação uma vez que se trata de uma coleção. As coleções (Varrays e Nested Tables) não são suportadas nesta versão. Abra a tela de propriedades para este elemento e comprove que a propriedade Tipo da Coluna está preenchida com Banco de Dados - Desconhecido. CAPÍTULO 16: O ORACLE 8I E O REPORT BUILDER

133 Características de Performance PERFORMANCE COM O ORACLE8 A utilização de um banco de dados Oracle8 juntamente com o pacote de desenvolvimento Oracle Developer 6i traz uma série de vantagens relativas ao uso das características do banco de dados, tais como: Número de usuários concorrentes ampliada. Tabelas com até 1000 colunas. Tabelas e índices particionados. Uso de memória cache no ambiente cliente. Além destas características do banco de dados, outras relativas ao ambiente cliente foram implementadas no Oracle Developer sem a necessidade da intervenção direta do desenvolvedor: Prefetch o Forms utiliza esta característica do Oracle8 (juntamente com o mecanismo de Array Size) para aumentar a performance de acesso sem que o desenvolvedor tenha de realizar qualquer ação específica. Returning o Forms utiliza esta nova característica do Oracle8 quando realiza Inserts e Updates a fim de eliminar a necessidade de efetuar uma segunda consulta após a atualização (em função de modificações realizadas por triggers), da mesma forma aumentando a velocidade do processamento. Esta característica pode ser controlada pelo usuário através da propriedade Valor de Retorno de DML (DML Returning Value). Instead Of Triggers A existência deste tipo de trigger provê a possibilidade de no ambiente cliente, criarmos uma aplicação de atualize, normalmente, uma view, como se fosse uma tabela. Esta view tanto pode ser baseada em uma única tabela, em joins, subselects, objetos, etc. A trigger faz a separação adequada das informações e as atualiza quando conveniente. Isto torna a aplicação Forms bastante simplificada. Estes assuntos estão mais relacionados ao Form Builder 6i que ao Report Builder, porém, chamamos a atenção apenas de que, quando aplicáveis, as características e restrições também são válidas para o Report Builder 6i. SUPORTE AO PL/SQL8 Nesta versão já contamos com compatibilidade com o PL/SQL8. Porém, algumas das característica do Oracle8 (e, consequentemente do PL/SQL8) ainda não são suportadas. As principais características ainda não disponibilizadas são: Coleções (Nested Tables e Varrays) Stored Procedures que retornam objetos. Tipos escalares Nchar e Nvarchar2. CAPÍTULO 16: O ORACLE 8I E O REPORT BUILDER

134 Integração com Ferramentas de Suporte a Decisão Na construção de um relatório poderemos escolher entre construir uma query Express ou uma query SQL. No caso de Query Express, é apresentado um diálogo no qual podemos definir o banco de dados, dimensões, etc. Quando criamos um novo relatório utilizando o Assistente, ele nos questiona sobre o tipo de consulta a ser utilizada e nos apresenta duas opções: Instrução SQL ou Consulta Express. Se optarmos por Consulta Express, o diálogo da figura ao lado será apresentado para que façamos a conexão com o servidor Express. Neste diálogo poderemos informar dados para a conexão (UserId, Password e Id do Express) e dados para a autenticação no servidor Express (Domínio, UserId e Password). Após o preenchimento destas informações outro diálogo será apresentado contendo: Os bancos disponíveis atualmente ( para que façamos a escolha de um deles para associação) As dimensões disponíveis para que façamos a escolha daquelas que desejamos selecionar Além de outras informações a serem preenchidas passo a passo para a montagem do relatório. Uma vez que não estamos estudando o Oracle Express, interromperemos a seqüência de análise deste desenvolvimento. Ficamos, apenas, com a informação de que o Report Builder já é capaz de desenvolver relatórios para o produto Oracle Express, certamente conhecido dos desenvolvedores para Data Warehouse. CAPÍTULO 16: O ORACLE 8I E O REPORT BUILDER

135 CAPÍTULO 17: O MÓDULO LIBRARY Introdução Até este ponto trabalhamos exclusivamente com um módulo do tipo RDF, ou seja, um fonte Report criado pelo Report Builder. Sabemos, no entanto, que esta ferramenta é capaz de criar outros tipos de arquivo, como por exemplo um módulo Library (extensão PLL). Uma Biblioteca (Library) é uma coleção de programas PL/SQL incluindo procedimentos, funções e pacotes. Estas rotinas grupadas em um arquivo podem ser compartilhadas, no ambiente cliente, por diversas outras aplicações sejam elas Relatórios, Telas, Menus e outras Biblioteca (Libraries). A biblioteca criada deve ser associada a cada módulo no qual desejamos utilizá-la (Attach). Uma vez anexada, podemos fazer referência às rotinas presentes na biblioteca em qualquer ponto de PL/SQL do relatório ou em unidades de programa (program unit). Para acompanharmos sua utilização criaremos um outro relatório de nome Rep_Lib. Este relatório está baseado na tabela Func com as colunas cd_mat, nm_func, cd_depto, nr_cargo, nr_git, in_sexo, dt_nasc e vl_sal. O estilo do relatório é Tabular. Após a criação desta aplicação salve-a e feche-a. Só a utilizaremos após a criação e compilação da biblioteca. Criando uma Biblioteca (Library) Nossa primeira tarefa será criar a biblioteca. Selecione o nó Bibliotecas PL/SQL (PL/SQL Libraries) e pressione o botão Criar (Create). A biblioteca é criada, porém vazia. Adicionaremos à biblioteca uma função que receba como parâmetro o código do departamento e retorne o nome. Para efetuarmos esta criação, selecionaremos o nó Unidades de Programa (Program Units) e usaremos o botão Criar para anexar um programa. No diálogo apresentado informaremos que desejamos criar uma Função de nome Rnome. FUNCTION RNOME(PDEPTO IN VARCHAR2) RETURN VARCHAR2 IS TEXTO VARCHAR2(100); BEGIN SELECT NM_DEPTO INTO TEXTO FROM DEPTO WHERE CD_DEPTO = PDEPTO; RETURN TEXTO; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN 'Departamento Inexistente'; END; O trecho acima mostra o corpo da função criada na biblioteca. Salvaremos, agora, a biblioteca com o nome de LibrPl. Para executar esta ação utilize a opção do menu Arquivo (File), Salvar Como (Save As). Em seguida feche esta biblioteca e abra o fonte da aplicação Rep_Lib. CAPÍTULO 17: O MÓDULO LIBRARY - 129

136 Associando uma Biblioteca a uma Aplicação Para anexarmos e, consequentemente, podermos utilizar as rotinas embutidas neste pacote, devemos selecionar o nó Bibliotecas Anexadas (Attached Libraries) dentro do módulo Rep_Lib. Pressione o botão Criar (Create). Quando efetuarmos esta ação será mostrado o diálogo responsável pela associação. Pressionaremos o botão Pesquisar (Select) para encontrar a biblioteca em disco. Após identificarmos a biblioteca, devemos pressionar o botão anexar. Neste momento será apresentado um diálogo questionando o usuário. Ele indica que podemos armazenar internamente na aplicação apenas o nome da biblioteca (no nosso caso LibPL.PLL) ou podemos armazenar todo o caminho (no nosso caso C:\Teste\LibrPL.PLL). De um modo geral é preferível que façamos a remoção do caminho (Path), ou seja, que a informação armazenada contenha apenas o nome da biblioteca, porque esta aplicação certamente será executada em um ambiente de produção com características de diretório diferentes daquelas encontradas no ambiente de teste. Quando retiramos o diretório do nome da biblioteca, a tempo de execução o Report Runtime procurará esta biblioteca nos diretórios que estiverem preenchidos na variável de ambiente Report60_Path. Retorne ao navegador e verifique a presença do nó Bibliotecas Anexadas (Attached Libraries) com a biblioteca LibrPl incluída. Utilizaremos a seguir a rotina Rnome na aplicação Rep_Lib. Para tal criaremos uma fórmula de nome Nome a nível de quebra que acionará a rotina para cada valor de código de departamento. SELECT CD_MAT, NM_FUNC, CD_DEPTO, NR_CARGO, NR_GIT, IN_SEXO, DT_NASC, VL_SAL FROM FUNC No Data Model, após a criação da query, colocaremos a coluna cd_depto como grupo de quebra e junto a esta criaremos a fórmula Nome, conforme apresentada no trecho abaixo. FUNCTION NOMEFORMULA RETURN CHAR IS BEGIN RETURN RNOME (:CD_DEPTO); END; Gere um layout padrão e execute esta aplicação para avaliação do resultado. Considerações sobre Armazenamento Repetiremos aqui as considerações que fizemos anteriormente quando falamos de rotinas e suas diversas formas de armazenamento: dentro da aplicação, no banco de dados ou em bibliotecas. Quando decidimos pelo cadastramento de uma determinada rotina em bibliotecas da rede, desejamos o compartilhamento apenas para o ambiente cliente. Aquele código pode ser aproveitado (reutilizado) por diversas aplicações no ambiente cliente (módulos de tela ou relatório). Escolheríamos seu armazenamento em um biblioteca, porque: A rotina poderá ser compartilhada por mais de um módulo. A rotina não utiliza estruturas do banco de dados ou utiliza apenas para atualização, não causando impacto no tráfego da rede. A rotina está associada a ações específicas do ambiente cliente (usa rotinas do nó pacotes embutidos do report builder). CAPÍTULO 17: O MÓDULO LIBRARY - 130

137 CAPÍTULO 18: GABARITOS (TEMPLATES) Descrição Um gabarito é um padrão de layout que estaremos estabelecendo para o desenvolvimento de relatórios de uma instalação. Este gabarito pode conter cabeçalhos, rodapés, números de página, capa, contra-capa, figura de marca d água e diversas outras características. Podemos estabelecer padrões gerais ou padrões por estilo de relatório (matricial, tabular, grupado acima, abaixo, etc). Para estudarmos criaremos um Gabarito, analisaremos as possibilidades de padrão e faremos a geração de um relatório com o padrão criado. A Estrutura de um Gabarito Se você tiver algum módulo aberto (seja biblioteca ou relatório) feche-o para iniciarmos o estudo de gabaritos. No Navegador de Objetos selecione o nó Gabaritos e, com a ferramenta Create, crie um novo gabarito. Observamos que contamos com uma área de Modelo de Dados, um Layout, Gatilhos de Relatório, Unidades de Programa e Bibliotecas Armazenadas. MODELO DE DADOS Na área relativa ao Modelo de Dados podemos criar parâmetros de usuário e estabelecer valores padrões para os parâmetros de sistema. Não podemos, no entanto, definir queries ou quaisquer outros objetos relativos ao Modelo de Dados. Expanda o nó Modelo de Dados e observe o seu conteúdo. PL/SQL NO GABARITO Os Gatilhos de Relatório, Bibliotecas Anexadas e Unidades de Programa que viermos a estabelecer em um gabarito serão copiadas para o relatório destino a tempo de montagem do relatório, o que nos permitirá definir determinadas rotinas que sempre venham a ser executadas. LAYOUT A área de Layout é onde nos deteremos mais a fim de estudarmos as diversas formas de padronização. Façamos a expansão do nó Layout para que possamos visualizar os subnós presentes. Observe que as especificações dos nós Cabeçalho(Header), Trailer e Margem, são similares às especificações que costumamos encontrar em um relatório. De fato nestas áreas realizamos os mesmos tipos de especificação que costumamos usar em um relatório, isto quer dizer que poderemos criar boilerplates de texto, gráficos, criar campos (fields) com origem de data, número de página ou qualquer objeto presente no modelo de dados (atualmente só parâmetros). Na área do corpo (Body), no entanto, não poderemos criar qualquer objeto, poderemos apenas estabelecer valor para as propriedades dos objetos que vierem a ser definidos no corpo. CAPÍTULO 18: GABARITOS - 131

138 As Seções do Corpo Se expandirmos o nó Corpo, observaremos que ele está subdividido em duas partes: Seção Default (Default Section) e Sobreposição (Override Section). SEÇÃO DEFAULT Todas as propriedades que viermos a estabelecer neste local afetam a todos os estilos de relatório que vierem a ser desenvolvidos utilizando este Gabarito (Template). Esta seção está subdividida em três partes: Cabeçalhos (Headings) neste local definimos atributos para labels (cabeçalhos) e frames (quadros) que envolvam estes labels. Corpo (Body) neste local definimos atributos para os Repeating Frames e todos os objetos que eles envolvam. Sumários (Summaries) neste local definimos atributos para as áreas de rodapé que contenham sumários e os frames (quadros) que envolvam estes sumários. SEÇÃO DE SOBREPOSIÇÃO (OVERRIDE SECTION) Observe que este nó está subdividido por estilo de relatório. Se desejarmos estabelecer alguma particularidade para relatórios em estilo Tabular, esta particularidade deve ser especificada neste local. Ou seja, a tempo de montagem do relatório o Report Builder obterá todos os padrões que tivermos estabelecido na Seção Default e aplicará ao relatório. Em seguida, de acordo com o estilo definido para o relatório, obterá as particularidades daquele estilo e fará a sobreposição destas especificações, gerando o relatório final. Podemos estabelecer mais de uma seção de características se o estilo de relatório permitir tal ação. Determinados estilos de relatório só possuem um grupo, outros possuem mais de um grupo. A quantidade de seções está relacionada, portanto, à quantidade de grupos. Podemos subdividir os estilos de relatório em dois grandes tipos: Relatórios que só possuem uma seção São eles: Tabular (Tabular), Semelhante ao Form (Form-Like), Etiqueta de Correio (Mailing Label), Carta - Padrão (From Letter). Para estes estilos não podemos criar mais de uma seção de características. Relatórios que possuem mais de uma seção À Esquerda do Grupo (Group Left), Acima do Grupo (Group Above), Matriz (Matrix), Matriz com Grupo (Matrix with Break). Neste segundo caso (mais de uma seção), podemos ter três tipos de situação para associação entre seção e grupo. Mesmo número de grupos e seções o mapeamento é um a um. A primeira seção é associada ao primeiro grupo, a segunda seção ao segundo grupo e assim por diante. Mais grupos que seções o mapeamento é um a um até a penúltima seção. A partir daí, todos os grupos subseqüentes são mapeados para a penúltima seção e o último grupo é mapeado para a última seção. Se houver apenas uma seção, todos os grupos são mapeados para esta seção. Mais seções que grupos o mapeamento é um a um até o penúltimo grupo. O último grupo é mapeado para a última seção. Trataremos agora, das propriedades características de cada seção. CAPÍTULO 18: GABARITOS - 132

139 Propriedades de uma Seção Neste item estudaremos as propriedades relativas a uma seção, seja ela Default ou de Sobreposição. Estas propriedades se aplicam a todos os objetos da seção. Abra a tela de propriedades de uma seção. O conjunto de propriedades está subdividido nos seguintes grupos: GRUPO LAYOUT Neste grupo encontramos as propriedades: Alinhamento (Alignment) determina como os títulos e campos em uma linha serão posicionados ao longo da página. Esta propriedade só é valida para o estilo Form. O número de campos por linha é determinado pela propriedade a seguir. Os valores válidos para esta propriedade são: Esquerda (Left), Direita (Right), Centralizado (Center), Esvaziar (Flush) e Coluna (Column). No caso de Flush o campo mais à esquerda será alinhado à esquerda (junto com seu título), o campo mais à direita será alinhado à direita (junto com seu label) e os demais serão distribuídos entre os dois primeiros de forma proporcional. Campos por Linha (Fields Per Line) determina o número máximo de campos (fields) por linha de relatório. Esta propriedade só é valida para o estilo Form. Se atribuirmos o valor zero a esta propriedade estaremos indicando que não existe limite e que devem ser configurados quantos campos couberem na linha. Usar Espaçamento Vertical (Use Vertical Spacing) esta propriedade preenche os espaços não usados da linha anterior (se marcada com Sim Yes). Posição (Position) define o posicionamento do objeto pai em relação ao objeto filho. Por default o posicionamento do pai é acima do filho. Colocar Labels sobre Campos (Place Labels Above Fields) Para o estilo de relatório Form indicamos se devemos posicionar os Labels acima dos campos (em vez de posicioná-los do lado esquerdo). Alinhar Sumários com Campos (Align Summaries with Fields) determina se os sumários deve ser posicionados sob seus respectivos campos de origem. Esta propriedade só é aplicável ao estilo de relatório Form. GRUPO ESPAÇAMENTO Neste grupo trataremos do espaço entre os objetos. Entre Quadros Vertical / Horizontal (Inter Frames) indica a quantidade de espaço entre quadros (na vertical e na horizontal). Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. Entre Campos Vertical / Horizontal (Inter Fields) indica a quantidade de espaço entre campos (na vertical e na horizontal). Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. CAPÍTULO 18: GABARITOS - 133

140 Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. Entre Mestre e Detalhado Vertical / Horizontal (Between Master and Detail) indica a quantidade de espaço entre o quadro do grupo Mestre e o quadro do grupo detalhe (na vertical e na horizontal). Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. Entre Quadros Irmãos Vertical / Horizontal (Between Sibiling Frames) - indica a quantidade de espaço entre quadros de grupos de mesmo nível (na vertical e na horizontal). Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. Entre Quadro e Campos Vertical / Horizontal (Between Frames and Fields) - indica a quantidade de espaço entre quadros e campos internos (na vertical e na horizontal). Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. Entre Página e Quadros Vertical / Horizontal (Between Page and Frames) - indica a quantidade de espaço entre a borda da página e o quadro de maior nível, isto é, mais externo (na vertical e na horizontal). Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. Entre Campo e Etiquetas Horizontal (Between Field and Labels) - indica a quantidade de espaço entre o label e o campo na horizontal. Esta opção só é aplicável ao estilo Form quando o título do campo é apresentado à esquerda do mesmo. Se a opção de alinhamento para o Grid for especificada, o alinhamento prevalece sobre a quantidade de espaço. Esta propriedade é fornecida na unidade de dimensionamento em uso. Se esta unidade for trocada, esta propriedade deve ser alterada de acordo. CAPÍTULO 18: GABARITOS - 134

141 GRUPO ESTILO Neste conjunto de propriedades determinaremos o estilo e cor da parte interna e das bordas do Quadro(Frame) geral. Quando criamos um layout com a ajuda do Assistente de Relatório, o layout gerado possui um Quadro(Frame) que envolve todos os objetos. É para este Quadro que se aplicam estas propriedades. PROPRIEDADES DO NÓ CABEÇALHO DA SEÇÃO Neste nó trataremos das características padrões aplicáveis a títulos (labels) e quadros (frames) que envolvam estes Labels. As propriedades deste nó são subdivididas em dois grupos: Estilo e Etiquetas. No grupo Estilo determinaremos o estilo e cor da parte interna e das bordas do quadro (frame). No grupo Etiquetas estaremos determinando e estilo, cor, fonte da parte interna e das bordas das etiquetas (labels). PROPRIEDADES DO NÓ CORPO DA SEÇÃO Neste nó trataremos das características padrões aplicáveis aos Repeating Frames e todos os objetos que eles envolvem. No grupo Estilo determinaremos o estilo e cor da parte interna e das bordas dos Repeating Frames e quadros (frames). No grupo Etiquetas estaremos determinando estilo, cor, fonte da parte interna e das bordas das etiquetas (labels). No grupo Campos estaremos determinando estilo, cor, fonte da parte interna e das bordas dos campos (fields). PROPRIEDADES DO NÓ SUMÁRIO DA SEÇÃO Neste nó trataremos das características padrões para as áreas de rodapé que contenham sumários e os frames (quadros) que envolvam estes sumários. Da mesma forma que o grupo anterior encontramos os grupos Estilo, Etiquetas e Campos. No grupo Estilo determinaremos o estilo e cor da parte interna e das bordas dos quadros (frames). No grupo Etiquetas estaremos determinando estilo, cor, fonte da parte interna e das bordas das etiquetas (labels). No grupo Campos estaremos determinando estilo, cor, fonte da parte interna e das bordas dos campos (fields). CAPÍTULO 18: GABARITOS - 135

142 Montando um Gabarito (Template) A melhor forma de entendermos a aplicabilidade destas propriedades é prepararmos um gabarito e o utilizarmos em um relatório. Crie um gabarito com o nome de Gabarito1(use a ferramenta Criar no nó Gabaritos), com as seguintes características: SEÇÃO DEFAULT Selecione o nó Seção Default e abra a tela de propriedades. Preencha as seguintes propriedades: Padrão de Preenchimento(Pattern) Solid Cor de Fundo (BackGround Color) Yellow (primeira de cima para baixo). CABEÇALHOS(HEADINGS) Selecione o nó Cabeçalhos(Headings) e abra a tela de propriedades. Estilo (Style) Neste grupo preencheremos as propriedades: Padrão de Preenchimento(Pattern) - Solid Cor de Fundo (BackGround Color) Cyan (primeira de cima para baixo). Etiquetas (Labels) Neste grupo preencheremos as propriedades: Fonte(Font) - Arial Cor de Texto (Text Color) Black CORPO (BODY) Estilo Neste grupo preencheremos as propriedades: Padrão de Preenchimento(Pattern) - Solid Cor de Fundo (BackGround Color) Green (primeira de cima para baixo). Etiquetas (Labels) Neste grupo preencheremos as propriedades: Fonte(Font) - BrodyD Cor de Texto (Text Color) Black Campos (Fields) Neste grupo preencheremos as propriedades: Padrão de Preenchimento(Pattern) - Solid Cor de Fundo (BackGround Color) White (primeira de cima para baixo). Cor de Texto (Text Color) Black SUMÁRIOS (SUMMARY) Estilo (Style) Neste grupo preencheremos as propriedades: Padrão de Preenchimento(Pattern) - Transparent Etiquetas (Labels) Neste grupo preencheremos as propriedades: Cor de Texto (Text Color) Red Campos (Fields) Neste grupo preencheremos as propriedades: Cor de Texto (Text Color) Blue Após estas especificações salve o gabarito. CAPÍTULO 18: GABARITOS - 136

143 USANDO O GABARITO CRIADO Criaremos, agora, um relatório que utilize o gabarito escolhido. Use o Assistente para a criação de um relatório Tabular para a query da listagem abaixo. SELECT CD_MAT, NM_FUNC, VL_SAL, DT_NASC FROM FUNC Estabeleça um sumário de contagem para a coluna cd_mat, uma soma e uma média para a coluna vl_sal. A seguir indique a utilização do gabarito criado anteriormente. Observe o resultado do modelo de Layout gerado. Verifique no seu relatório os padrões que estabelecemos a nível de gabarito. Confira as especificações. CAPÍTULO 18: GABARITOS - 137

144 CAPÍTULO 19: INTERPRETER Descrição Neste tópico trataremos da utilização da depuração em relatório. A depuração no Report Builder significa que acompanharemos a execução dos trechos de PL/SQL definidos no programa passo a passo e, eventualmente, poderemos intervir no processo. A forma de depurarmos um relatório é um pouco diferente daquela que experimentamos com uma aplicação Form. Para exemplificação abra seu relatório de nome Pacote para que possamos marcar os pontos de interrupção. No Report Builder devemos determinar os pontos e tipos de interrupção antes de iniciarmos a execução do relatório, ou seja, a determinação é estática, mesmo para os BreakPoints. Para acionarmos o interpretador (depurador), devemos selecionar a opção Interpretador PL/SQL no menu Programa. A Janela de Depuração Quando acionamos o interpretador aparece uma janela de intitulada Interpretador PL/SQL. Esta janela está subdividida em dois painéis: Painel de Fonte O painel superior nos mostrará trechos dos blocos de PL/SQL presentes na aplicação quando fizermos a seleção da unidade de programa. Painel de Comandos Neste painel aparece uma linha de comando em que podemos executar comandos diretamente no ponto de interrupção, alterando o valor de variáveis, executando ações, etc. Corresponde a uma linha de comando de PL/SQL. Como ainda estamos na fase de desenvolvimento (não iniciamos a execução), continuamos com acesso a todos os nós de nossa aplicação. Observe que existe um nó stack vazio no conjunto de nós do relatório. Este nó será preenchido à medida que estabelecermos os pontos de interrupção e/ou executarmos a aplicação. Para que possamos marcar um ponto de interrupção devemos expandir o nó Unidades de Programa (Program Units). Encontraremos aí não apenas as unidades de programa criadas explicitamente por nós, como também todos os triggers que porventura tivermos definido no relatório. Quando clicamos sobre o nome de uma destas unidades de programa, o texto correspondente é apresentado no Painel de Fonte do Interpretador. Veja a figura anterior. CAPÍTULO 19: INTERPRETER - 138

145 Marcando um ponto de Interrupção A interrupção é feita em relação a uma das linhas do código. Podemos interromper o código de duas maneiras diferentes: Ponto de Interrupção (BreakPoint) determina um ponto em que o código será interrompido para análise. É uma interrupção incondicional. Gatilho (Trigger) determina um ponto em que o código poderá ser interrompido se a lógica definida no trigger determinar. Quando a interrupção ocorre o controle sai da aplicação e passa para o interpretador permitindo uma verificação da execução passo a passo. BREAKPOINT Para efeito de teste, selecione a primeira linha após o Begin (primeira linha executável) da trigger. Escolha no menu Depurar (Debug) a opção Interromper (Break) ou efetue um clique duplo no número da linha que desejamos interromper. Será mostrado um diálogo para que vejamos ou preenchamos as seguintes informações: Ponto de Interrupção (Breakpoint) indica se este é um ponto de interrupção novo ou já existente. Se for um já existente aparecerá um número. Ativado (Enabled) indica se este ponto está habilitado ou não. Unidade de Programa (Program Unit) identifica a unidade de programa. Nome dado pelo Report Builder. Linha (Line) especifica a linha dentro da unidade de programa em que o ponto de interrupção foi marcado. Gatilho (Trigger) define um código de PL/SQL para o ponto de interrupção. Este código será acionado cada vez que o ponto de interrupção for atingido. DEBUG.SETN ('DIA_SEMANA', 5); O pacote Debug contém rotinas que nos permitirão alterar o valor das variáveis locais do trecho de código que estamos analisando. No caso do exemplo, quando o ponto de interrupção for atingido, a variável local dia_semana receberá o valor 5. Verifique que seu valor inicial é 0. Quando pressionarmos a tecla OK, o ponto de interrupção é criado. Observe que no Painel de Fonte aparecerá o texto B(01) em vez do número da linha (4). Verifique também o nó Ações de Depuração no Navegador, você encontrará a criação do ponto de interrupção. No nó Unidades de Programa do Navegador também visualizamos uma nova rotina chamada BreakTrig_1. Se não desejarmos preencher nenhum texto a ser executado juntamente com o ponto de interrupção, podemos selecionar a linha que desejamos interromper e efetuar um click duplo. O ponto de interrupção será marcado da mesma forma. Para desmarcar o ponto de interrupção, selecione a linha em que o ponto está marcado e efetue um click duplo. Verifique o nó Ações de Depuração e observe que o ponto de interrupção foi removido. CAPÍTULO 19: INTERPRETER - 139

146 TRIGGER Um gatilho funciona ligeiramente diferente de um ponto de interrupção. No gatilho escreveremos uma lógica que determinará se a interrupção ocorrerá ou não. A criação do gatilho é similar à criação do ponto de interrupção. Selecionamos a linha desejada (mesma anterior), escolhemos no menu Depurar (Debug) a opção Gatilho (Trigger). IF DEBUG.GETN('DIA_SEMANA') = 0 THEN DEBUG.SUSPEND; END IF; O texto informado está descrito acima. As informações relativas ao diálogo são definidas a seguir: Gatilho (Trigger) indica se este é um gatilho novo ou já existente. Se for um já existente aparecerá um número. Ativado (Enabled) indica se este gatilho está habilitado ou não. Local (Location) especifica a localização do gatilho de depuração: a) Unidade de Programa (Program Unit) indica que o gatilho de depuração estará localizado exatamente na unidade de programa especificada e na linha especificada. Somente nesta opção estes dois campos estarão preenchidos. b) Depurar Entrada (Debug Entry) nesta situação o depurador é acionado quando a execução do programa for interrompida por um ponto de interrupção, gatilho de unidade de programa, etc. c) Toda Instrução (Every Statement) faz com que o trecho de PL/SQL seja avaliado antes de cada linha de PL/SQL da aplicação. Unidade de Programa (Program Unit) identifica a unidade de programa. Nome dado pelo Report Builder. Linha (Line) especifica a linha dentro da unidade de programa em que o gatilho foi marcado. Corpo do Gatilho (Trigger Body) especifica o código de PL/SQL para o gatilho. Quando aceitarmos este diálogo (OK), retornaremos à janela de depuração com a linha 4 preenchida com T(01) no lugar do número da linha. CAPÍTULO 19: INTERPRETER - 140

147 Acompanhando uma Depuração Para realizarmos um acompanhamento passo a passo da depuração abriremos o programa PL01, que possui diversas rotinas em PL/SQL. DEPURANDO COM UM PONTO DE INTERRUPÇÃO Marcaremos um ponto de interrupção simples. Após aceitarmos o diálogo e definirmos a interrupção na linha 3, devemos iniciar a execução do relatório para que possamos acompanhar a execução passo a passo. Quando o relatório atinge o ponto determinado, ocorre a interrupção e a janela do Interpretador é aberta. Observe a figura ao lado. O ponto em que o programa está parado é marcado no Painel de Fonte com o sinal =>. Verifique o nó Stack, ele contém o valor das variáveis locais deste trecho de código. Na parte superior da janela encontramos diversos botões, agora habilitados, que nos permitirão executar uma linha de cada vez. São eles: Entrar (Step Into) esta opção executa cada linha do programa passo a passo. Ocorre a interrupção a cada comando. Se o código acionar uma unidade de programa esta também é acompanhada passo a passo. Transpor (Step Over) esta opção também executa cada linha do programa passo a passo, porém se houver chamada a uma unidade de programa, esta não é detalhada. A subrotina é executada como se fosse uma linha simples. Sair (Step Out) esta opção é para ser usada dentro de uma unidade de programa chamada, pois ela termina a unidade de programa atual e retorna a quem a chamou. Se estivermos no código principal esta opção encerrará a depuração. O trecho de código final é executado. Ir (Go) esta opção encerra a execução passo a passo voltando para a forma normal do programa. O restante do código é executado. Reinicializar (Reset) esta opção desiste da execução passo a passo. O restante do código não é executado. Pressione o botão Entrar (Step Into) e verifique que o valor das variáveis foi modificado pois a linha 7 foi executada. Faça outros testes com estas opções, você verificará que a depuração é bastante similar ao processo do Form Builder. A diferença está exatamente no momento em que marcamos o ponto de interrupção. Observe que ao encerrarmos a execução os pontos de interrupção ainda estão marcados. Podemos voltar a executar o relatório e interromper a ação novamente. Estes pontos persistem até que fechemos o arquivo, ou seja, não são gravados em disco. CAPÍTULO 19: INTERPRETER - 141

148 CAPÍTULO 20: HTML / PDF Desenvolvendo um relatório para Web Neste tópico trataremos da geração de um relatório a ser apresentado em um Browser ou PDF Viewer. Um arquivo com formato HTML é lido em um Browser como Microsoft Internet Explorer ou Netscape. Já um arquivo PDF é lido por um programa stand-alone de leitura tal como Adobe Acrobat Reader. Os arquivos gerados para estes produtos podem ter características especiais, tais como hyperlinks, tags, etc. Para analisarmos o resultado de uma geração deste tipo usaremos o Assistente de Web. Posteriormente modificaremos nosso relatório manualmente para conhecermos as propriedades associadas a estes tipos de arquivos. Criemos, então, um relatório de nome Web, contendo as colunas cd_mat, nm_func, vl_sal e dt_nasc da tabela func. Após a montagem da query acione o Assistente de Web. No diálogo apresentado poderemos informar o nome de um arquivo HTML que seja apresentado antes do relatório e outro arquivo HTML que seja apresentado depois do relatório. Para efeito de teste, escolhemos os arquivos 40d.htm e 20f.htm presentes no diretório C:\Orawin95\Tools\Devdem20\Demo\Reports\Output. Prosseguiremos com o Assistente e outro diálogo nos será apresentado. Neste diálogo devemos marcar uma das seguintes opções: Gerar saída HTML agora indica que um arquivo com extensão Htm deve ser gerado imediatamente para que possamos verificar o resultado em um Browser. Gerar a saída da folha de estilo HTML agora Style Sheets são extensões para o HTML que fornecem maior flexibilidade, como por exemplo qualquer tamanho ou estilo de fonte, objetos sobrepostos, paginação e outras características. Para a visualização de um documento HTML com as vantagens do Style Sheets devemos usar um Browser que suporte este tipo de extensão (por exemplo Microsoft Internet Explorer 3.01 ou superior). Gerar saída PDF agora neste caso o arquivo gerado não é HTML e sim PDF. Retornar ao Designer se escolhermos esta opção as informações relativas aos arquivos HTML a serem mostradas antes e depois do documento são armazenadas em nosso fonte mas o documento HTML não é gerado. Se marcarmos a opção saída para o Browser da Web, além de gerar o arquivo HTM, o Report Builder também aciona o Browser default instalado em seu ambiente. Um trecho do resultado desta geração está apresentado na figura ao lado, na qual visualizamos o fim do relatório e o aparecimento do arquivo HTM mostrado ao fim do relatório. CAPÍTULO 20: HTML/PDF - 142

149 Se você executar estas mesmas ações e a figura não for mostrada, isto se deve ao fato de que nos HTMs selecionados (20f e 40d) não fazerem menção ao diretório onde se acham as figura. Desta forma o Browser não as encontra. Para resolver este problema grave seu arquivo Web.htm no mesmo diretório onde se acham os dois HTMs e respectivas figuras ou copie todos estes arquivos para um diretório em comum. Suponhamos, agora, que desejássemos regerar este relatório para adicionar, por exemplo, uma restrição às linhas lidas. Para indicarmos ao Report Builder que desejamos criar um arquivo HTM utilizaremos os parâmetros de sistema: DesFormat este parâmetro determina o formato da saída. Poderemos optar entre HTML, HTMLCSS (para a utilização de Style Sheets) ou PDF. Destype este parâmetro indica o tipo de destino. Indicaremos File (pois desejamos gerar um arquivo em disco). Desname neste parâmetro forneceremos o nome do arquivo de saída a ser gerado. O nome pode ser diferente do nome do relatório, mas deve ter a extensão HTM. PrintJob neste parâmetro indicamos se desejamos ou não que seja apresentado o diálogo relativo à impressão. Preencheremos com NO (faça um teste com Yes para verificar o resultado). Mode indicaremos que o resultado deste relatório é gráfico, portanto o Mode é BITMAP. Para que estes parâmetros fiquem fixos, devemos alterar a propriedade Valor Inicial de cada um deles. Após o cumprimento desta etapa podemos executar o relatório quantas vezes quisermos, pois a cada execução um novo arquivo extensão HTM será gerado. Verificaremos, agora, onde o Assistente armazenou a informação sobre o nome do arquivo a ser apresentado antes e depois do relatório. Trata-se da paleta de propriedades do módulo. Retorne pois ao tópico Características Gerais e verifique que outras informações podem ser preenchidas nestas propriedades para incrementar a apresentação do relatório na Web. Observe a paleta de propriedades de um objeto de layout. Todos os objetos de layout possuem estas propriedades. Destino de Hiperligação (Hyperlink Destination) corresponde a um identificador único para um objeto e que será utilizado como destino do Hypertext Link. Marcador de Livros (BookMark) é um Hypertext Link que aparecerá em um BookMark Frame do documento HTML principal ou na área de BookMark do PDF Viewer. Clicando-se no BookMark será mostrado o objeto associado no topo da janela. Ação PDF (PDF Action) esta propriedade especifica um tipo de ação a ser associada com o objeto quando este é clicado no PDF Viewer. Os valores válidos são Usar Hiperligação (Use Hyperlink) ou Inicializar Aplicativo (Launch Application). Linha de Comandos do Aplicativo PDF (Application Command Line PDF) corresponde à linha de comandos que será executada na máquina local quando o objeto (presente no documento PDF) for clicado no PDF Viewer. Por exemplo a execução de um programa que exista na máquina local. As particularidades relativas à geração de um relatório a ser visualizado na Internet não param aí. Veja os próximos tópicos. CAPÍTULO 20: HTML/PDF - 143

150 O Previsualizador da Web Se desejarmos verificar o resultado da execução que um determinado relatório terá quando for visualizado por um browser (ou seja, na Web), podemos direcionar a execução do relatório para a Web diretamente de dentro do Report Builder. Abra um relatório qualquer (que possua o parâmetro DesType como Screen). Execute este relatório. Quando o Previsualizador Ativo for acionado, selecione a opção Previsualizador de Web (Web Preview) presente no menu Visualizar(View). As seguintes opções serão apresentadas: Usar HTML (Use HTML) - indica que o formato de saída deve ser HTML (default). Usar Folhas de Estilos HTML (Use HTML Style Sheets) - indica que o formato de saída deve ser HTMLCSS (somente para bowsers capazes de ler este formato). Usar PDF (Use PDF) - indica que o formato de saída deve ser PDF. Mostrar Página Atual (Show Current Page) - gera apenas a página atual do relatório. Mostrar Todas as Páginas (Show All Pages) - gera todas as páginas do relatório. As especificações acima funcionam como preferências para a futura execução na Web. Para que o relatório seja executado gerando a saída definida, devemos escolher a opção a seguir: Criar para Navegador da Web (Generate to Web Browser) - executa o relatório e aciona o browser default da sua estação (se você tiver mais de um browser instalado o Report Builder poderá questioná-lo sobre qual browser usar). Outra forma de executarmos para a Web é a utilização do botão Previsualizador da Web (Web Preview) presente na tela do Previsualizador Ativo (Live Preview). CAPÍTULO 20: HTML/PDF - 144

151 HTML Page Streaming O parâmetro PageStream faz com que o relatório gerado em formato HTML seja separado em diversos arquivos, um para cada página. Isto permite que ao armazenarmos o relatório em um servidor Web, por exemplo, o usuário que venha a consultar informações deste relatório possa carregar para seu computador apenas as páginas desejadas, sem ter de carregar todo o relatório. NAVEGAÇÃO Para que isto fique viável devemos estabelecer uma forma de navegação entre as páginas, uma vez que serão arquivos diferentes. Isto pode ser feito de duas formas: Usando a rotina pré-definida fornecida pelo Report Builder (em javascript) Desenvolvendo nossa própria rotina. Se decidirmos pela construção de nossa própria rotina de paginação, podemos usar duas variáveis de sistema no script: &TotalPages(número total de paginas) e &file_name(nome do arquivo destino). O Report Builder associa valores a estas variáveis durante a formatação, fazendo a substituição do parâmetro por seu valor. A definição da navegação, manual, ou seja, definido por nós, pode ser feito de duas formas: Através do PL/SQL no trigger Before Report com a ajuda da rotina SRW.Set_Page_Navigation_Html. Na paleta de propriedades do relatório (módulo), com o preenchimento das propriedades Tipo de Controle da Página de Navegação (que pode ser preenchido com File ou Texto) e Valor de Controle da Página de Navegação (que pode ser preenchido com o nome do arquivo que contém o script ou com o texto do script, de acordo com o que tiver sido definido na propriedade anterior). FORMATO DOS ARQUIVOS GERADOS Os nomes dos arquivos gerados pelo parâmetro PageStream seguem um padrão para facilitar o processo de navegação. Suponhamos, então, que o relatório tenha o nome RELSTR.REP. Os arquivos gerados, se não houver Bookmarks, serão da forma: Relstr.htm - para o BaseFrame. Este deve ser o arquivo executado pelo usuário (chama os outros). Relstr_1.htm até Relstr_n.htm - para as páginas Relstrj.htm - para o JavaScript padrão de navegação. Os arquivos gerados, havendo Bookmarks, serão da forma: Relstr.htm - para o BaseFrame. Este deve ser o arquivo executado pelo usuário (chama os outros). Relstrb.htm (para o arquivo Bookmark). Relstr_1.htm até Relstr_n.htm - para as páginas Relstrj.htm - para o JavaScript padrão de navegação. PARÂMETRO O parâmetro PageStream deve ser informado na linha de comando (esta opção não pode ser habilitada através do Report Builder). CAPÍTULO 20: HTML/PDF - 145

152 EXEMPLO USANDO SCRIPT DEFAULT Neste ponto criaremos duas aplicações, na primeira utilizaremos o script default de navegação da Oracle e, em seguida, utilizaremos nosso próprio script, apenas para estudarmos as propriedades. Na parte de exercícios faremos um exemplo ligeiramente mais complexo. Iniciemos, então, criando um relatório para as colunas cd_mat, cd_depto e vl_sal, usando o formato Form com um gabarito à sua escolha. Compile este relatório (gerando um.rep) e crie um ícone no Windows com o texto da listagem a seguir. C:\ORAWIN95\BIN\RWRUN60.EXE MODULE=<NOME> USERID=DESENV/DESENV@DESENV PAGESTREAM=YES Execute este relatório e verifique a quantidade de arquivos HTML gerados. Para visualização dos arquivos gerados você poderá exibir qualquer dos arquivos HTML em seu Browser, porém, falta a navegação. O HTML disponibilizado pela Oracle para navegação foi gerado com o formato <nome>.htm (verifique o item Formato dos Arquivos Gerados, previamente, neste tópico). Este é o arquivo que devemos usar para navegar entre as páginas da aplicação. Ele vai criar um frame, sendo que a parte superior corresponde à página do relatório e a parte inferior à rotina de navegação. Nota Se você preencher o parâmetro Desname, não esqueça de preencher a extensão HTM. Caso contrário, o arquivo base (o que deve ser executado inicialmente) fica sem extensão, impossibilitando sua identificação pelo browser. CAPÍTULO 20: HTML/PDF - 146

153 EXEMPLO USANDO NOSSO SCRIPT Para desenvolver o mesmo relatório anterior, criamos um arquivo de nome Java.txt, cujo conteúdo é apresentado na listagem abaixo: <HEAD> <SCRIPT LANGUAGE = "JavaScript"> var jump_index = 1 // Desvio para esta página var num_pages = &totalpages // Número total de páginas var basefilename = "&file_name" // Arquivo Base var fileext = "htm" // Extensão do arquivo function new_page(form, new_page) { form.reqpage.value = new_page; parent.frames[0].location = basefilename + "_" + new_page + "."+fileext; } function back(form) { jump_index = form.reqpage.value; jump_index--; new_page(form, jump_index); } function forward(form) { jump_index = form.reqpage.value; jump_index++; new_page(form, jump_index); } function pagenum(form) { if (form.reqpage.value < 1) { form.reqpage.value = 1; } if (form.reqpage.value > num_pages) { form.reqpage.value = num_pages; } jump_index = form.reqpage.value; new_page(form, jump_index); } </SCRIPT> </HEAD> <BODY> <FORM NAME="ThisForm" onsubmit="pagenum(this); return false;"> <center><table><tr> <td> <INPUT TYPE="button" VALUE="<< " onclick="new_page(this.form, 1)"> <td> <INPUT TYPE="button" VALUE=" < " onclick="back(this.form)"> <td> <INPUT TYPE="button" VALUE="Page:" onclick="pagenum(this.form)"> <td> <INPUT NAME="reqpage" VALUE="1" SIZE=2> <td> <INPUT TYPE="button" VALUE=" > " onclick="forward(this.form)"> <td> <INPUT TYPE="button" VALUE=" >>" onclick="new_page(this.form, num_pages)"> </table></center> </FORM> O texto acima corresponde ao script padrão gerado pelo Report Builder com algumas simplificações. Crie um arquivo com este texto. Na propriedade do módulo Tipo de Controle da Página de Navegação preencha com File e na propriedade Valor de Controle da Página de Navegação preencha com o nome do arquivo. Em seguida, compile o relatório novamente e o execute. Quando ativar o browser, para o arquivo <nome>.htm, não se esqueça de fazer um Reload para que ele não apresente o arquivo anterior. Utilize a opção de visualização do código HTML para conferir o resultado. CAPÍTULO 20: HTML/PDF - 147

154 OUTRAS ROTINAS DO PACOTE SRW Além da rotina SRW.Set_Page_Navigation_Html que nos permite a inclusão de um texto ou arquivo HTML em nosso relatório (visando a navegação), podemos utilizar mais oito rotinas. São elas: SRW.SET_BEFORE_REPORT_HTML - se desejarmos que o texto(ou arquivo HTML) seja incluído somente na primeira página do relatório. SRW.SET_BEFORE_PAGE_HTML - se desejarmos que o texto (ou arquivo HTML) seja incluído em todas as páginas do relatório. SRW.SET_BEFORE_FORM_HTML - se desejarmos que o texto (ou arquivo HTML) seja incluído antes da tela de parâmetros. SRW.SET_AFTER_REPORT_HTML - se desejarmos que o texto(ou arquivo HTML) seja incluído somente na última página do relatório. SRW.SET_AFTER_PAGE_HTML - se desejarmos que o texto (ou arquivo HTML) seja incluído no fim de todas as páginas do relatório. SRW.SET_AFTER_FORM_HTML - se desejarmos que o texto (ou arquivo HTML) seja incluído no fim da tela de parâmetros. Os textos ou arquivos incluídos por estas rotinas podem ser informados, também, através de propriedades do módulo, da seguinte forma: <Antes / Depois> do Tipo de <Página ou Form ou Relatório> - determina o conteúdo da propriedade Valor, pode ser preenchido com Texto ou File. <Antes / Depois> do Valor de <Página ou Form ou Relatório> - determina o nome de um arquivo ou o texto do HTML a ser incluído, de acordo com o que tiver sido preenchido na propriedade Tipo. A utilização das propriedades determina a formatação estática. A utilização das rotinas determina a formatação dinâmica uma vez que podemos fazer a inclusão das informações ou não, de acordo com outras situações do próprio relatório. CAPÍTULO 20: HTML/PDF - 148

155 Chart Hyperlinks Podemos associar um Chart (em um relatório com saída HTML ou PDF) com uma instância de um Repeating Frame, outro Chart ou com outro relatório. Desta forma o usuário poderá clicar sobre o Chart para fazer acesso a mais detalhes sobre aquele valor ou navegar para outro relatório associado com aquele valor. Para efetuarmos um teste simples (não entraremos em detalhes sobre o Oracle Graphics), criaremos um relatório baseado no comando Select a seguir. SELECT CD_MAT, NM_FUNC, CD_DEPTO, VL_SAL, NR_CARGO FROM FUNC No Modelo de Dados estabeleceremos a coluna cd_depto como coluna de quebra e incluiremos uma variável de resumo que calcula a soma dos salários por departamento (sum_sal). Em seguida, com a ajuda do Assistente de Relatórios definiremos o layout como Agrupar Acima e o gabarito como Corporate1. Nosso próximo passo é a criação do gráfico. Desta forma acionaremos o Assistente de Gráfico e preencheremos os diálogos como descrito a seguir: No primeiro diálogo definiremos o título do gráfico como "Salários por Depto". O Tipo de gráfico como Pie e o Subtipo de Gráfico como Plain. No segundo diálogo informaremos como eixo X a coluna cd_depto. No diálogo seguinte informaremos como eixo Y, ou seja, o valor, a coluna sum_sal (resumo). No próximo diálogo devemos indicar a freqüência de impressão do gráfico. Escolheremos "uma vez por depto(r_g_cd_depto)". Finalmente será solicitado o nome de um arquivo para a gravação do gráfico. Definimos Hyper.ogd. Cumprida esta etapa o gráfico é criado e incluído no layout, dentro do grupo de departamento. Nossa próxima etapa será a definição do resultado na Web. Acionaremos, portanto, o Assistente de Web e preencheremos os diálogos como se seguem: No primeiro diálogo, será possível a escolha de uma coluna como BookMark. A única coluna disponibilizada é cd_depto, portanto, a selecionaremos. No segundo diálogo será possível escolhermos um gráfico para gerar links entre este gráfico e o restante do relatório. Como este é exatamente o nosso objetivo, selecionaremos o único nome de gráfico presente: CT_1 (no meu caso). No próximo diálogo poderemos escolher um arquivo HTML a ser incluído apenas no início do relatório e outro para ser incluído apenas no fim do relatório. Neste caso não fizemos qualquer preenchimento. Para visualizarmos o resultado gerado, no último diálogo escolhemos as opções: Criar Saída HTML agora e Gerar Saída para um Browser da Web. CAPÍTULO 20: HTML/PDF - 149

156 O resultado gráfico é visto na figura ao lado. Do lado esquerdo visualizamos o marcador de livro gerado a partir da coluna cd_depto. Se você clicar sobre um dos códigos de departamento apresentados será feita a navegação para esta área do relatório. Observe, porém, o gráfico. Passe o mouse vagarosamente sobre cada um dos pedaços da Pizza. No rodapé do browser, nos é apresentado o conteúdo deste campo, ou seja, cada cor aponta para uma parte do relatório. Poderemos navegar desta forma. também Por exemplo, se desejarmos ver os detalhes dos salários que fizeram a composição para o departamento D11, basta que pressionemos o mouse sobre o desenho correspondente na Pizza. Ao retornarmos ao Data Model perceberemos a inclusão de um novo sumário do tipo contagem sobre a coluna cd_depto. Consideraremos o nome desta coluna cs_cd_depto (no menu caso). Esta coluna foi criada com o objetivo de auxiliar a montagem e derivação do gráfico. A indicação de marcador de livro está presente na propriedade Marcador de Livro (Bookmark) do grupo Configurações da Web para o item F_Cd_Depto. Esta coluna recebeu dois apelidos, como mostrado no texto a seguir: &<CS_CD_DEPTO>,#&<CD_DEPTO> O primeiro é utilizado pelo gráfico e o segundo utilizado pelo marcador de livro. Abra a tela de propriedades do gráfico e você encontrará, na propriedade Hiperligação de Gráfico o valor #CT_1&<CS_CD_DEPTO>, que será montado dinamicamente para cada um dos valores de cd_depto (count). Para que estes usos fiquem um pouco mais claros, crie uma nova aplicação baseada na mesma query, com o mesmo layout, porém sem o gráfico. Preencha a propriedade BookMark do item F_Cd_Depto com o texto #&<cd_depto>. Gere esta aplicação para Web e analise o resultado. CAPÍTULO 20: HTML/PDF - 150

157 CAPÍTULO 21: INTERFACE FORMS REPORT USANDO O REPORT BUILDER A PARTIR DO FORM BUILDER A construção de um relatório também pode ser iniciada diretamente pelo Form Builder. Abra uma aplicação Form e crie um objeto no nó Relatórios (Reports). Com este objeto poderemos acionar diretamente o Report Builder para a construção do relatório que viermos a usar dentro da aplicação, deixando, inclusive, documentada sua utilização dentro da aplicação. Observe que a utilização do botão direito do mouse permite que acionemos o Report Builder a qualquer momento. ACIONANDO UM REPORT A PARTIR DO FORM Durante o estudo do Form Builder preparamos um exercício (EX40) para que acionasse um relatório. Concluiremos agora este estudo testando o acionamento de um relatório a partir de uma aplicação Form. CAPÍTULO 21: INTERFACE FORMS - REPORT - 151

Banco de Dados BrOffice Base

Banco de Dados BrOffice Base Banco de Dados BrOffice Base Autor: Alessandro da Silva Almeida Disponível em: www.apostilando.com 27/02/2011 CURSO TÉCNICO EM SERVIÇO PÚBLICO Apostila de Informática Aplicada - Unidade VI Índice Apresentação...

Leia mais

ÍNDICE... 2 INTRODUÇÃO... 4

ÍNDICE... 2 INTRODUÇÃO... 4 Mic crosoft Excel 201 0 ÍNDICE ÍNDICE... 2 INTRODUÇÃO... 4 Interface... 4 Guias de Planilha... 5 Movimentação na planilha... 6 Entrada de textos e números... 7 Congelando painéis... 8 Comentários nas Células...

Leia mais

Guia de Início Rápido

Guia de Início Rápido Guia de Início Rápido O Microsoft Word 2013 parece diferente das versões anteriores, por isso criamos este guia para ajudar você a minimizar a curva de aprendizado. Barra de Ferramentas de Acesso Rápido

Leia mais

Microsoft Office PowerPoint 2007

Microsoft Office PowerPoint 2007 INTRODUÇÃO AO MICROSOFT POWERPOINT 2007 O Microsoft Office PowerPoint 2007 é um programa destinado à criação de apresentação através de Slides. A apresentação é um conjunto de Sides que são exibidos em

Leia mais

Status. Barra de Título. Barra de Menu. Barra de. Ferramentas Padrão. Caixa de nomes. Barra de. Ferramentas de Formatação. Indicadores de Coluna

Status. Barra de Título. Barra de Menu. Barra de. Ferramentas Padrão. Caixa de nomes. Barra de. Ferramentas de Formatação. Indicadores de Coluna O que é uma planilha eletrônica? É um aplicativo que oferece recursos para manipular dados organizados em tabelas. A partir deles pode-se gerar gráficos facilitando a análise e interpretação dos dados

Leia mais

MANUAL C R M ÍNDICE. Sobre o módulo de CRM... 2. 1 Definindo a Campanha... 3

MANUAL C R M ÍNDICE. Sobre o módulo de CRM... 2. 1 Definindo a Campanha... 3 ÍNDICE Sobre o módulo de CRM... 2 1 Definindo a Campanha... 3 1.1 Incluir uma campanha... 3 1.2 Alterar uma campanha... 4 1.3 Excluir... 4 1.4 Procurar... 4 2 Definindo os clientes para a campanha... 4

Leia mais

MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS

MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS MANUAL DE NAVEGAÇÃO DO MILLENNIUM BUSINESS 1 Conteúdo Apresentação... 3 1 Página Principal do Sistema... 4 2 Telas de busca... 8 3 Teclas de Navegação... 11 4 Tela de Menu de Relatório... 12 5 Telas de

Leia mais

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR $,'(GR5HSRUW0DQDJHU

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR $,'(GR5HSRUW0DQDJHU $,'(GR5HSRUW0DQDJHU Neste capítulo vamos abordar o ambiente de desenvolvimento do Report Manager e como usar os seus recursos. $FHVVDQGRRSURJUDPD Depois de instalado o Report Manager estará no Grupo de

Leia mais

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas Microsoft Power Point 2003 No Microsoft PowerPoint 2003, você cria sua apresentação usando apenas um arquivo, ele contém tudo o que você precisa uma estrutura para sua apresentação, os slides, o material

Leia mais

Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado.

Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado. , ()! $ Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado. Uma estratégia muito utilizada para organizar visualmente informações numéricas

Leia mais

MVREP- Manual do Gerador de Relatórios. ÍNDICE

MVREP- Manual do Gerador de Relatórios. ÍNDICE ÍNDICE ÍNDICE... 1 CAPÍTULO 01 PREPARAÇÃO DO AMBIENTE... 2 1.1 IMPORTAÇÃO DO DICIONÁRIO DE DADOS... 2 CAPÍTULO 02 CADASTRO E CONFIGURAÇÃO DE RELATÓRIOS... 4 2.1 CADASTRO DE RELATÓRIOS... 4 2.2 SELEÇÃO

Leia mais

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007

ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007 ANDRÉ APARECIDO DA SILVA APOSTILA BÁSICA SOBRE O POWERPOINT 2007 CURITIBA 2015 2 SUMÁRIO INTRODUÇÃO AO MICROSOFT POWERPOINT 2007... 3 JANELA PRINCIPAL... 3 1 - BOTÃO OFFICE... 4 2 - FERRAMENTAS DE ACESSO

Leia mais

QualiQuantiSoft Versão 1.3c

QualiQuantiSoft Versão 1.3c QualiQuantiSoft Versão 1.3c Qualiquantisoft v1.3c Pág.: 1/15 Índice Apresentação do programa... 3 Funções operacionais do programa... 3 Itens de menu... 6 Teclas de atalho... 6 Instrumento de Análise de

Leia mais

WecDB - 1 - WecDB Consulta Web Facilitada ao Banco de Dados

WecDB - 1 - WecDB Consulta Web Facilitada ao Banco de Dados WecDB - 1 - WecDB Consulta Web Facilitada ao Banco de Dados WecDB (Web Easy Consultation Database) é uma ferramenta para criação e disponibilização de consultas à Bancos de Dados na Internet. É composto

Leia mais

Iniciação à Informática

Iniciação à Informática Meu computador e Windows Explorer Justificativa Toda informação ou dado trabalhado no computador, quando armazenado em uma unidade de disco, transforma-se em um arquivo. Saber manipular os arquivos através

Leia mais

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO Antes de criarmos um novo Banco de Dados quero fazer um pequeno parênteses sobre segurança. Você deve ter notado que sempre

Leia mais

GERADOR DE RELATÓRIOS WINREPORT VERSÃO 2.0. Conteúdo

GERADOR DE RELATÓRIOS WINREPORT VERSÃO 2.0. Conteúdo GERADOR DE RELATÓRIOS WINREPORT VERSÃO 2.0 Este manual foi desenvolvido com o objetivo de documentar as principais funcionalidades do Gerador de Relatórios WinReport versão 2.0. Conteúdo 1. Tela Principal...

Leia mais

Arquivos e Pastas. Instrutor Antonio F. de Oliveira. Núcleo de Computação Eletrônica Universidade Federal do Rio de Janeiro

Arquivos e Pastas. Instrutor Antonio F. de Oliveira. Núcleo de Computação Eletrônica Universidade Federal do Rio de Janeiro Arquivos e Pastas Duas visões do Windows Explorer A Hierarquia do Explorer Aparência das pastas Personalizando o Explorer Manipulação de Arquivos e pastas Uso de atalhos Visões do Windows Explorer Para

Leia mais

Microsoft Access: Criar relatórios para um novo banco de dados. Vitor Valerio de Souza Campos

Microsoft Access: Criar relatórios para um novo banco de dados. Vitor Valerio de Souza Campos Microsoft Access: Criar relatórios para um novo banco de dados Vitor Valerio de Souza Campos Conteúdo do curso Visão geral: O produto final Lição: Inclui oito seções Tarefas práticas sugeridas Teste Visão

Leia mais

Menu Utilitários. Atualização do Banco de Dados Atualização e organização dos arquivos existentes

Menu Utilitários. Atualização do Banco de Dados Atualização e organização dos arquivos existentes Atualização do Banco de Dados Atualização e organização dos arquivos existentes Rotina responsável pelo rastreamento de possíveis arquivos não indexados, danificados ou inexistentes. Este processo poderá

Leia mais

Serviço Técnico de Informática. Curso Básico de PowerPoint

Serviço Técnico de Informática. Curso Básico de PowerPoint Serviço Técnico de Informática Curso Básico de PowerPoint Instrutor: Tiago Souza e Silva de Moura Maio/2005 O Microsoft PowerPoint No Microsoft PowerPoint, você cria sua apresentação usando apenas um arquivo

Leia mais

Guia de Início Rápido

Guia de Início Rápido Guia de Início Rápido O Microsoft Excel 2013 parece diferente das versões anteriores, por isso criamos este guia para ajudar você a minimizar a curva de aprendizado. Adicionar comandos à Barra de Ferramentas

Leia mais

Manual do Sistema "Vida Controle de Contatos" Editorial Brazil Informatica

Manual do Sistema Vida Controle de Contatos Editorial Brazil Informatica Manual do Sistema "Vida Controle de Contatos" Editorial Brazil Informatica I Vida Controle de Contatos Conteúdo Part I Introdução 2 1 Vida Controle... de Contatos Pessoais 2 Part II Configuração 2 1 Configuração...

Leia mais

WORKSHOP Ferramenta OLAP IBM Cognos

WORKSHOP Ferramenta OLAP IBM Cognos WORKSHOP Ferramenta OLAP IBM Cognos O objetivo deste documento é orientar o usuário final na utilização das funcionalidades da ferramenta OLAP IBM Cognos, referente a licença de consumidor. Sumário 1 Query

Leia mais

Como funciona? SUMÁRIO

Como funciona? SUMÁRIO SUMÁRIO 1. Introdução... 2 2. Benefícios e Vantagens... 2 3. Como utilizar?... 2 3.1. Criar Chave / Senha de Usuário... 2 3.2. Recursos da Barra Superior... 2 3.2.1. Opções... 3 3.2.1.1. Mover Para...

Leia mais

02 - Usando o SiteMaster - Informações importantes

02 - Usando o SiteMaster - Informações importantes 01 - Apresentação do SiteMaster - News Edition O SiteMaster foi desenvolvido para ser um sistema simples de gerenciamento de notícias, instalado em seu próprio computador e com configuração simplificada,

Leia mais

CONTEÚDOS PROGRAMÁTICOS DA ACADEMIA

CONTEÚDOS PROGRAMÁTICOS DA ACADEMIA Página: 1/16 CONTEÚDOS PROGRAMÁTICOS DA ACADEMIA Módulo CBDS (Central de Banco de Dados Senior) A quem se destina: Todos que tiverem a necessidade de administrar os dados da base de dados da Senior Sistemas

Leia mais

MANUAL DE UTILIZAÇÃO DO WEBMAIL SBC

MANUAL DE UTILIZAÇÃO DO WEBMAIL SBC MANUAL DE UTILIZAÇÃO DO WEBMAIL SBC SUMÁRIO 1 - Tela de Login...03 2 - Caixa de Entrada...04 3 - Escrever Mensagem...06 4 - Preferências...07 4.1 - Configurações Gerais...07 4.2 - Trocar Senha...07 4.3

Leia mais

Mozart de Melo Alves Júnior

Mozart de Melo Alves Júnior Mozart de Melo Alves Júnior WORD 2000 INTRODUÇÃO: O Word é um processador de texto com recursos de acentuação, formatação de parágrafo, estilo de letras diferentes, criação de tabelas, corretor ortográfico,

Leia mais

Noções de. Microsoft SQL Server. Microsoft SQL Server

Noções de. Microsoft SQL Server. Microsoft SQL Server Noções de 1 Considerações Iniciais Basicamente existem dois tipos de usuários do SQL Server: Implementadores Administradores 2 1 Implementadores Utilizam o SQL Server para criar e alterar base de dados

Leia mais

Dicas para usar melhor o Word 2007

Dicas para usar melhor o Word 2007 Dicas para usar melhor o Word 2007 Quem está acostumado (ou não) a trabalhar com o Word, não costuma ter todo o tempo do mundo disponível para descobrir as funcionalidades de versões recentemente lançadas.

Leia mais

ROTINAS PADRÕES DO SISTEMAS

ROTINAS PADRÕES DO SISTEMAS ROTINAS PADRÕES DO SISTEMAS Usando o Sistema pela primeira vez Ao executar o seu Sistema pela primeira vez a tela abaixo será apresentada para que você possa configurar os diretórios onde serão achados

Leia mais

Manual do Painel Administrativo

Manual do Painel Administrativo Manual do Painel Administrativo versão 1.0 Autores César A Miggiolaro Marcos J Lazarin Índice Índice... 2 Figuras... 3 Inicio... 5 Funcionalidades... 7 Analytics... 9 Cidades... 9 Conteúdo... 10 Referência...

Leia mais

Pesquisa e organização de informação

Pesquisa e organização de informação Pesquisa e organização de informação Capítulo 3 A capacidade e a variedade de dispositivos de armazenamento que qualquer computador atual possui, tornam a pesquisa de informação um desafio cada vez maior

Leia mais

UNIVERSIDADE ESTADUAL DE CAMPINAS. Instruções para Uso do Software VISIO

UNIVERSIDADE ESTADUAL DE CAMPINAS. Instruções para Uso do Software VISIO UNIVERSIDADE ESTADUAL DE CAMPINAS Instruções para Uso do Software VISIO Fevereiro/2006 Instruções para uso do Visio... 03 Instruções para Uso do Software VISIO 2 Instruções para uso do Visio O Visio 2003...

Leia mais

Sistema Protocolo, Tramitação e Arquivamento de Processos Manual do Usuário

Sistema Protocolo, Tramitação e Arquivamento de Processos Manual do Usuário SERVIÇO PÚBLICO UNIVERSIDADE FEDERAL DO PARÁ ARQUIVO CENTRAL Sistema Protocolo, Tramitação e Arquivamento de Processos Manual do Usuário Belém Pará Fevereiro 2000 Sumário Introdução... 3 Acesso ao Sistema...

Leia mais

Apostilas OBJETIVA Escrevente Técnico Judiciário TJ Tribunal de Justiça do Estado de São Paulo - Concurso Público 2015. Caderno 1.

Apostilas OBJETIVA Escrevente Técnico Judiciário TJ Tribunal de Justiça do Estado de São Paulo - Concurso Público 2015. Caderno 1. Caderno 1 Índice MS-Windows 7: conceito de pastas, diretórios, arquivos e atalhos, área de trabalho, área de transferência, manipulação de arquivos e pastas, uso dos menus, programas e aplicativos, interação

Leia mais

Mozart de Melo Alves Júnior

Mozart de Melo Alves Júnior 2000 Mozart de Melo Alves Júnior INTRODUÇÃO O Excel 7.0 é um aplicativo de planilha desenvolvido para ser usado dentro do ambiente Windows. As planilhas criadas a partir desta ferramenta poderão ser impressas,

Leia mais

Manual do Módulo SAC

Manual do Módulo SAC 1 Manual do Módulo SAC Índice ÍNDICE 1 OBJETIVO 4 INICIO 4 SAC 7 ASSOCIADO 9 COBRANÇA 10 CUSTO MÉDICO 10 ATENDIMENTOS 11 GUIAS 12 CREDENCIADO 13 LIVRETO 14 BUSCA POR RECURSO 15 CORPO CLÍNICO 16 MENU ARQUIVO

Leia mais

Clique no menu Iniciar > Todos os Programas> Microsoft Office > Publisher 2010.

Clique no menu Iniciar > Todos os Programas> Microsoft Office > Publisher 2010. 1 Publisher 2010 O Publisher 2010 é uma versão atualizada para o desenvolvimento e manipulação de publicações. Juntamente com ele você irá criar desde cartões de convite, de mensagens, cartazes e calendários.

Leia mais

Professor Paulo Lorini Najar

Professor Paulo Lorini Najar Microsoft PowerPoint O Microsoft PowerPoint é uma ferramenta ou gerador de apresentações, palestras, workshops, campanhas publicitárias, utilizados por vários profissionais, entre eles executivos, publicitários,

Leia mais

RESUMO DE CATALOGAÇÃO

RESUMO DE CATALOGAÇÃO RESUMO DE CATALOGAÇÃO CLASSIFICAÇÃO DISTINTA Contatos: Cirineo Zenere ([email protected]) Eulália M. Soares ([email protected]) Josilaine O. Cezar ([email protected]) SUMÁRIO INICIANDO A CATALOGAÇÃO...2

Leia mais

Análise de Dados do Financeiro

Análise de Dados do Financeiro Análise de Dados do Financeiro Introdução Para reunir em um só local as informações de contas a pagar e receber cadastradas e/ou geradas no sistema TTransp existe a interface de análise de dados do financeiro.

Leia mais

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho. DELPHI BÁSICO VANTAGENS Ambiente de desenvolvimento fácil de usar; 1. Grande Biblioteca de Componentes Visuais (VCL - Visual Component Library), que são botões, campos, gráficos, caixas de diálogo e acesso

Leia mais

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo

TUTORIAL DO ACCESS PASSO A PASSO. I. Criar um Novo Banco de Dados. Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo TUTORIAL DO ACCESS PASSO A PASSO I. Criar um Novo Banco de Dados Passos: 1. Abrir o Access 2. Clicar em Criar um novo arquivo 3. Clicar em Banco de Dados em Branco 4. Escrever um nome na caixa de diálogo

Leia mais

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 1 Sumário 1 - Instalação Normal do Despachante Express... 3 2 - Instalação do Despachante Express em Rede... 5 3 - Registrando o Despachante Express...

Leia mais

AULA 1 Iniciando o uso do TerraView

AULA 1 Iniciando o uso do TerraView 1.1 AULA 1 Iniciando o uso do TerraView Essa aula apresenta a interface principal do TerraView e sua utilização básica. Todos os arquivos de dados mencionados nesse documento são disponibilizados junto

Leia mais

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção

Fluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção Este procedimento corresponde ao fluxo de trabalho de Indexação de OCR com separação de código de correção no programa de treinamento do Capture Pro Software. As etapas do procedimento encontram-se na

Leia mais

Word 1 - Introdução 1.1 - Principais recursos do word 1.2 - A janela de documento 1.3 - Tela principal

Word 1 - Introdução 1.1 - Principais recursos do word 1.2 - A janela de documento 1.3 - Tela principal Word 1 - Introdução O Word para Windows ou NT, é um processador de textos cuja finalidade é a de nos ajudar a trabalhar de maneira mais eficiente tanto na elaboração de documentos simples, quanto naqueles

Leia mais

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR

Novell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR Novell Teaming - Guia de início rápido Novell Teaming 1.0 Julho de 2007 INTRODUÇÃO RÁPIDA www.novell.com Novell Teaming O termo Novell Teaming neste documento se aplica a todas as versões do Novell Teaming,

Leia mais

Power Point. Autor: Paula Pedone

Power Point. Autor: Paula Pedone Power Point Autor: Paula Pedone INTRODUÇÃO O POWER POINT é um editor de apresentações, pertencente ao Pacote Office da Microsoft. Suas principais características são: criação de apresentações através da

Leia mais

Lição 1 - Criação de campos calculados em consultas

Lição 1 - Criação de campos calculados em consultas 1 de 5 21-08-2011 22:15 Lição 1 - Criação de campos calculados em consultas Adição de Colunas com Valores Calculados: Vamos, inicialmente, relembrar, rapidamente alguns conceitos básicos sobre Consultas

Leia mais

SCIM 1.0. Guia Rápido. Instalando, Parametrizando e Utilizando o Sistema de Controle Interno Municipal. Introdução

SCIM 1.0. Guia Rápido. Instalando, Parametrizando e Utilizando o Sistema de Controle Interno Municipal. Introdução SCIM 1.0 Guia Rápido Instalando, Parametrizando e Utilizando o Sistema de Controle Interno Municipal Introdução Nesta Edição O sistema de Controle Interno administra o questionário que será usado no chek-list

Leia mais

Capítulo 7 O Gerenciador de Arquivos

Capítulo 7 O Gerenciador de Arquivos Capítulo 7 O Gerenciador de Arquivos Neste capítulo nós iremos examinar as características da interface do gerenciador de arquivos Konqueror. Através dele realizaremos as principais operações com arquivos

Leia mais

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova. 3.5 Páginas: Ao clicar em Páginas, são exibidas todas as páginas criadas para o Blog. No nosso exemplo já existirá uma página com o Título Página de Exemplo, criada quando o WorPress foi instalado. Ao

Leia mais

Iniciando o MySQL Query Brower

Iniciando o MySQL Query Brower MySQL Query Brower O MySQL Query Browser é uma ferramenta gráfica fornecida pela MySQL AB para criar, executar e otimizar solicitações SQL em um ambiente gráfico. Assim como o MySQL Administrator foi criado

Leia mais

Informática Básica. Microsoft Word XP, 2003 e 2007

Informática Básica. Microsoft Word XP, 2003 e 2007 Informática Básica Microsoft Word XP, 2003 e 2007 Introdução O editor de textos Microsoft Word oferece um conjunto de recursos bastante completo, cobrindo todas as etapas de preparação, formatação e impressão

Leia mais

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO Manual de Avaliação de Desempenho Cadastro UNIFAP MACAPÁ-AP 2013 S U M Á R I O 1 Tela de Login...2 2 Acessando ao submenu cadastro de avaliação

Leia mais

Sistema de Gerenciamento Missionário SENAMI. Secretaria Nacional de Missões

Sistema de Gerenciamento Missionário SENAMI. Secretaria Nacional de Missões Sistema de Gerenciamento Missionário SENAMI Secretaria Nacional de Missões Manual do Usuário Apresentamos a seguir um guia básico contendo informações gerais para utilização do Sistema de Gerenciamento

Leia mais

Gestão de Ativos. Manual do Usuário. Treinamento Fase 1 (TRN 01)

Gestão de Ativos. Manual do Usuário. Treinamento Fase 1 (TRN 01) Gestão de Ativos Manual do Usuário Treinamento Fase 1 (TRN 01) Índice 1. Introdução... 3 2. Movimentações de Ativos... 4 2.1. Monitoração... 4 2.1.1. Monitor de Movimentação de Ativos...4 2.2. Transações...15

Leia mais

Barra de Títulos. Barra de Menu. Barra de Ferramentas. Barra de Formatação. Painel de Tarefas. Seleção de Modo. Área de Trabalho.

Barra de Títulos. Barra de Menu. Barra de Ferramentas. Barra de Formatação. Painel de Tarefas. Seleção de Modo. Área de Trabalho. Conceitos básicos e modos de utilização das ferramentas, aplicativos e procedimentos do Sistema Operacional Windows XP; Classificação de softwares; Principais operações no Windows Explorer: criação e organização

Leia mais

Manual das funcionalidades Webmail AASP

Manual das funcionalidades Webmail AASP Manual das funcionalidades Webmail AASP 1. Configurações iniciais 2. Regras 3. Histórico da conta 4. Autorresposta 5. Dados de acesso (alterando senha de acesso) 6. Identidade (assinatura) 7. Redirecionamento

Leia mais

O programa Mysql acompanha o pacote de instalação padrão e será instalado juntamente com a execução do instalador.

O programa Mysql acompanha o pacote de instalação padrão e será instalado juntamente com a execução do instalador. INTRODUÇÃO O Programa pode ser instalado em qualquer equipamento que utilize o sistema operacional Windows 95 ou superior, e seu banco de dados foi desenvolvido em MySQL, sendo necessário sua pré-instalação

Leia mais

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini [email protected]

Gerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com Gerenciamento de Arquivos e Pastas Professor: Jeferson Machado Cordini [email protected] Arquivo Todo e qualquer software ou informação gravada em nosso computador será guardada em uma unidade de disco,

Leia mais

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos

Fluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos Este procedimento corresponde ao fluxo de trabalho de Indexação de código de barras e de separação de documentos no programa de treinamento do Capture Pro Software. As etapas do procedimento encontram-se

Leia mais

Banco de Dados. Microsoft Access

Banco de Dados. Microsoft Access Banco de Dados Microsoft Access PARTE 01 edição 2007 Índice 01-) Conceito... 2 02) Sistema Gerenciador de Banco de Dados Relacional (SGBDR)... 3 03) Access... 3 04) Etapas para elaboração de um Banco de

Leia mais

INTRODUÇÃO AO WINDOWS

INTRODUÇÃO AO WINDOWS INTRODUÇÃO AO WINDOWS Paulo José De Fazzio Júnior 1 Noções de Windows INICIANDO O WINDOWS...3 ÍCONES...4 BARRA DE TAREFAS...5 BOTÃO...5 ÁREA DE NOTIFICAÇÃO...5 BOTÃO INICIAR...6 INICIANDO PROGRAMAS...7

Leia mais

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL Urano Indústria de Balanças e Equipamentos Eletrônicos Ltda. Rua Irmão Pedro 709 Vila Rosa Canoas RS Fone: (51) 3462.8700 Fax: (51) 3477.4441 Características do Software Urano Integra 2.2 Data: 12/05/2014

Leia mais

Manual do Visualizador NF e KEY BEST

Manual do Visualizador NF e KEY BEST Manual do Visualizador NF e KEY BEST Versão 1.0 Maio/2011 INDICE SOBRE O VISUALIZADOR...................................................... 02 RISCOS POSSÍVEIS PARA O EMITENTE DA NOTA FISCAL ELETRÔNICA.................

Leia mais

Montar planilhas de uma forma organizada e clara.

Montar planilhas de uma forma organizada e clara. 1 Treinamento do Office 2007 EXCEL Objetivos Após concluir este curso você poderá: Montar planilhas de uma forma organizada e clara. Layout da planilha Inserir gráficos Realizar operações matemáticas 2

Leia mais

O Windows 7 é um sistema operacional desenvolvido pela Microsoft.

O Windows 7 é um sistema operacional desenvolvido pela Microsoft. Introdução ao Microsoft Windows 7 O Windows 7 é um sistema operacional desenvolvido pela Microsoft. Visualmente o Windows 7 possui uma interface muito intuitiva, facilitando a experiência individual do

Leia mais

Smart Laudos 1.9. A Forma Inteligente de Criar seus Laudos Médicos. Manual do Usuário

Smart Laudos 1.9. A Forma Inteligente de Criar seus Laudos Médicos. Manual do Usuário Smart Laudos 1.9 A Forma Inteligente de Criar seus Laudos Médicos Manual do Usuário Conteúdo 1. O que é o Smart Laudos?... 3 2. Características... 3 3. Instalação... 3 4. Menu do Sistema... 4 5. Configurando

Leia mais

MANUAL DO GERENCIADOR ESCOLAR WEB

MANUAL DO GERENCIADOR ESCOLAR WEB CNS LEARNING MANUAL DO GERENCIADOR ESCOLAR WEB Versão Online 13 Índice ÍNDICE... 1 VISÃO GERAL... 2 CONCEITO E APRESENTAÇÃO VISUAL... 2 PRINCIPAIS MÓDULOS... 3 ESTRUTURAÇÃO... 3 CURSOS... 4 TURMAS... 4

Leia mais

Caso você possua cadastro no Twitter, selecione a opção Logar com meu usuário, e insira seu nome de usuário e senha do serviço:

Caso você possua cadastro no Twitter, selecione a opção Logar com meu usuário, e insira seu nome de usuário e senha do serviço: Tópicos 1. Efetuando login 2. Componentes da tela principal 2.1. Barra de ferramentas 2.2. Painel de atualizações 2.3. Rede de contatos do usuário 2.3.1. Controles de mouse e teclado 2.3.2. Entendendo

Leia mais

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados

Tutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados Tutorial Plone 4 Manutenção de Sites Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados Sumário Introdução 1 Como fazer a autenticação do usuário 1.1 Através do

Leia mais

MANUAL DE UTILIZAÇÃO

MANUAL DE UTILIZAÇÃO MANUAL DE UTILIZAÇÃO Módulo de operação Ativo Bem vindo à Vorage CRM! Nas próximas paginas apresentaremos o funcionamento da plataforma e ensinaremos como iniciar uma operação básica através do nosso sistema,

Leia mais

Controle do Arquivo Técnico

Controle do Arquivo Técnico Controle do Arquivo Técnico Os documentos existentes de forma física (papel) no escritório devem ser guardados em pastas (normalmente pastas suspensas) localizadas no Arquivo Técnico. Este Arquivo pode

Leia mais

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT Power Point Básico Santa Maria, julho de 2006 O Power Point é um aplicativo do Microsoft Office direcionado à criação de apresentações.

Leia mais

Software de monitoramento Módulo CONDOR CFTV V1 R1

Software de monitoramento Módulo CONDOR CFTV V1 R1 Software de monitoramento Módulo CONDOR CFTV V1 R1 Versão 30/06/2014 FOR Segurança Eletrônica Rua dos Lírios, 75 - Chácara Primavera Campinas, SP (19) 3256-0768 1 de 12 Conteúdo A cópia total ou parcial

Leia mais

Gerente de Tecnologia: Ricardo Alexandre F. de Oliveira Marta Cristiane Pires M. Medeiros Mônica Bossa dos Santos Schmid WORD 2007

Gerente de Tecnologia: Ricardo Alexandre F. de Oliveira Marta Cristiane Pires M. Medeiros Mônica Bossa dos Santos Schmid WORD 2007 WORD 2007 PREFEITURA DO MUNICÍPIO DE LONDRINA SECRETARIA MUNICIPAL DE EDUCAÇÃO GERÊNCIA DE TECNOLOGIA Gerente de Tecnologia: Ricardo Alexandre F. de Oliveira Marta Cristiane Pires M. Medeiros Mônica Bossa

Leia mais

Guia Rápido ClaireAssist

Guia Rápido ClaireAssist Guia Rápido ClaireAssist Informações do Evento Nossa equipe de Operações enviará por email todos os dados para o evento. Você receberá dois numeros de acesso, um para moderador e outro para os participantes,

Leia mais

Manual Captura S_Line

Manual Captura S_Line Sumário 1. Introdução... 2 2. Configuração Inicial... 2 2.1. Requisitos... 2 2.2. Downloads... 2 2.3. Instalação/Abrir... 3 3. Sistema... 4 3.1. Abrir Usuário... 4 3.2. Nova Senha... 4 3.3. Propriedades

Leia mais

SUMÁRIO Acesso ao sistema... 2 Atendente... 3

SUMÁRIO Acesso ao sistema... 2 Atendente... 3 SUMÁRIO Acesso ao sistema... 2 1. Login no sistema... 2 Atendente... 3 1. Abrindo uma nova Solicitação... 3 1. Consultando Solicitações... 5 2. Fazendo uma Consulta Avançada... 6 3. Alterando dados da

Leia mais

A barra de menu a direita possibilita efetuar login/logout do sistema e também voltar para a página principal.

A barra de menu a direita possibilita efetuar login/logout do sistema e também voltar para a página principal. MANUAL DO SISCOOP Sumário 1 Menu de Navegação... 3 2 Gerenciar País... 5 3- Gerenciamento de Registro... 8 3.1 Adicionar um registro... 8 3.2 Editar um registro... 10 3.3 Excluir um registro... 11 3.4

Leia mais

CICLO DE APERFEIÇOAMENTO PROFISSIONAL DOS SERVIDORES MUNICIPAIS DE MARICÁ- RJ EDITOR DE TEXTO - WORD

CICLO DE APERFEIÇOAMENTO PROFISSIONAL DOS SERVIDORES MUNICIPAIS DE MARICÁ- RJ EDITOR DE TEXTO - WORD Faculdade de Administração, Ciências Contábeis e Turismo Pós-Graduação em Gestão de Negócios CICLO DE APERFEIÇOAMENTO PROFISSIONAL DOS SERVIDORES MUNICIPAIS DE MARICÁ- RJ EDITOR DE TEXTO - WORD EMENTA

Leia mais

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema.

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema. O que é o projeto O PROINFODATA - programa de coleta de dados do projeto ProInfo/MEC de inclusão digital nas escolas públicas brasileiras tem como objetivo acompanhar o estado de funcionamento dos laboratórios

Leia mais

Manual AGENDA DE BACKUP

Manual AGENDA DE BACKUP Gemelo Backup Online DESKTOP Manual AGENDA DE BACKUP Realiza seus backups de maneira automática. Você só programa os dias e horas em que serão efetuados. A única coisa que você deve fazer é manter seu

Leia mais

1 ACESSO PARA SECRETÁRIA... 4 2 - CONFIGURAR HORÁRIOS DE ATENDIMENTO... 4 2.1 BLOQUEANDO E HABILITANDO HORÁRIOS... 5 3 PRÉ-DEFININDO PARÂMETROS DE

1 ACESSO PARA SECRETÁRIA... 4 2 - CONFIGURAR HORÁRIOS DE ATENDIMENTO... 4 2.1 BLOQUEANDO E HABILITANDO HORÁRIOS... 5 3 PRÉ-DEFININDO PARÂMETROS DE 2 1 ACESSO PARA SECRETÁRIA... 4 2 - CONFIGURAR HORÁRIOS DE ATENDIMENTO... 4 2.1 BLOQUEANDO E HABILITANDO HORÁRIOS... 5 3 PRÉ-DEFININDO PARÂMETROS DE ATENDIMENTO... 6 4 - A TELA AGENDA... 7 4.1 - TIPOS

Leia mais

CRIANDO TEMPLATES E LEGENDAS

CRIANDO TEMPLATES E LEGENDAS CRIANDO TEMPLATES E LEGENDAS Este tutorial tem como objetivo instruir passo à passo como criar templates de peças, utilizar os novos recursos de cadastro de propriedade de peças e criação de legenda. 1-

Leia mais

Treinamento em BrOffice.org Calc

Treinamento em BrOffice.org Calc Treinamento em BrOffice.org Calc 1 Índice I. INTRODUÇÃO...3 II. NÚMEROS, TEXTOS, FÓRMULAS E DATAS...4 III. MENUS BÁSICOS...5 1. Arquivo...5 2. Editar...5 3. Formatar...5 IV. FÓRMULAS...8 V. REFERÊNCIAS

Leia mais

Versão 2.2.0 PIMACO AUTOADESIVOS LTDA. Assistente Pimaco + 2.2.0. Ajuda ao Usuário

Versão 2.2.0 PIMACO AUTOADESIVOS LTDA. Assistente Pimaco + 2.2.0. Ajuda ao Usuário Versão 2.2.0 PIMACO AUTOADESIVOS LTDA. Assistente Pimaco + 2.2.0 Ajuda ao Usuário A S S I S T E N T E P I M A C O + 2.2.0 Ajuda ao usuário Índice 1. BÁSICO 1 1. INICIANDO O APLICATIVO 2 2. O AMBIENTE DE

Leia mais

Apostilas OBJETIVA Escrevente Técnico Judiciário TJ Tribunal de Justiça do Estado de São Paulo - Concurso Público 2015. Índice

Apostilas OBJETIVA Escrevente Técnico Judiciário TJ Tribunal de Justiça do Estado de São Paulo - Concurso Público 2015. Índice Índice Caderno 2 PG. MS-Excel 2010: estrutura básica das planilhas, conceitos de células, linhas, colunas, pastas e gráficos, elaboração de tabelas e gráficos, uso de fórmulas, funções e macros, impressão,

Leia mais

INSTALAÇÃO DO SISTEMA CONTROLGÁS

INSTALAÇÃO DO SISTEMA CONTROLGÁS INSTALAÇÃO DO SISTEMA CONTROLGÁS 1) Clique duas vezes no arquivo ControlGasSetup.exe. Será exibida a tela de boas vindas do instalador: 2) Clique em avançar e aparecerá a tela a seguir: Manual de Instalação

Leia mais

IIIIIIII HAND INVENTORY

IIIIIIII HAND INVENTORY MANUAL DE OPERAÇÃO IIIIIIII HAND INVENTORY INVENTÁRIO GENÉRICO e-mail: [email protected] site: www.mobilitysistemas.com.br Índice 1 - Introdução... 2 2 - Instalação... 2 2.1. Palm Desktop...

Leia mais

Instruções de uso do TABNET. Linha, Coluna e Conteúdo

Instruções de uso do TABNET. Linha, Coluna e Conteúdo O Tabnet, aplicativo desenvolvido pelo Departamento de Informática do Sistema Único de Saúde (DATASUS), permite ao usuário fazer tabulações de bases de dados on-line e foi gentilmente cedido para disponibilização

Leia mais

Manual Sistema Curumim. Índice

Manual Sistema Curumim. Índice Versão 1.0 Índice 1. Instalação do Sistema... 3 2. Botões e Legenda... 4 3. Login do Sistema... 5 4. Tela Principal... 6 5. Dados Cadastrais da Empresa... 7 6. Aluno Cadastro... 8 7. Aluno - Cadastro de

Leia mais

O Excel é um programa de computador desenvolvido para gerenciar dados na forma de planilhas.

O Excel é um programa de computador desenvolvido para gerenciar dados na forma de planilhas. O que é o Excel? O Excel é um programa de computador desenvolvido para gerenciar dados na forma de planilhas. Ele possibilita ao usuário desenvolver planilhas que efetuem cálculos, dos mais simples aos

Leia mais

Veja abaixo um exemplo de como os dados são mostrados quando usamos o

Veja abaixo um exemplo de como os dados são mostrados quando usamos o Objeto DataGridView O controle DataGridView é um dos objetos utilizados para exibir dados de tabelas de um banco de dados. Ele está disponível na guia de objetos Data na janela de objetos do vb.net. Será

Leia mais

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela

Aula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela Aula 01 - Formatações prontas e Sumário Formatar como Tabela Formatar como Tabela (cont.) Alterando as formatações aplicadas e adicionando novos itens Removendo a formatação de tabela aplicada Formatação

Leia mais

Introdução. Servidor de Tempo (SNTP) com opção de horário de verão automático; 1 Cadastro do novo modelo de equipamento Urano Topmax SS

Introdução. Servidor de Tempo (SNTP) com opção de horário de verão automático; 1 Cadastro do novo modelo de equipamento Urano Topmax SS Urano Indústria de Balanças e Equipamentos Eletrônicos Ltda. Rua Irmão Pedro 709 Vila Rosa Canoas RS Fone: (51) 3462.8700 Fax: (51) 3477.4441 Guia de Novas Funcionalidades Urano Integra 2.3 Data: 15/04/2015

Leia mais