Você está na página 1de 45

RELATRIOS RTF

Manual de criao de relatrio em RTF para o ambiente SI*

Criao: Paulo Ricardo Saenger 07 de maio de 2004 Atualizado: 09 de setembro de 2008


Pgina 1 de 45

RELATRIOS RTF

ndice
1. Observao ............................................................................................................... 3 2. Definio .................................................................................................................. 3 3. Sistemas Utilizados ................................................................................................... 3 4. Template RTF........................................................................................................... 4 4.1 Campos ............................................................................................................... 7 4.2 Funes............................................................................................................... 8 4.2.1 Funo If ...................................................................................................... 9 4.2.2 Funo CheckGroup ................................................................................... 10 4.2.3 Funes com variveis................................................................................ 11 4.3 Bandas .............................................................................................................. 12 4.3.1 Cabealho e rodap..................................................................................... 12 4.3.2 Ttulo.......................................................................................................... 14 4.3.3 Detalhes ..................................................................................................... 14 4.3.4 Grupos........................................................................................................ 15 4.3.4.1 Grupos Simples ....................................................................................... 16 4.3.4.2 Grupos com salto de pgina ..................................................................... 17 4.3.5 Rodap de agrupamento (Group Footer) ..................................................... 18 4.3.5.1 Utilizando somatrios no rodap do agrupamento.................................... 19 4.3.5 Sumrio...................................................................................................... 22 4.4 Relatrio no-tabelares...................................................................................... 22 5. O cadastramento do Template ................................................................................. 24 5.1 A aplicao de cadastro ..................................................................................... 24 5.2 Cadastrando o arquivo....................................................................................... 24 6. O comando SQL ..................................................................................................... 26 6.1 Projeo da consulta.......................................................................................... 26 6.2 Parmetros da consulta ...................................................................................... 27 6.3 Cadastrando a consulta ...................................................................................... 29 7. Relacionamento ...................................................................................................... 30 7.1 Relacionando o relatrio;................................................................................... 30 8. A aplicao executora ............................................................................................. 31 8.1 Aplicao de relatrio nico .............................................................................. 31 8.2 Adicionando parmetro de valor nico .............................................................. 34 8.3 Adicionando parmetro de mltiplos valores ..................................................... 36 8.4 Aplicao com suporte a mltiplos relatrios..................................................... 38 9. Construindo um Exemplo........................................................................................ 41 9.1 Construindo um Template ................................................................................. 41 9.2 O COMANDO SQL.......................................................................................... 44 9.3 CADASTRO DO ARQUIVO............................................................................ 44 9.4 Cadastro da tabela ............................................................................................. 45 9.5 Aplicao Executora ......................................................................................... 45 9.6 Relacionando .................................................................................................... 45 9.7 Execuo........................................................................................................... 45

Pgina 2 de 45

RELATRIOS RTF

1. Observao
Usualmente, os relatrios obtidos a partir de dados contidos em um banco, tm formato tabular, com cabealho e colunas fixas, sem qualquer outra forma de formatao de texto como pargrafo ou informaes mais descritivas. Tais relatrios, no podem, portanto, serem usados para criao de documentos oficiais como atas e atestados devido a suas limitaes. Relatrios em RTF suprem essa necessidade de criao de documentos oficiais padronizados. Alm de relatrios em forma de tabela, os relatrio RTF podem gerar textos formatados, cuja origem de seus dados seja unicamente do banco de dados da instituio, da mesma forma que os relatrios usuais. Dessa forma, no mais necessrio que se abra um documento com campos vazios, preencha-os com os dados necessrios para ento imprimi-lo a cada novo requerimento. A responsabilidade de preencher os dados no documento unicamente do sistema. Ao usurio cabe apenas preencher os parmetros se necessrio.

2. Definio
Relatrios em RTF so documentos criados em editores de texto, e salvos em formato RTF (.rtf). Tais documentos, alm da informao fixa prpria, contm informaes extras (TAGs), cujo propsito informar a aplicao onde colocar os dados. Desta forma, ao final do processo, ao ser executado, teremos um relatrio padronizado pela instituio, cujos dados de origem so homologados pela mesma, sem qualquer responsabilidade do quem o requisitou. Alm disso, pode conter toda a formatao de texto necessria comum em documentos oficiais. Outro fato interessante que o relatrio final poder ser em formato PDF, impossibilitando a modificao de seu contedo antes de ser impresso. Os documentos formatados para serem utilizados como relatrios RTF so denominados de template.

3. Sistemas Utilizados
O sistema utilizado para criar/executar um relatrio RTF tem as seguintes partes: Template RTF (1) Cadastro de Arquivos (2) Comando SQL (3) Cadastro de Tabelas (4) Relacionamento da aplicao executora com o template e o SQL (5) Aplicao que executa o relatrio (6)

Pgina 3 de 45

RELATRIOS RTF

4 2

3 1 6

Fig.1: Aplicaes envolvidas na instalao de um relatrio RTF.

4. Template RTF
O template um documento salvo em formato RTF (.rtf) e preparado para receber informaes do banco de dados. Seu contedo composto por texto fixo e linhas de cdigo (TAGs) que so interpretadas pelo sistema. O texto comum ser impresso normalmente da forma e formatao aplicado sobre ele, e as TAGs, que representam o local de insero de dados ou a chamada a funes, sero interpretadas pelo sistema, formando assim o documento final. Toda TAG precisa ser escrita entre barras \, de forma que o programa possa interpret-las corretamente. Caso uma das barras no seja colocada ou a TAG esteja incorreta, ela ser tratada como texto comum e impressa como tal. Algumas TAGs requerem outra TAG para definir o incio e fim de um certo comando, outras trabalham sozinhas, inserindo ou formatando uma informao em um certo ponto do documento. Um template comum mostrado abaixo:

Pgina 4 de 45

RELATRIOS RTF

Toda TAG inserida escrito entre barras invertidas \ colocadas no incio e no fim da mesma. Por Exemplo:

Isto um texto e \isto cdigo\ .


De forma que o cdigo inserido ser tratado pela aplicao e no deve ser simplesmente impresso. O template se vale de qualquer tipo de formatao existente no programa como fonte, sombreamento, caixas de texto, figuras e outras, os quais sero aplicados tal como foram criados ao contrrio do cdigo que ser interpretado pela aplicao. As principais TAGs do relatrio so \SCAN()\ e \ENDSCAN\.

Pgina 5 de 45

RELATRIOS RTF \SCAN(Consulta)\ serve para iniciar a leitura dos registros retornados na consulta especificada no seu parmetro e \ENDSCAN\ serve para avanar para o prximo registro, fechando assim o loop. Ou seja, toda TAG entre \SCAN(Consulta)\ e \ENDSCAN\, far referncia a informaes contidas no registro atual da consulta e junto com o texto presente entre \SCAN()\ e \ENDSCAN\, ser repetido novamente para cada registro retornado na consulta. Por exemplo, para uma consulta que retorne os seguintes dados: COD 101 101 101 101 CURSO Matemtica Matemtica Matemtica Matemtica MATR 001 002 003 004 NOME Carlos Maria Clara Paulo

e um template com o seguinte cdigo: \Scan(a)\ Cd Curso: \a:COD\ - \a:CURSO\ Matrcula: \a:MATR\ Nome: \a:NOME\ \EndScan\ teremos o seguinte resultado: Cd Curso: 101 - Matemtica Matrcula: 001 Nome: Carlos Cd Curso: 101 - Matemtica Matrcula: 002 Nome: Maria Cd Curso: 101 - Matemtica Matrcula: 003 Nome: Clara Cd Curso: 101 - Matemtica Matrcula: 004 Nome: Paulo A TAG \SCAN(Tabela)\ tem o parmetro Tabela que especifica a consulta a ser tratada. Para a 1 consulta adicionada no relatrio, este valor a, para o 2, b e assim por diante. Para cada \SCAN(Tabela)\, preciso haver um \ENDSCAN\. Pode-se ter \SCAN()\ aninhados como a seguir: \Scan(a)\ \Scan(b)\ \EndScan\ \Scan(c)\ \EndScan\ Pgina 6 de 45

RELATRIOS RTF \EndScan\ As outras TAGs se dividem em dois grupos: Campos e Funes.

4.1 Campos
TAGs de campos indicam aplicao, o local no documento onde deve inserir uma informao, podendo esta ser de origem da aplicao, um valor calculado, ou do banco de dados. Se este campo estiver inserido no meio de um texto normal, este ser reorganizado de forma a conter todo o contedo do campo. Por exemplo, se o documento contiver o seguinte texto: Atestamos, a pedido do (a) interessado (a) que o (a) aluno (a) \b:NOME_ALUNO\, matrcula n. \b:MATR_ALUNO\, do curso de \b:CURSO_ALUNO\ , est regularmente matriculado (a) no \b:PERIODO\ letivo de \b:ANO\. Pode-se ter o seguinte resultado: Atestamos, a pedido do (a) interessado (a) que o (a) aluno (a) Sabrina Borba Dalcin, matrcula n. 2010666, do curso de Engenharia Eltrica, est regularmente matriculado (a) no 1 Semestre letivo de 2000. TAGs de campos so formados pelas barras \, uma letra indicando qual a consulta de origem, e o nome do campo na consulta. A letra da consulta necessria, pois, vrias consultas podem ser includas no relatrio ao mesmo tempo, sendo a, para a primeira consulta inclusa. Por padro, a consulta que traz os dados da instituio marcada a. Com ela esto disponveis os seguintes campos: Campo
NOME_INSTITUICAO LOGOMARCA

RAZAO_SOCIAL Os quais usados da seguinte forma: \FImg(a:LOGOMARCA,100))\ \a:NOME_INSTITUICAO\ Retornam assim:

Descrio Retorna o nome da instituio; Retorna o cone da instituio. Deve ser usado com a funo FImg; Retorna a razo social da instituio;

UNIVERSIDADE FEDERAL DE SANTA MARIA

Pgina 7 de 45

RELATRIOS RTF A funo FImg ser vista no tpico seguinte.

4.2 Funes
TAGs de funes executam algum cdigo para determinada finalidade como, comando de deciso, laos, formatao ou valor de variveis. As funes podem ou no exigir parmetros. Caso a funo necessite de parmetros, estes devem ser separados por vrgula ,. As seguintes funes esto atualmente disponveis para relatrios RTF: Nome Funo CheckGroup(Campo; Nome:Texto, AtualizarValor: Booleana):Booleana ReportTitle() RecNo(Campo):Integer; GetRotulo(ID_Rtulo:Numrico):Texto FormatDateTime(Formato:Texto; Campo) IsNull(Campo):Booleana Txt2rtf(Texto):Texto Odd (Num: Numerico) FormatFloat(Campo;Formato:Texto) MoveBy(Campo; n: Numrico) Descrio Retorna True se mudou o valor do campo. Caso utiliza-se a funo com a mesma varivel mais de uma vez, somente a ltima deve ter True para o 3 parmetro; (Ver abaixo) Retorna o nome cadastrado para o relatrio no sistema; Retorna o nmero do registro atual da consulta; Retorna o contedo do rtulo, dado seu ID; Retorna a data no formato do sistema ou do formato informado, se incluso. Ex: dd/mm, hh:mm; Retorna True caso o valor do campo seja nulo; Converte um texto para ser usado em RTF; Retorna True caso o valor informado seja par; Retorna o nmero no formato #,##0.00 ou do formato informado, se incluso;

Avana ou retorna o cursor da tabela n posies; IsEqual(Valor1, Valor2):Booleana Retorna True caso os argumentos (campo, nmero ou texto) informados sejam iguais. RecordCount(Campo):Numrico Retorna o nmero de registros da tabela; GetNumeroPorExtenso(Numero:Numrico):Texto Retorna o nmero informado por extenso (Formato moeda); IsLast(Campo):Booleana Retorna True caso seja o ltimo registro; GetNumeroPorExtensoSemMoeda (Numero: Numrico):Texto Retorna o nmero informado por extenso; Fimg (campo: Imagem; Tamanho: Numrico) Formata a imagem no tamanho especificado; If(<Condio>: Booleana) Imprime um trecho de texto ou outro conforme o resultado da condio; (Ver abaixo) Reset(Varivel) Reinicializa uma varivel; Onde Campo, deve ser informado como b:NOME_CAMPO, onde b, a consulta de origem dos dados. Caso o relatrio utilize mais consultas, elas seriam c, d e etc. A consulta a a consulta padro da tabela PAR_INSTITUICAO. Para usar as funes que retornam valores, deve-se inseri-los no local onde a sua resposta deve aparecer, podendo inclusive, ser concatenado ao texto. Por exemplo: Existem \RecordCount(b:Matricula)\ alunos matriculados. Pgina 8 de 45

RELATRIOS RTF

Pode retornar: Existem 150 alunos matriculados. Outro exemplo: O valor da instalao de \GetNumeroPorExtenso(123)\ . retornaria O valor da instalao de cento e vinte e trs reais.

4.2.1 Funo If
A funo If serve para testar condies que retornam um valor booleana (TRUE ou FALSE). Caso a condio seja verdadeira, o primeiro trecho ser executado, caso falso, o segundo trecho ser executado, caso exista. A funo IF tem a seguinte estrutura: \If(<Valor booleano>)\ .....Texto se verdadeiro...... \Endif\ ou \If(<Valor booleano>)\ .....Texto se verdadeiro...... \Else\ .....Texto se falso...... \Endif\

Onde <Valor booleana> pode ser uma comparao entre valores, um campo, um retorno de funo ou simplesmente TRUE ou FALSE. A funo \If\ exige a TAG de finalizao \EndIf\ para cada \If()\ existente. OBS A TAG \EndIf\ obrigatria. A TAG \Else\ opcional.

Se Valor booleano TRUE, ser impresso o texto contido no espao entre o \If(<Valor booleano>)\ e \EndIf\. A clusula \else\ opcional. O resultado dela (o espao entre \else\ e \EndIf\) ser impresso se <Valor Booleano> resultar em FALSE. Entende-se por Valor Booleano o resultado de uma comparao de valores que, atravs do uso de =, <> , <, <=, > e >= ou de uma funo, gere como resposta verdadeiro ou falso. Os seguintes exemplos so vlidos: \If (1 = 1)\ \If(b:ID_TABELA <> 110)\ \If(b: COD_TABELA >= c:COD_TABELA)\ \If(RecNo(b:ID_TABELA) > 1)\ Exemplo completo: \If(Odd(RecNo(b:campo)))\ Pgina 9 de 45

RELATRIOS RTF

\RecNo(b:campo)\ - Registro impar(vermelho);


\Else\

\RecNo(b:campo)\ - Registro par (Azul);


\EndIf\ Imprimir: 1 - Registro impar (vermelho); 2 - Registro par (Azul); 3 - Registro impar (vermelho); 4 - Registro par (Azul); ... Note que a formatao aplicada sobre o campo \RecNo(b:campo)\ aplicada tambm sobre o valor do campo quando impresso.

OBS:

Na verdade, a formatao utilizada ser a da usada na barra invertida da esquerda. O resto pode ter qualquer formatao.

4.2.2 Funo CheckGroup


A funo CheckGroup utilizada para verificar se houve alterao no valor de um campo ao passar de um registro para outro. Ela Tem 3 parmetros: O campo a ser verificado, um nome de varivel para armazenar o valor do campo, um indicador se este o ltimo grupo a testar o campo. Caso o valor do campo passado mudou, a funo CheckGroup retorna verdadeiro. Esta funo utilizada junto com a funo If, a fim de criar agrupamentos de informao, como por exemplo, um relatrio onde temos o aluno e as disciplinas. Como as informaes referentes ao aluno so as mesmas para todas as disciplinas, fica visualmente mais agradvel, colocar esses dados em uma espcie de cabealho com a lista de disciplinas logo abaixo, como no exemplo: MATR 1000 1000 1000 NOME Joo Carlos Joo Carlos Joo Carlos COD DISC. 101 102 103 DISCIPLINA Matemtica Portugus Histria

Relatrio sem agrupamento

Matr: 1000 Nome: Joo Carlos COD DISC. DISCIPLINA 101 Matemtica 102 Portugus 103 Histria
Relatrio com agrupamento

A forma de realizar um agrupamento visto em tpico abaixo.

Pgina 10 de 45

RELATRIOS RTF

4.2.3 Funes com variveis


Outro tipo de funo trabalha com variveis para resolver problemas como totais de campos. Por exemplo, se eu tenho uma coluna numrica e queira que no final do relatrio seja impresso uma soma dos valores desse campo, deve-se proceder da seguinte maneira: \Scan(b)\ Valor a ser somado: \b:valor\ - Somatrio: \SOMA\ \EndScan,SUM(b:valor, SOMA); Fim Soma geral: \SOMA\ Pode resultar em: Valor a ser somado: 5 - Somatrio: 0 Valor a ser somado: 2 - Somatrio: 5 Valor a ser somado: 0 - Somatrio: 7 Valor a ser somado: 10 - Somatrio: 7 Valor a ser somado: 5 - Somatrio: 17 Fim Soma geral: 22 Note que o valor de SOMA comea em zero e somente aps a funo \EndScan,SUM(b:valor, SOMA); ter sido executada, SOMA ter o 1 valor. O resultado pode ser visto quando SOMA impresso novamente no segundo registro. No final, foi impresso SOMA j com todos os valores. Como SOMA uma varivel criada pelo sistema RTF, deve ser chamada utilizando-se as barras \. OBS No necessrio criar as variveis. O prprio comando se encarrega de cri-las quando for necessrio.

Outras funes disponveis so: Funo SUM (Valor, varivel) CTN (Campo: Numrico, varivel) CTS (Campo: Texto, varivel) RESET (Varivel) VAR(Varivel) SET(Varivel, Valor) \Varivel\ Descrio Soma o contedo de Valor varivel; Conta o n de valores numricos diferentes de zero; Conta o n de valores no nulos (Strings vazias); Zera ou seta vazio para o valor da varivel. Cria uma nova varivel. Pode ser usada para manter uma informao qualquer; Atribui Valor varivel; Retorna o valor armazenado na varivel;

As funes SUM, CTN e CTS so usualmente utilizadas com a TAG \ENDSCAN\, no seguinte formato: Pgina 11 de 45

RELATRIOS RTF

\EndScan, SUM(CAMPO, VARIVEL)\ e a cada loop, o valor de VARIVEL, ser incrementado do valor de CAMPO. Mas como qualquer funo, podem ser chamadas em qualquer ponto do template. OBS As TAGs so insensveis case, ou seja, \ENDSCAN\ e \EndScan\ so a mesma coisa. O mesmo vale para campos, variveis e funes. Sempre que uma funo necessitar de uma varivel, passe um nome qualquer, como valor ou total, sem as aspas. Maisculo ou minsculo no faz diferena. Caso obtenha um texto vazio como resposta, verifique se est passando o mesmo nome de varivel para outras funes.

OBS

4.3 Bandas
Nos relatrios do QuickRepor, se utilizava de bandas para compor o layout do relatrio. As bandas compem as partes de uma folha dependendo de sua funo como cabealho, rodap, um grupo e outros. Ento ns tnhamos tipos de bandas. Assim, uma informao que deve constar como ttulo, deve ser colocada em uma banda de tipo TTULO, que aparece no cabealho da 1 folha, nomes de colunas podem ser colocadas em uma banda do tipo CABEALHO DE COLUNA, que aparecem no cabealho de todas as folhas e assim por diante. Agora ser demonstrado como criar esse tipo de informao em relatrios RTF, de forma a se ter cabealhos, ttulo, grupos e outros. Nos exemplos a seguir foi utilizado o Microsoft Word, mas pode-se usar qualquer outro editor de texto que suporte o formato .rtf.

4.3.1 Cabealho e rodap


Cabealhos e rodaps compem reas que so imprimem seu contedo no incio (cabealho) e ao fim (rodap) de toda pgina impressa. Para inserir/modificar um cabealho/rodap, clique em Exibir/Cabealho E rodap. Com isso ser visualizada a rea para inserir texto como abaixo:

Fig.1: O cabealho e seu menu de botes.

Pgina 12 de 45

RELATRIOS RTF Tambm ser apresentado um menu de botes com as funes mais comuns como data, hora, nmero de pgina e total de pginas assim como o boto de configurao do cabealho e rodap. Assim como o resto do documento, a seo de cabealho/rodap aceita qualquer texto, tabela ou grfico. Uma das principais configuraes a capacidade de termos cabealhos/rodaps diferenciados para pginas pares e mpares e/ou para a 1 pgina. Para isso, clique no boto Configurar pgina do menu de botes.

Fig.1: As configuraes do cabealho/rodap.

Pode-se inclusive configurar a posio do cabealho/rodap em relao pgina ou se ser aplicado a todo o documento ou apenas de um ponto em diante. Para alternar para o rodap e vice-versa, pode-se clicar na banda desejada ou usar os botes Alternar entre cabealho e rodap, Mostrar anterior e Mostrar prximo do menu de botes.

Pgina 13 de 45

RELATRIOS RTF

4.3.2 Ttulo
Um ttulo um texto que deve aparecer apenas na primeira pgina e antes de qualquer outro dado. Para inserir um ttulo, basta adicionar o seu contedo antes da TAG \Scan(b)\. Qualquer texto anterior TAG \SCAN()\, ser impresso fora do processamento dos registros da consulta e no ser repetido. Veja o exemplo a seguir: TTULO DE RELATRIO RTF \Scan(b)\ \b:codigo \ - \b: detalhe\ \Endscan\

4.3.3 Detalhes (ou banda do registro)


Uma banda detalhe tem a funo de mostrar uma linha dos dados que vo ser impressos. Detalhe para relatrios RTF, tudo quilo que se encontra entre as TAGs \SCAN()\ e \ENDSCAN\. Quando executado o relatrio, o programa segue a seguinte ordem: Imprime o texto que se situa antes da TAG \SCAN(b)\, e em seguida, imprime o texto contido entre da TAG \SCAN(b)\ e \ENDSCAN\ preenchendo as funes de campo com os dados do primeiro registro. Aps, volta para o ponto onde se encontra \SCAN()\ e repete o processo com os dados do segundo registro e assim por diante. Finalmente aps o ltimo registro, impresso o texto que se situa aps a TAG \ENDSCAN\. Os detalhes so algo como o exemplo abaixo: TABELA ESTRUTURADA \Scan(b)\ \b:COD_TABELA\ - \b:ITEM_TABELA\ - \b:DESCRICAO\ \EndScan\ FIM com resultados como: TABELA ESTRUTURADA 6009 - 0 - Situaes do Candidato na Escola 6009 - 1 - Aprovado 6009 - 2 - Reprovado 6009 - 3 Tranferido FIM No exemplo acima, o relatrio comea com um ttulo TABELA ESTRUTURADA e ento comea a inserir os trs campos de cada registro em cada linha. Note que na forma acima, a linha se acomoda conforme o tamanho dos valores que devem ser impressos. Nesse caso, se o texto for muito grande, pode inclusive saltar para uma nova linha. Para tentar previnir isso, pode-se utilizar uma tabela da seguinte forma: TABELA ESTRUTURADA Pgina 14 de 45

RELATRIOS RTF Cdigo \Scan(b)\ \b:COD_TABELA\ \EndScan\ Item Descrio

\b:ITEM_TABELA\ \b:DESCRICAO\

No exemplo acima, foi includo um cabealho para as colunas. No entanto, note que este ser impresso somente na primeira pgina. Outro detalhe que embora o texto de um campo possa pular para a prxima linha, ele no ir alm do espao estipulado a ele. O relatrio ficar como a seguir: Cdigo 6009 6009 6009 6009 TABELA ESTRUTURADA Item 0 1 2 3 Descrio Situaes do Candidato na Escola Aprovado Reprovado Tranferido

Caso se deseje, a tabela pode ser configurada para cortar o texto que ultrapassar sua largura, de forma a no utilizar mais de uma linha. Lembrando que a formatao da tabela e fonte pode ser feitos j no modelo, de forma que a linha entre as colunas pode ser configurada para ser invisvel, por exemplo. E claro que se pode ter o seguinte estilo para cada registro: Atestamos, a pedido do (a) interessado (a) que o (a) aluno (a) \b:NOME_ALUNO\, matrcula n. \b:MATR_ALUNO\, do curso de \b:CURSO_ALUNO\ (\b:doc_reconhecimento\), est regularmente matriculado (a) no \b:PERIODO\ letivo de \b:ANO\. resulta em: Atestamos, a pedido do (a) interessado (a) que o (a) aluno (a) Sabrina Borba Dalcin, matrcula n. 2010666, do curso de Engenharia Eltrica, est regularmente matriculado (a) no 1 Semestre letivo de 2000.

4.3.4 Grupos
Normalmente quando se tem uma srie de informaes em uma tabela, queremos agrupar em relao a uma das colunas. Esse agrupamento cria uma banda que aparece toda vez que muda o seu valor e deve ser mostrado antes dos dados relacionados com esse valor novo como na figura abaixo: Tabela: 6009 Item Descrio 0 Situaes do Candidato na Escola 1 Aprovado 2 Reprovado 3 Tranferido Pgina 15 de 45

RELATRIOS RTF

4.3.4.1 Grupos Simples


Para criar agrupamentos de dados utilize a seguinte estrutura: \Scan(Tabela)\ ... \If(CheckGroup(CAMPO, VARIAVEL, INICIALIZA))\ ...Cabealho... \EndIf\ ...Detalhes... ... \EndScan\ Como no exemplo abaixo: TABELA ESTRUTURADA \Scan(b)\ \If(CheckGroup(b:COD_TABELA,GroupTabela,True))\ TABELA: \b:COD_TABELA\ Item Descrio \EndIf\ \b:IT \b:DESCRICAO\ EM_ TAB ELA\ \EndScan\ e resulta: TABELA ESTRUTURADA Tabela: 608 Item Descrio 0 Perodos base do Sistema Acadmico 100 Annual. 101 1o. Semestre 102 2o. Semestre 103 Curso de Vero 104 Curso de Inverno 200 Semestral. 300 Trimestral. 301 1o. Trimestre 302 2o. Trimestre 303 3o. Trimestre Tabela: 6009 Item Descrio 0 Situaes do Candidato na Escola 1 Aprovado 2 Reprovado 3 Tranferido

Pgina 16 de 45

RELATRIOS RTF Como pode ver, na tabela estruturada usada como exemplo, quando item tabela zero, temos a descrio da tabela. Para este caso especfico, e para fins de exemplo, vamos fazer a descrio ficar junto com o agrupamento. Uma forma alternativa de contornar o problema para esta situao seria fazer algo do tipo: Ou escreve o cabealho ou escreve uma linha de item. Por exemplo: TABELA ESTRUTURADA \Scan(b)\ \If(IsEqual(b:ITEM_TABELA,0))\ TABELA: \b:COD_TABELA\ - \b:DESCRICAO\ Item Descrio \Else\ \b:IT \b:DESCRICAO\ EM_ TAB ELA\ \EndIf\ \EndScan\

4.3.4.2 Grupos com salto de pgina


Usualmente, necessrio que o relatrio salte para a prxima pgina a cada novo grupo. A soluo adicionar uma quebra de pgina ao agrupamento. No entanto, isso gera outros problemas. Caso coloquemos a quebra antes das linhas da descrio da tabela, como abaixo, \Scan(b)\ \If(CheckGroup(b:COD_TABELA,GroupTabela,True))\ .QUEBRA DE PGINA. TABELA: \b:COD_TABELA\ Item Descrio \EndIf\ teremos uma quebra antes de cada grupo, incluindo o primeiro, o que geraria uma primeira folha em branco. Caso se coloque a quebra aps as linhas da descrio, a cada novo grupo, saltar de pgina e somente ento teremos os detalhes. Ou seja, uma pgina com o cabealho do grupo e em outra, os detalhes. Tambm no podemos colocar a quebra fora do agrupamento ou saltar a cada novo registro. A soluo colocar a quebra dentro de uma funo If, com a seguinte condio: a de no ser o primeiro registro. Dessa forma, eliminando o problema da primeira situao descrita acima. Usa-se ento a seguinte estrutura: \Scan(b)\ \If(Checkgroup(b:CAMPO,Group,False))\ \If(RecNo(CAMPO) <> 1)\ .Quebra de Pgina \EndIf\\EndIf\

Pgina 17 de 45

RELATRIOS RTF Traduzindo, seria como dizer: Se mudou valor em CAMPO e NO o primeiro registro, ento pule de pgina. No nosso exemplo, ficaria assim: TABELA ESTRUTURADA \Scan(b)\ \If(Checkgroup(b:COD_TABELA,GroupCod,False))\ \If(RecNo(b:COD_TABELA) <> 1)\ .Quebra de Pgina \EndIf\ TABELA: \b:COD_TABELA\ - \b:DESCRICAO\ Item Descrio \EndIf\ \b:IT \b:DESCRICAO\ EM_ TAB ELA\ \EndScan\ OBS OBS Ensira uma linha em branco a ps inserir a linha de quebra. Seno a aplicao no reconhece a quebra. Para inserir uma quebra de pgina, v no menu Inserir\Quebra\Quebra de Pgina (Word). Evite quebrar e identar o cdigo do RTF. Se puder, coloque todo o cdigo corrido. Isso evita o aparecimento de espaos perdidos quando este for impresso. Caso esteja com esse problema. Tente localiza-lo utilizando a funo Mostar/Ocultar do word.

OBS

4.3.5 Rodap de agrupamento (Group Footer)


Um rodap de agrupamento uma banda cuja funo informaes aps o ltimo registro relacionado ao grupo, como por exemplo, o total de registros no grupo ou o somatrio dos valore de uma coluna. Informaes que devem aparecer no rodap de agrupamento devem ser escritas no mesmo local de uma quebra de pgina, antes do mesmo se houver, como o exemplo a seguir: TABELA ESTRUTURADA \Scan(b)\ \If(CheckGroup(b:COD_TABELA,GroupTabela,True))\ \If(Recno(b:COD_TABELA) <> 1))\ Fim do Grupo .Quebra de Pgina \EndIf\ TABELA: \b:COD_TABELA\ Pgina 18 de 45

RELATRIOS RTF Item Descrio \EndIf\ \b:IT \b:DESCRICAO\ EM_ TAB ELA\ \EndScan\ Fim do Grupo O resultado ago como a seguir: TABELA ESTRUTURADA TABELA: 608 - Perodos base do Sistema Acadmico Item Descrio 0 Perodos base do Sistema Acadmico 100 Anual. 101 1o. Semestre 102 2o. Semestre 103 Curso de Vero 104 Curso de Inverno 200 Semestral. 300 Trimestral. 301 1o. Trimestre 302 2o. Trimestre 303 3o. Trimestre Fim do grupo .Quebra de Pgina TABELA: 6009 - Situaes do Candidato na Escola Item Descrio 0 Situaes do Candidato na Escola 1 Aprovado 2 Reprovado 3 Tranferido Fim do grupo Note a incluso do rodap de grupo novamente aps a TAG \EndScan\. Isso necessrio, visto que o rodap de grupo adicionado junto quebra, s aparecer antes de cada novo grupo, e uma vez que atingimos o ltimo registro, no teremos um novo grupo e consequentemente, um novo rodap de grupo. para isso que serve este ltimo rodap de grupo.

4.3.5.1 Utilizando somatrios no rodap do agrupamento


Nos relatrios RTF existem funes prontas tanto para contar quantos itens h no agrupamento quanto somar o contedo de um campo. Alm disso, h dois tipos de somatrios, o do grupo e o geral. O somatrio de grupo deve aparecer ao fim de todos os agrupamentos e aps isso, deve ser reinicializado para que a prxima soma seja apenas do prximo grupo. O somatrio geral simplesmente no reinicializado e exibindo no final do relatrio. Pgina 19 de 45

RELATRIOS RTF

Para realizar o somatrio dos valores de um campo, utilize a funo SUM(Valor, VARIVEL). Sua funo adicionar um valor varivel passada para a funo. Essa varivel criada automaticamente e a cada novo registro, incrementada com contedo de Valor. Valor pode ser tanto uma constante, ou um campo de uma consulta. O local onde deve ser colocado a funo pode ser em qualquer parte do template ou ainda junto com o comando \EndScan\ como mostrado no item 3.1.3.2 Funes com variveis da seguinte forma: \Scan(b)\ ... \b:Total\ ... \EndScan, SUM(b:Total, VAR_TOTAL)\ ... O total : \VAR_TOTAL\ Isto faz a soma do campo Total e armazena em VAR_TOTAL. Quando se quiser reinicializar a varivel, usa-se a funo RESET passando a varivel que se quer reiniciar como mostrado no item 3.1.3.2 Funes com variveis. Sempre que uma funo necessitar de uma varivel, passe um nome qualquer, como valor ou total, sem as aspas. Maisculo ou minsculo no faz diferena. Caso obtenha um texto vazio como resposta, verifique se est passando o mesmo nome de varivel para as funes.

OBS

Podemos modificar o exemplo de forma a impleme ntar um total por grupo e um total geral de itens. Ele ficar como a seguir: TABELA ESTRUTURADA \Scan(b)\ \If(CheckGroup(b:COD_TABELA, GroupTabela,True))\ \If(Recno(b:COD_TABELA) <> 1))\ Total Grupo \b:COD_TABELA\: \TotalGrupo\\Reset(TotalGrupo)\ \Endif\ TABELA: \b:COD_TABELA\ Item Descrio \EndIf\ \b:IT \b:DESCRICAO\\Sum(1, TotalGeral)\ EM_ TAB ELA\ \EndScan, Ctn(b:COD_TABELA, TotalGrupo)\ Total Grupo \b:COD_TABELA\: \TotalGrupo\\Reset(TotalGrupo)\ Total Geral: \TotalGeral\ Pgina 20 de 45

RELATRIOS RTF Resultando em: TABELA ESTRUTURADA TABELA: 601 Item Descrio 0 Nvel de Cursos 1 Ensino Fundamental 2 Ensino Mdio 3 Graduao 4 Ps-Mdio 5 Sequencial 6 Ps-Graduao 7 Especial de Graduao Total Grupo 602: 8 TABELA: 602 Item Descrio 0 Tipo do curso 1 Curso Presencial 2 Habilitao 3 Opo 4 nfase 5 Curso Eventual 6 Especial de Graduao 7 Curso EAD 100 Escola Total Grupo 603: 9 Total Geral: 887 Note que o somatrio geral foi realizado diferente do somatrio por grupo, somente para demonstrar a funcionalidade. Para este caso, seria mais prtico colocar ambos junto a TAG \ENDSCAN\ como abaixo \EndScan, Ctn(b:COD_TABELA, TotalGrupo), Ctn(b:COD_TABELA, TotalGeral)\ Cuidado: Funes como CTN contam nmeros diferentes de zero. No exemplo acima, se tivesse passado b:ITEM_TABELA, ao invs de b:COD_TABELA, eu obteria resultados errados, visto que temos valor zero para o campo ITEM_TABELA. A funo CTS conta texto diferentes de vazio (string vazia). Algumas funes necessitam como parmetro um campo como b:COD_TABELA. Embora o valor deste no seja relevante para a funcionalidade da funo, como por exemplo, a funo RECNO(Campo), necessrio a passagem de um campo, pois este contm a informao de qual consulta a funo deve trabalhar (b:COD_TABELA). Portanto, qualquer coluna da consulta pode ser passada para a funo. Pgina 21 de 45

OBS

OBS

RELATRIOS RTF

Note que vrias funes podem ser aninhadas junto ao EndScan e que no caso acima, apenas uma das variveis foi reiniciada (\Reset(Total_items)\). O ponto para reiniciar a varivel pode ser aps o de visualizao, como abaixo: \If(CheckGroup(b:COD_TABELA, GroupTabela,True))\ \If(Recno(b:COD_TABELA) <> 1))\ Total Grupo \b:COD_TABELA\: \TotalGrupo\\Reset(TotalGrupo)\

4.3.5 Sumrio
Sumrios so bandas que aparecem no fim da ltima pgina do relatrio. Para um relatrio RTF, sumrio seria tudo o que for escrito aps a TAG \ENDSCAN\. A linha Total geral vista no exemplo acima um exemplo de sumrio do relatrio. Caso tente acessar campos de uma consulta aps a TAG \ENDSCAN\, obter os valores do ltimo registro da consulta.

4.4 Relatrio no-tabelares


Uma das limitaes do Quick Report a criao de relatrios cujo formato seja de um documento formatado, um formato no-tabelar. Por exemplo, um documento oficial como uma declarao de iseno ou diploma. Com os relatrios RTF, podemos facilmente criar algo como o exemplo abaixo:
\Scan(b)\ DEPARTAMENTO DE REGISTRO E CONTROLE ACADMICO DIVISO DE MATRCULAS ATESTADO DE MATRCULA COM SEMESTRE CURRICULAR ATESTAMOS, a pedido do interessado e para os fins que convierem que o(a) aluno(a) \b: NOME_PESSOA\ do curso de \b: NOME_UNIDADE\, matrcula n. \b: MATR_ALUNO\, est matriculado(a) neste \b: SEMESTRE\ letivo de \b: ANO\, em disciplinas correspondentes ao \b: PERIODO\ perodo da seqncia curricular do referido curso. Controle Acadmico da Universidade Federal de Santa Maria, 26 de maro de 2009. \EndScan\ para obter o seguinte resultado:

DEPARTAMENTO DE REGISTRO E CONTROLE ACADMICO

Pgina 22 de 45

RELATRIOS RTF
DIVISO DE MATRCULAS ATESTADO DE MATRCULA COM SEMESTRE CURRICULAR ATESTAMOS, a pedido do interessado e para os fins que convierem que o(a) aluno(a) Sabrina Borba Dalcin do curso de Cincias da Computao, matrcula n. 2010666, est matriculado(a) neste 2 Sem. letivo de 2007, em disciplinas correspondentes ao 1 perodo da seqncia curricular do referido curso. Controle Acadmico da Universidade Federal de Santa Maria, 26 de maro de 2009. E se o relatrio for para vrios alunos, seria necessrio acrescentar uma quebra de pgina para cada um dos alunos.

OBS

As TAGs \SCAN()\ e \ENDSCAN\ no necessariamente indicam um registro por folha do documento. Se o texto usar todo o espao de uma folha, o word automaticamente passa o restante para a seguinte. Caso deseje mostrar um contedo especfico para cada folha, acrescente uma quebra de pgina.

Pgina 23 de 45

RELATRIOS RTF

5. O cadastramento do Template
Aps a criao do template, este deve ser cadastrado no sistema para que fique disponvel para qualquer aplicao que venha a execut-la. Esse cadastramento do template feito atravs de aplicaes do SIE especficas para este fim (BibCArquivo.exe).

5.1 A aplicao de cadastro


Localize e execute a aplicao Cadastro de Arquivos. Deve ser mostrada uma tela como a seguir:

Fig.2: O Cadastro de Arquivos.

5.2 Cadastrando o arquivo


Siga os passos para cadastrar o template: 1 Clique em Novo; 2 Clique no cone com o clip ao lado de Nome do arquivo; 3 Na tela a seguir, localize o template nas pastas de sua mquina. Clique em OK; 4 Entre com uma descrio para o arquivo em Descrio; 5 Entre com um identificador em Identificador do arquivo; 6 Em Tipo de arquivo, selecione Lay-out de relatrios; 7 Clique em Salvar;

Pgina 24 de 45

RELATRIOS RTF

1 2 4 5 6

Fig.3: Cadastrando novo arquivo.

OBS

Note que o template deve ser fechado antes de ser cadastrado. Caso contrrio uma mensagem de erro mostrada.

Pgina 25 de 45

RELATRIOS RTF

6. O comando SQL
O SQL uma linguagem que permite criar, manipular e efetuar consultas em bancos de dados relacionais. O resultado de uma consulta utilizando SQL uma tabela contendo os dados do banco. Os relatrios em RTF utilizam o resultado de uma consulta SQL (os dados do banco) para montar o relatrio final da mesma forma que os relatrios construdos sobre o QuickReport.. Este manual no tem como objetivo a instruo de como criar a consulta, mas sim o seu uso na construo de relatrios RTF.

6.1 Projeo da consulta


Uma das coisas que interessa para o relatrio RTF saber o nome dos campos que formam o resultado da consulta, para que se possa construir o relatrio de forma correta. Esses campos so as projees da consulta e esto situados logo aps o termo SELECT de uma consulta. Assim, para a seguinte consulta: SELECT A.COD_TABELA, A.ITEM_TABELA, A.DESCRICAO AS SITUACAO FROM TAB_ESTRUTURADA A WHERE COD_TABELA = 618 as projees seriam COD_TABELA, ITEM_TABELA e SITUACAO. Estes so os nicos campos disponveis da consulta e, portanto so os nicos que podem ser usados no template que utilize esta consulta. A forma de utilizao dos campos no template, demonstrada no item 4.1

Campos.
A partir da consulta acima, podemos construir o seguinte template: A tabela \b:COD_TABELA\ tem os seguintes items: Item \Scan(b)\ \b:ITEM_TABELA\ \EndScan\ Descrio \b:SITUACAO\

OBS:

necessrio lembrar que deve ser usado apenas o nome do campo ou o rtulo do mesmo quando houver;

Pgina 26 de 45

RELATRIOS RTF

OBS:

A qualificao da tabela no comando SQL TAB_ESTRUTURADA A, no tem relao com a letra usada no template antes do nome do campo \b:COD_TABELA\, pois a segunda se refere ao resultado da consulta inteira, sendo a para a consulta dos dados da instituio e b consulta principal.

6.2 Parmetros da consulta


Existem dois tipos de parmetros de uma consulta: parmetro de valor nico e parmetro de mltiplos valores. Tambm existem consultas que no necessitam de parmetros. Para utilizar parmetros de valor nico deve-se usar dois pontos :, seguindo do nome do parmetro. Para parmetros de valores mltiplos usa-se dois-pontos seguindo do smbolo sharp (#) mais o nome do parmetro. Os nomes dos parmetros no podem ser palavras chaves (palavras reservadas para comandos de um SQL como FROM ou WHERE), conter smbolos (como ,, / ou @) ou espaos. O ponto principal que se deve prestar ateno em consultas para relatrios RTF que uma vez que a aplicao que executar o relatrio est pronta, ela estar preparada a tratar somente alguns nomes de parmetros especficos e de tipos especficos. Dessa forma, qualquer relatrio novo adicionado a esta aplicao, deve-se ter o cuidado de utilizar consultas cujos parmetros sejam os suportados pela aplicao. Por conveno a aplicao estar preparada para a falta de um ou outro parmetro, de forma que se pode cadastrar um relatrio cuja consulta no tenha parmetros. Tenha certeza que a aplicao suporta relatrios com menos parmetros que ela est preparada para tratar

OBS

No existe, no entanto, restrio para o uso desse parmetro na consulta. Por exemplo: vamos dizer que uma aplicao trata os parmetros NOME, MATRICULA e IDADE sendo os dois primeiros do tipo CHAR e IDADE do tipo INTEIRO, e ela precisa executar um relatrio cuja consulta precisa do parmetro COD_CIDADE, tambm inteiro como abaixo: SELECT * FROM CIDADE WHERE COD_CIDADE = :COD_CIDADE Nada nos impede de alterar o parmetro da consulta para :IDADE e usar o local do parmetro Idade da aplicao, para passar um cdigo de cidade vlido para o parmetro COD_CIDADE. A nica coisa que a aplicao entenderia que existe um parmetro IDADE e este do tipo inteiro. Pgina 27 de 45

RELATRIOS RTF

OBS

Ao cadastrar um relatrio em uma aplicao, tenha certeza dos parmetros que a aplicao atualmente trata, ou esta no ser capaz de executar o relatrio.

Pgina 28 de 45

RELATRIOS RTF

6.3 Cadastrando a consulta


Aps a criao do SQL de consulta, deve ser feito o cadastramento da consulta mediante a aplicao Cadastro de tabelas. Dessa forma, ela estar disponvel para a execuo de relatrio. Siga os seguintes passos para cadastrar a consulta: 1 Localize e execute a aplicao Cadastro de tabelas; 2 Clique em Novo; 3 Entre com um nome para a consulta em Nome da Tabela; 4 Entre com uma descrio para a tabela em Descrio da Tabela; 5 Em Tipo, selecione Consulta; 6 Em Estruturada, clique em No; 7 Entre com o SQL em Texto da Consulta; 8 Clique em Salvar.

3 4 6 5

7 8

Fig.4: Cadastro da consulta.

Pgina 29 de 45

RELATRIOS RTF

7. Relacionamento
O relacionamento a etapa onde se definem quais so os relatrios executados pela aplicao, e que consulta ser utilizada para cada um. Cada relatrio ter apenas uma consulta. Para relatrios que necessitem de mais de uma consulta, necessrio que seja criado uma aplicao especfica. Caso a aplicao esteja preparada para tal, possvel cadastrar vrios relatrios para ela. A forma mais usual que a aplicao tenha uma lista de relatrios que estejam relacionados a si. Tambm possvel cadastrar diferentes templates usando a mesma consulta ou um template ser cadastrado vrias vezes com diferentes consultas.

7.1 Relacionando o relatrio;


Para criar um relacionamento, siga os seguintes passos: 1 Localize e execute a aplicao Relacionamento de aplicao com relatrios RTF; 2 Localize a aplicao que ir executar o relatrio. Clique em Selecionar; 3 Clique em Novo; 4 Entre com o ttulo do relatrio em Ttulo do Relatrio; 5 Em Arquivo, localize o template cadastrado anteriormente.; 6 Selecione o tipo de abertura desejada em Tipo Abertura; 7 - Localize a consulta cadastrada anteriormente em Consulta; 8 Clique em Salvar.

4 5 6 7

8
Fig.5: Vinculando o relatrio aplicao.

Pgina 30 de 45

RELATRIOS RTF

8. A aplicao executora
Os relatrios RTF necessitam de uma aplicao que os executem. Essa aplicao criada especialmente para essa tarefa e relacionada com o(s) relatrio(s) como demonstrado no item 7 Relacionamento. No entanto, o relacionamento somente ser necessrio quando a aplicao servir para executar vrios relatrios. Quando temos um relatrio apenas, o relacionamento pode ser omitido e feito diretamente no cdigo da aplicao.

8.1 Aplicao de relatrio nico


Neste exemplo, assumiremos que esteja familiarizado com DELPHI e que os pacotes necessrios estejam devidamente instalados. A consulta a ser utilizada no exemplo a seguinte SELECT COD_TABELA, ITEM_TABELA, DESCRICAO FROM TAB_ESTRUTURADA WHERE COD_TABELA BETWEEN 600 AND 700 ORDER BY COD_TABELA, ITEM_TABELA e ser previamente cadastrada no sistema atravs do cadastro de tabelas com o nome de QrTesteTabEstrut. O relatrio utilizado para o exemplo ser o desenvolvido no tpico 4.3.5.1 Utilizando somatrios no rodap do agrupamento e cadastrado no sistema com o nome de Teste_Rel_Tab_estrut Com isso pronto, podemos comear; Crie uma nova aplicao e salve-a. Insira os seguintes componentes no formulrio: - TBsRtf - TBsUDFList - TCliArquivo - TCliCatalogoTabela - TCliParInstituicao - TEkRTF O componente TCliArquivo, far o trabalho de trazer o template cadastrado no sistema para que seja executado e TCliCatalogoTabela far o mesmo com a consulta do relatrio. TCliParInstituicao ser usado para trazer os dados da instituio, sendo por padro a primeira tabela do relatrio. TEkRTF o componente principal, pois realiza a montagem do relatrio. TBsUDFList contm a lista de funes que podem ser chamadas do RTF. Tambm pode-se criar outras personalizadas. E finalmente TBsRtf o componente que gerencia o processo, permitindo que a criao de relatrios seja mais rpida, prtica e fcil. Pgina 31 de 45

RELATRIOS RTF

OBS

De fato, o nico componente que precisaramos seria o TEkRTF. Ele encapsula toda a funcionalidade necessria para executar um relatrio RTF. No entanto, para poder integrar ao sistema, mais fcil usar os seis em conjunto.

Configure as seguintes propriedades dos componentes conforme abaixo: BsRtf1 BsUDFList CliArquivo CliCatalogoTabela CliParInstituicao EkRTF1 BsUDFList BsUDFList1 CliArquivo1 CliCatalogoTabela1 CliParInstituicao1 BsUDFList1

D um clique de direita no componente BsRtf1 e selecione a opo Localizar Tabela. Localize a consulta cadastrada.

Fig.:Localizando a tabela.

Pgina 32 de 45

RELATRIOS RTF

Fig.:Localizando a tabela.

D novamente um clique de direita no componente BsRtf1 e selecione a opo Localizar Arquivo. Localize arquivo cadastrado pela descrio Teste_Rel_Tab_estrut.

Fig.:Localizando o template.

D um terceiro clique de direita no componente BsRtf1 e selecione a opo Gerar relatrio. Isso criar um preview do relatrio caso no haja erros.

Fig.: Gerando relatrio.

Pgina 33 de 45

RELATRIOS RTF

Fig.: Relatrio executado

Ensira no formulrio um Tbutton e no evento OnClick, adicione o seguinte cdigo:

procedure TForm1.Button1Click(Sender: TObject); begin BsRtf1.ExecuteOpen; end;


Fig.: Cdigo do boto.

Compile e execute a aplicao.

8.2 Adicionando parmetro de valor nico


Modifique o SQL e adicione um parmetro com nome CODIGO, conforme abaixo: SELECT COD_TABELA, ITEM_TABELA, DESCRICAO FROM TAB_ESTRUTURADA WHERE COD_TABELA = :CODIGO ORDER BY COD_TABELA, ITEM_TABELA Pgina 34 de 45

RELATRIOS RTF e atualize-o no cadastro de tabelas. Ensira um componente Tedit no formulrio e mude a sua propriedade TEXT para vazio. Altere o cdigo do boto para

procedure TForm1.Button1Click(Sender: TObject); begin with BsRtf1 do begin Params.ParamByName(CODIGO).AsInteger:= StrToInt(Edit1.Text); ExecuteOpen; end;
end;
Fig.: Cdigo alterado.

No componente Bsrtf1, localize novamente a consulta pelo mtodo demonstrado acima ou entre novamente com o valor na propriedade NOMETABELA do componente. Isso far com que ele detecte o parmetro inserido. Abra a propriedade PARAMS do componente Bsrtf1 como na figura abaixo:

Fig.: Parmetro da consulta.

Note o aparecimento do parmetro inserido no SQL, na janela que aparece. Clique no parmetro e o Object Inspector ir mostrar as suas propriedades. Assumindo que o parmetro inserido na consulta seja do tipo integer, mude o valor da propriedade DATATYPE do parmetro para FTINTEGER, e adicione um valor de teste em VALUE. Pgina 35 de 45

RELATRIOS RTF Feche a janela do parmetro e execute a aplicao que deve estar como na figura abaixo. Se quiser dar um preview no relatrio, s seguir o procedimento anterior. Note que passado o valor informado na propriedade VALUE para o parmetro.

Fig.: Aplicao com parmetro nico.

8.3 Adicionando parmetro de mltiplos valores


Caso o SQL requer um parmetro do tipo IN (mltiplos valores), a aplicao deve ser criada levando em conta diversos detalhes importantes. Altere o SQL do exemplo anterior para ficar conforme abaixo: SELECT COD_TABELA, ITEM_TABELA, DESCRICAO FROM TAB_ESTRUTURADA WHERE COD_TABELA IN :#CODIGO ORDER BY COD_TABELA, ITEM_TABELA E recadastre-o no cadastro de tabelas. Adicione mais dois Tbutton ao formulrio e mude seus nomes para BtnAdd e BtnLimpa e adicione o seguinte cdigo ao evento OnClick de cada um deles:

procedure TForm1.BtnAddClick(Sender: TObject); begin with BsRtf1 do begin


Pgina 36 de 45

RELATRIOS RTF

Params.ParamByName(#CODIGO).AddValueIn(Edit1.Text); Edit1.Text:= ; Edit1.Setfocus; ExecuteOpen; end; end;


e ao segundo boto, adicione o seguinte cdigo:

procedure TForm1.BtnLimpaClick(Sender: TObject); begin BsRtf1.Params.ParamByName(#CODIGO').ClearValuesIn; end;


No Button que executa o relatrio, modifique para:

procedure TForm1.BtnExecutaClick(Sender: TObject); begin BsRtf1.ExecuteOpen; end;


O formulrio deve estar como a seguir:

Fig.: Aplicao com insero de valores mltiplos para parmetro.

O boto adicionar usa o mtodo AddValuesIN para adicionar novos valores para o parmetro. Pode-se inclusive colocar valores com vrgula como: 6009, 618, 800 ou uma consulta inteira como: SELECT CODIGO FROM TABELA WHERE CODIGO BETWEEN 100 AND 200 Pgina 37 de 45

RELATRIOS RTF

J o boto Limpar, apaga toda os valores inseridos no parmetro utilizando ClearValuesIN. OBS O nome do parmetro IN deve obrigatoriamente conter o smbolo # como primeira letra.

8.4 Aplicao com suporte a mltiplos relatrios


Para que se aproveite uma aplicao que executar relatrio ao mximo, ela deve poder executar mltiplos relatrios e, que estes possam ser adicionados futuramente. O tpico a seguir exemplifica como criar uma aplicao onde a adio de novos relatrios ocorre ao se cadastrar novos relatrios no sistema. Para criar este tipo de aplicao, se faz uso da aplicao Vincula relatrios RTF nas aplicaes (AMAplicRelRTF.exe) e do componente TCliAplicRelRTF. Para este exemplo, utilizaremos a consulta abaixo SELECT COD_TABELA, ITEM_TABELA, DESCRICAO FROM TAB_ESTRUTURADA WHERE COD_TABELA BETWEEN :COD_TABELAMIN AND :COD_TABELAMAX ORDER BY COD_TABELA, ITEM_TABELA e a recadastraremos utilizando o cadastro de tabelas com o nome RelTabEstrut. Tambm usaremos o template criado nos tpicos acima e cadastrado com o nome Teste_Rel_Tab_estrut. Crie uma nova aplicao do SIE e adicione um TBsContainer, dois Tbutton, e dois TEdit. Monte o leiaute abaixo

Fig.: Leiaute da aplicao Pgina 38 de 45

RELATRIOS RTF

Selecione o TBsContainer e sete as propriedades conforme abaixo: BsContainer1 BsClientData.BsClient CliAplicRelRtf1 BsClientData.FieldName ID_ARQUIVO BsClientData.BsControlType bsLookupCombo e no controle LookUpCombo do container, atribua as propriedades TBsContainer1 BsClientData.ListClient BsClientData.ListSource BsClientData.KeyFieldName BsClientData.ListFieldName CliAplicRelRTF1 dsGetRelatoriosRTFAplicacao ID_APLIC_REL_RTF DESCRICAO

No evento FormShow da aplicao, escreva o seguinte cdigo


procedure TfrmACRelatorioRTF.FormShow(Sender: TObject); begin inherited; CliAplicRelRTF1.GetRelatoriosRTFAplicacao(IdAplicacao); end;

E para o evento OnClick do boto Get Rel. escreva o cdigo


procedure TfrmACRelatorioRTF.btnGetRelClick(Sender: TObject); begin inherited; BsRtf1.IdCatalogoTabela:= CliAplicRelRTF1.CliDsGetRecords.FieldByName('ID_TABELA').AsInteger; BsRtf1.IdArquivo:= CliAplicRelRTF1.CliDsGetRecords.FieldByName('ID_ARQUIVO').AsInteger; end;

Com o boto Set valor, atribuiremos o contedo dos Tedits para os parmetros do relatrio selecionado no combo box. Digite ento para o evento OnClick do boto o seguinte cdigo:

00 01 02 03 04 05 06 07 08

procedure TForm1.btnSetValorClick(Sender: TObject); begin with BsRtf1 do begin if Assigned(Params.FindParam('COD_TABELAMIN')) then begin Params.ParamByName('COD_TABELAMIN').DataType:= ftInteger; Params.ParamByName('COD_TABELAMIN').AsString:= EdtCodMin.Text; end;

Pgina 39 de 45

RELATRIOS RTF
09 10 11 12 13 14 15 if Assigned(Params.FindParam('COD_TABELAMAX')) then begin Params.ParamByName('COD_TABELAMAX').DataType:= ftInteger; Params.ParamByName('COD_TABELAMAX').AsString:= EdtCodMax.Text; end; end; end;

e no boto executar, execute o relatrio com

procedure TForm1.btnExecuteClick(Sender: TObject); begin BsRtf1.ExecuteOpen; end;

A aplicao tem o seguinte funcionamento: Primeiro chamado o mtodo GetRelatriosRTFAplicao ao inciar a aplicao, passando o IdAplicao. Isso preenche o combo com todos os relatrios rtf cadastrados na aplicao de relacionamento para esta aplicao. Aps escolher o relatrio da lista, ns setamos o relatrio selecionado com o cdigo do bto GetRel, e ento setamos os valores para os parmetros com o cdigo do boto Set Valor. Neste cdigo, verificamos a existncia destes com o teste da linha 04 e 09. Se existe, setamos o tipo de parmetro (linhas 06 e 11), que sabemos ser do tipo inteiro. Por fim setamos o valor do parmetro (linhas 07 e 12). Os tipos DataType esto declarados na unit DB. Declare-a no Uses da sua aplicao.

OBS

No ltimo boto executamos o relatrio. Para que os relatrios apaream na lista, estes devem ser cadastrados no sistema conforme descrito nos tpicos 5, 6 e 7. O funcionamento desta aplicao depende do idAplicao. Voc pode executar sua aplicao de dentro do Delphi para realizar o debug, trazendo os relatrios cadastrados para esta. Para isso, aps ter cadastrado a aplicao no sistema, v no menu CDESP EXPERT/Multitier Tools/Run Multi Alias, do Delphi, localize o usurio ADM e a sua aplicao cadastrada. Ao executar, ser passado o idaplicao correto para o mtodo.

OBS

Pgina 40 de 45

RELATRIOS RTF

9. Construindo um Exemplo
Iremos agora criar um exemplo completo para criao de um template. Os detalhes sero abordados mais a frente. Neste manual, usado para a construo de templates o editor WORD 2000. Os comandos dos menus do programa esto em itlico.

9.1 Construindo um Template


1. 2. 3. 4. 5. Execute o editor de texto Word 2000 Selecione Arquivo/Novo Selecione Arquivo/Salvar Como Entre com um nome para o documento Selecione o formato Rich Text (*.rtf) do documento no combo abaixo do nome 6. Clique em Salvar.

1 2 3
O

6 4 5
RTF deve ser um documento em branco:

Pgina 41 de 45

RELATRIOS RTF

Fig.2: RTF em branco.

Aps o documento ser salvo, iremos inserir algum texto e formata-lo. O seguinte exemplo ira demonstrar os benefcios da formatao de um relatrio em RTF. Insira o seguinte texto no template: TABELA ESTRUTURADA \Scan(b)\ \If(Checkgroup(b:COD_TABELA,GroupCod,False))\ \IF(IsEqual(RecNo(b:COD_TABELA),1))\\Else\ Fim do grupo Total de items: \Total_items\\Reset(Total_items)\ Quebra de Pgina.. \EndIf\\EndIf\ \If(Checkgroup(b:COD_TABELA,GroupCod,True))\ TABELA: \b:COD_TABELA\ - \b:DESCRICAO\ Item Descrio \EndIf\ \b:ITEM_TABELA\ \b:DESCRICAO\ \EndScan, ctn(b:ITEM_TABELA, Total_items), ctn(b:ITEM_TABELA, Total_Geral)\ Fim do grupo Total de items: \Total_items\\Reset(Total_items)\ Total Geral de Items: \Total_Geral\ FIM DO RELATRIO
Fig.3: Texto includo no RTF.

As primeiras linhas so texto puro. Observe as barras ( \ )onde ocorre o cdigo para a insero de dados do banco, como \Scan(b)\ e \b:COD_TABELA\. As linhas Pgina 42 de 45

RELATRIOS RTF inferiores so duas tabelas com duas colunas cada. Aps escrever o texto das primeiras linhas use Tabela/Inserir/Tabela para colocar os quadros. So duas tabelas separadas. Na tela a seguir, ajuste o Nmero de Colunas para 2 e selecione a opo AutoAjuste Janela. Clique em OK.

Fig.4: Inserindo tabela no template.

Em seguida escreva o os textos correspondentes dentro de cada clula da tabela. \b:DESCRICAO\ foi formatado com fonte 16, negrito e centralizado. \b:COD_TABELA\ est com fonte normal e inserido normalmente no meio da sentena. O RTF deve estar como a seguir:

Pgina 43 de 45

RELATRIOS RTF

Fig.5: Exemplo com textos e tabelas.

A Quebra de Pgina se obtm atravs do menu /Inserir/Quebra e escolhendo a opo Quebra de Pgina. Salve o documento e feche.

9.2 O COMANDO SQL


O comando SQL utilizado pelo exemplo o seguinte: SELECT A.COD_TABELA, A.ITEM_TABELA, A.DESCRICAO FROM TAB_ESTRUTURADA A WHERE A.COD_TABELA IN :#COD_TABELA ORDER BY 1,2

9.3 CADASTRO DO ARQUIVO


Abra a aplicao Cadastro de Arquivos (BibCArquivo.exe). Crie novo e entre com os seguintes valores para os campos: Campo Valor Pgina 44 de 45

RELATRIOS RTF Nome do arquivo Descrio do Arquivo Identificador do Arquivo Tipo de Arquivo Salve o cadastro. Tmpl_TesteTabEstrut Template para teste da tab_estruturada TmplTesteRTF Lay-Out de Relatrio

9.4 Cadastro da tabela


Abra a aplicao Cadastro de Tabelas (AMCTabela.exe). Crie novo e entre com os seguintes valores para os campos: Campo Nome da tabela Descrio da tabela Descrio no plural Tipo Estruturada Texto da Consulta Valor QrTesteTabEstrut Tabela teste da tab_estruturada Tabela teste da tab_estruturada Consulta No
SELECT COD_TABELA, ITEM_TABELA, DESCRICAO FROM TAB_ESTRUTURADA WHERE COD_TABELA IN :#COD_TABELA ORDER BY 1,2

Salve o cadastro.

9.5 Aplicao Executora


A aplicao que ir executar este relatrio ser a criada no item 9 - A aplicao executora, no entanto, o procedimento para cadastro da mesma no sistema no de interesse deste curso. Portanto, vamos assumir para este exemplo, que a aplicao j est em funcionamento no sistema.

9.6 Relacionando
O exemplo utilizado no faz uso do relacionamento pos a aplicao tem o arquivo e a tabela configurada diretamente em seu cdigo.

9.7 Execuo
Aps o cadastro da aplicao, tabela e arquivo, o relatrio est pronto para ser executado.

Pgina 45 de 45