## Relatórios Gráficos utilizando Múltiplos Blocos

##### Objetivo

Demonstrar a técnica utilizada para criar Relatórios Gráficos utilizando os recursos para Múltiplos Blocos.

O recurso de Múltiplos Blocos refere-se à possibilidade de criar layout’s do tipo Formulário que listem paralelamente duas ou mais informações múltiplas (filhas) de uma informação principal (pai).

Exemplo:
Formulário de Clientes onde no mesmo formulário são listados os Pedidos do Cliente (5 por página) e as Notas Fiscais do Cliente (5 por página). Nesse caso, a impressão dos Pedidos e das Notas Fiscais está relacionada apenas com o Cliente (não tem uma relação entre si).

Nota:
A denominação “Múltiplos Blocos” refere-se à codificação gerada no processo de Geração do Relatório. Nesse caso, cada bloco possuirá uma estrutura de repetição em separado no arquivo “.P” gerado, permitindo assim a leitura em paralelo das informações.

### Criação de um Relatório Gráfico com Múltiplos Blocos.

Passo 1 – Incluir um novo Relatório Gráfico e selecionar o mesmo para edição. Para maiores informações, consultar a Função Manutenção de Relatórios (GR0103), a qual permite cadastrar novos relatórios e manutenir os já existentes.

Passo 2 – Selecionar as tabelas a serem utilizadas pelo relatório (através da Função Tabelas do Relatório (GR0104), a qual permite definir as tabelas que farão parte do layout do relatório gráfico). Verificar que no item das tabelas “Utilizadas”, estará registrado as seguintes informações (através da barra de rolagem do browse), conforme a tabela abaixo:

TABELA | TABELA RELAC | BLOCOS
Customer |  | 1
Order | Customer | 2
Invoice | Customer | 3
SalesRep | Customer | 1

Nesse exemplo, foi utilizado o banco de dados Sports do Progress. É importante verificar que as tabelas “Order”, “Invoice” e “SalesRep” estão relacionadas a “Customer”. Para efetuar essa relação, é necessário selecionar a tabela “Customer” inicialmente e depois então adicionar a tabela em questão.

Importante:
Após seleção de cada tabela, permanecem exibidas na lista de tabelas disponíveis somente aquelas que possuem relacionamento com as tabelas utilizadas. A manutenção de relacionamentos entre tabelas é feita por intermédio da Função Manutenção de Relacionamentos.

Depois de selecionadas, todas as tabelas possuem valor inicial para o bloco 1. É necessário então definir qual tabela será lida em qual dos blocos de código gerado. Nesse caso, o Cliente (Customer) e as informações do Representante (SalesRep) ficarão na codificação principal. Os Pedidos do Cliente (Order) e as Notas Fiscais do Cliente (Invoice) serão blocos de código em separado, permitindo a leitura paralela das informações.

Com o objetivo de facilitar a compreensão, segue abaixo o código que será gerado após o processo de Geração no exemplo descrito acima:

for each Customer no-lock,

each Salesrep no-lock

where Salesrep.Sales-Rep = Customer.Sales-Rep

break by Customer.Cust-Num descending:

...

open query qry-bloco-2 for

each Order no-lock

where Order.Cust-Num = Customer.Cust-Num

by Order.Order-num.

get first qry-bloco-2.

open query qry-bloco-3 for

each Invoice no-lock

where Invoice.Cust-Num = Customer.Cust-Num

by Invoice.Invoice-Num.

get first qry-bloco-3.

repeat while avail(Order)or avail(Invoice):

repeat v-cont-registro = 1 to 5:

if not avail(Order) then leave.

...

get next qry-bloco-2.

end.

repeat v-cont-registro = 1 to 5:

if not avail(Invoice) then leave.

...

get next qry-bloco-3.

end.

if avail(Order)or avail(Invoice) then do:

...

end.

end.

...

end.

Passo 3 – Se necessário, é possível configurar a Seleção do Relatório através da Função Seleções do Relatório (GR0110). O Data Viewer 3.00 efetuará a filtragem automaticamente das informações considerando a qual bloco a tabela do campo selecionado pelo usuário pertence.

Passo 4 – Se necessário, é possível configurar os Parâmetros do Relatório através da Função Parâmetros do Relatório (GR0111). Durante a inclusão dos Parâmetros, é demonstrado visualmente a qual bloco ficará alocado cada linha de parâmetro criada.

Passo 5 – Criar um novo layout através da Função Manutenção de Layout (GR0150), a qual permite selecionar um layout já cadastrado para manutenção ou a inclusão de um novo layout para o relatório gráfico.

Passo 6 – Definir as configurações do layout (maiores detalhes encontram-se em Propriedades do Layout). Nessa etapa é importante definir o tipo de layout como “Formulário” (apenas Formulários podem utilizar a função de Múltiplos Blocos). Além disso é necessário definir uma classificação para cada Bloco criado. Para o Bloco 1, é necessário definir ainda uma classificação com quebra de página. A tabela a seguir apresenta as classificações criadas para o exemplo em questão:

BLOCO | CLASSIFICAÇÃO | QUEBRA DE PÁGINA
1 | Customer.cust-num | Sim
2 | Order.order-num | Não
3 | Invoice.Invoice-num | Não

Passo 7 – Definir o layout do relatório por intermédio da seleção de elementos (tabelas e grupos inicialmente), edição de propriedades e formatação. A seguir é apresentado um exemplo do layout criado:

Passo 7.1 – Na área superior e inferior foram definidos respectivamente à parte de cabeçalho e rodapé do layout, arrastando os objetos “Texto” e “Constantes” para as áreas delimitadas pela margem (maiores informações estão disponíveis em Definição do Cabeçalho e Rodapé do Layout).

Passo 7.2 – Logo abaixo do cabeçalho foram criados 3 “grupos” de informações referentes aos dados do Cliente (Customer) e do Representante (SalesRep), utilizando retângulos, textos e campos dentro de cada grupo (maiores informações estão disponíveis em Aplicação de Grupo no Layout Relatórios Gráficos).

Importante:
Para cada um dos grupos utilizados, foi utilizada a classificação que possui a Quebra de Página, ou seja, “Customer.cust-num” (maiores informações estão disponíveis em Propriedades do Grupo).

Passo 7.3 – Na impressão dos Pedidos do Cliente (tabela a esquerda) foi adicionada uma tabela com duas linhas de cabeçalho (uma para o título geral e outra para os rótulos de cada campo) e uma linha de dados para armazenar os campos Pedido, Data Pedido, Data Embarque e Total (maiores informações estão disponíveis em Aplicação de Tabelas no Layout Relatórios Gráficos).

Importante:
Para essa tabela foi utilizada a classificação “Order.order-num” e foi definida que a mesma será composta de 5 linhas de registros (Qtde Registros = 5 - maiores informações estão disponíveis em Propriedades da Tabela).

Passo 7.4 – Na impressão das Notas Fiscais do Cliente (tabela a direita) foi adicionada uma tabela com duas linhas de cabeçalho (uma para o título geral e outra para os rótulos de cada campo) e uma linha de dados para armazenar os campos Nota Fiscal, Data NF, Pedido, Total NF e Total Pago (maiores informações estão disponíveis em Aplicação de Tabelas no Layout Relatórios Gráficos.

Importante:
Para essa tabela foi utilizada a classificação “Invoice.Invoice-num” e foi definida que a mesma será composta de 5 linhas de registros (Qtde Registros = 5 - maiores informações estão disponíveis em Propriedades da Tabela).

Passo 7.5 – Na parte de Total do Cliente (tabela no canto inferior a esquerda) foi adicionada uma tabela de cálculo com uma linha de cabeçalho e três linhas para uso de cálculos (maiores informações estão disponíveis em Aplicação de Tabelas no Layout Relatórios Gráficos).

Importante:
Para essa tabela foi utilizada a classificação “Customer.cust-num” visto que as totalizações/cálculos são por Cliente (maiores informações estão disponíveis em Propriedades da Tabela).

Passo 7.6 – Na parte de Totais de Pedido do Cliente (grupo no canto inferior a esquerda) foi adicionado um grupo contendo textos e totais (maiores informações estão disponíveis em Aplicação de Grupo no Layout Relatórios Gráficos).

Importante:
Para esse grupo foi utilizado a classificação “Customer.cust-num” visto que as totalizações são por Cliente (maiores informações estão disponíveis em Propriedades do Grupo).

Passo 8 – Acionar o botão Salvar, para salvar o layout a ser utilizado na geração de relatórios gráficos (maiores informações estão disponíveis em Salvar Layout) e sair do Editor de Layouts através da opção Arquivo, Sair, para retornar ao menu principal do Data Viewer.

Passo 9 – No menu principal do Data Viewer, acionar a opção Geração, Fonte, a qual permite a geração do programa fonte do relatório, interface e lógica, e a compilação para posterior execução.

Passo 10 – No menu principal do Data Viewer, acionar o botão Executar (maiores informações estão disponíveis em Função Executar).

| Topo |