
Formatar e exibir relatórios no dispositivo corrente.
REPORT [NOME=<nome> |
<relatorio>
ENDREPORT ]
NOME = <nome> determina que a definição do relatório encontra-se em um arquivo em disco de nome igual a <nome>.
<relatorio> representa um bloco de instruções de definição de relatório.
ENDREPORT determina o fim da definição de um relatório.
Para formatar e imprimir relatórios utilizando uma meta-linguagem de definição de relatórios. Esta linguagem é composta de diversos elementos que serão explicados a seguir:
Instrução de cabeçalho: Utilizada para imprimir o cabeçalho no topo de cada página. Podem ser utilizadas até 9 níveis de cabeçalho. Tem a seguinte Sintaxe
C[<nivel>],<mens>,<col>[,ESPACO A|D [<num1>]]
Instrução de detalhe: Utilizada para imprimir mensagens no relatório. Podem ser utilizadas até 19 níveis de detalhe. Tem a seguinte Sintaxe
D[<nivel>],<mens>,<col>[,ESPACO A|D [<num1>]]
[,PULO A|D[,E Z|<num2>]
Instrução de grupo: Utilizada para imprimir mensagens sempre que ocorrer uma quebra de grupo. Podem ser definidos até 19 níveis de quebra de grupo. Tem a seguinte Sintaxe
G[<nivel>],<mens>,<col>[,ESPACO A|D [<num1>]]
[,PULO A|D[,E Z|<num2>]
Instrução de totalização: Utilizada para imprimir mensagens após as quebras de grupo. Podem ser utilizadas até 9 níveis de totalização.
Para cada nível, pode ser associada uma instrução de totalização, bastando para isso utilizar o mesmo número de nível. Este tipo de instrução também é utilizada para exibir estatísticas das quebras ou de todo o relatório. Tem a seguinte Sintaxe
T[F|<nivel>],<mens>,<col>[,ESPACO A|D [<col>]]]
[,PULO A|D[,E Z|<num2>]
[,SOMA|MEDIA|FREQUENCIA]
Instrução de edição: Utilizada para mascarar a saída das mensagens impressas nas instruções de detalhe, grupo ou totalização. Podem ser usadas até de 0 a 9 instruções de edição. Tem a seguinte Sintaxe
E[<nivel>],<mascara>
Instrução de ordenação: Utilizada para ordenar a exibição do relatório. Podem ser definidos de 0 a 9 níveis de ordenação. A ordenação da exibição é feita segundo o seguinte critério: o nível de maior valor e o item majoritário para ordenação, por isso é a chave principal da ordenação, os itens de níveis menores são itens de quebra da ordenação. Tem a seguinte Sintaxe
O[<nivel>,<item>[,A|D]
Instrução de função : Utilizada para invocar funções do usuário em um relatório. Podem ser definidos 10 níveis de funções que devem retornar valor numérico ou caractere. Argumentos passados para funções em um procedimento REPORT, devem, obrigatoriamente, ser itens de arquivos. Caso contrário ocorrerá erro de execução.
Para executar a função declarada basta se referir ao seu identificador em uma das instruções de impressão descritas anteriormente. Funções numéricas retornam um número de 21 algarismos, preenchido de zeros a direita, bastando que seja usada uma instrução de edição.
15!<nivel>,<nome>(<argumentos>),[C|N]
Onde :
<nivel> Representa o nível da instrução, e utilizado para relacionar as instruções.
<mens> Representa a informação que será exibida.
Pode ser:
Uma cadeia de caracteres.
Uma das palavras chaves PAGINA, DATA ou HORA, indicando respectivamente: contador automático de páginas, a data e a hora do sistema.
Um item do banco de dados.
<col> Representa o número da coluna para impressão da mensagem. Superposições de colunas, podem causar resultados não esperados.
<nome> Representa o nome da função do usuário.
<argumentos> Representa a lista de argumentos passados para a função.
C | N Representa o tipo da função do usuário. Caso se omita será assumido o tipo C (caractere).
ESPACO A|D Determina o número de linhas que serão saltadas antes ou depois da impressão. As cláusulas A e D, indicam, respectivamente, antes e depois. <num1> determina o número de linhas saltadas. Caso se omita, somente uma linha é saltada.
PULO A|D Determina um salto para a próxima página antes ou depois da impressão da mensagem. As cláusulas A e D indicam respectivamente antes e depois.
E Z<num2> Determina a máscara de edição para a mensagem. A cláusula Z determina que serão suprimidos os zeros a esquerda de valores numéricos. <num2> corresponde ao nível da instrução de edição. Somente uma instrução de edição pode ser usada para cada instrução detalhe.
SOMA Determina que será impresso o somatório dos valores do item de quebra.
MEDIA Determina que será impressa a média aritmética do item de quebra.
FREQUENCIA Determina que será impressa a quantidade de valores dos itens impressos a cada quebra.
Para as opções SOMA,MEDIA e FREQUENCIA, o valor acumulado é zerado após a impressão. Se uma instrução de totalização for especificada com a opção F, esta será impressa após a última linha detalhe do relatório.
O comando REPORT só imprime registros previamente selecionados pelo comando QUERY.
As inconsistências deste comando só são verificadas em tempo de execução, por isso recomenda-se utilizar um arquivo contendo o procedimento REPORT, para que não seja necessário recompilar o programa a cada alteração do relatório.
O exemplo a seguir mostra-nos como utilizar este comando para imprimir um relatório na impressora padrão.
PROG
DATABASE bdemp 33 a 2
USE tab_nfis
INPUT "Codigo do cliente " TO cod_cli
SET PRINT ON
QUERY cli_nfis = cod_cli
REPORT
C1,"Relatorio de notas fiscais",1
C2,"PAGINA =",1
C2,PAGINA,10
O1,tot_nfis
D1,"Cod. Nota =",1
D1,id0_nfis,13
D2,"Cliente =",1
D2,nom_clie,11
D3,"Total da nota =",1
D3,tot_nfis,17
TF,"QUANTIDADE DE NOTAS =",1,PULO A
TF,tot_nfis,23,SOMA
T1,HORA,50
ENDREPORT
SET PRINT OFF
O exemplo a seguir mostra-nos a impressão do mesmo relatório do exemplo anterior, a única diferença é que neste exemplo a definição do relatório encontra-se no arquivo relator.r.
PROG
DATABASE bdemp1 33 a 2
USE tab_nfis
INPUT "Codigo do cliente " TO cod_cli
SET PRINT ON
QUERY cli_nfis = cod_cli
REPORT NOME = "relator.r"
SET PRINT OFF
O exemplo a seguir mostra-nos como utilizar funções do usuário em um procedimento
PROG
func destaca(c),tamnom(n)
DATABASE exemplo 1 A 2
USE DEPE
QUERY mat_fun > 100 .and. nom_depe $= "JOAO"
REPORT
C1,"RELATORIO 01"
!1,destaca(nom_depe),C
!2,tamnom(nom_depe),N
D1,!1
D2,"Tamanho do nome = ",02
D2,!2,20
ENDREPORT
QUIT
FUNC destaca
* Coloca nome em reverso no vídeo
parameters nom(c)
return(rev() + nom + normal())
FUNC tamnom
* Retorna o tamanho do nome
parameters nom(c)
return(len(nom))
QUERY.
