Agrupamentos, gráficos e subrelatórios
Agrupar por um campo com cabeçalho e rodapé próprios, somar com agregados, desenhar gráficos no papel e embeber um relatório dentro de outro.
Uma banda de detalhe sozinha só sabe imprimir uma linha por registo. O que transforma uma listagem num documento são três peças: os agrupamentos, que partem a lista em blocos com título e total; os gráficos, que resumem o que a lista diz; e os subrelatórios, que trazem para dentro do documento um conjunto de dados completamente diferente.
Continuamos no relatório Oportunidades por conta da app Gestão de Clientes.
Agrupamentos
Um agrupamento parte a lista sempre que o valor de um campo muda. Cada nível traz duas bandas próprias: um cabeçalho, que sai quando o valor muda, e um rodapé, que sai quando o valor acaba.
É isto que faz o documento "cada conta, com as oportunidades dela por baixo e o total no fim".
Criar um agrupamento
- Na coluna da esquerda, clica no + da secção Agrupamentos.
- Selecciona a banda Cabeçalho: … que apareceu na superfície de desenho.
- No painel da direita, na secção Agrupamento, escolhe o Campo.

| Propriedade | O que faz |
|---|---|
| Campo | "Campo do conjunto principal cujo valor define o grupo. As linhas são ordenadas por ele." Aceita caminhos com ponto para navegar relações: conta.nome. |
| Ordem | Crescente ou Decrescente. |
| Repetir cabeçalho | "Quando o grupo passa para a página seguinte, o cabeçalho dele sai outra vez no topo." |
| Página nova por grupo | "Cada grupo começa numa página só dele." É o que se liga para imprimir uma factura por folha. |
As bandas de grupo aparecem na superfície de desenho encaixadas à volta do detalhe, com uma indentação que mostra a que nível pertencem. Podes ter quantos níveis quiseres — por ano, depois por cliente, depois por factura.
Dica
Um campo dentro de um cabeçalho de grupo lê a primeira linha do grupo. É isso que faz o nome da conta aparecer por cima das oportunidades dela. Fora das bandas de grupo (no cabeçalho do relatório, por exemplo) não há linha nenhuma e o campo sai vazio.
Totais com o Agregado
O elemento Agregado é uma conta feita pelo motor: Soma, Média, Contagem, Mínimo ou Máximo sobre um campo de um conjunto.
Onde o pões decide o que ele conta:
| Onde está | O que soma |
|---|---|
| No rodapé de um grupo | Só as linhas daquele grupo — o total daquela conta. |
| No rodapé do relatório | Todas as linhas — o total geral. |
| Na banda de detalhe, sobre um conjunto ligado | Só as linhas daquela linha — o total daquela factura. |
Na Contagem, o campo pode ficar vazio: conta linhas, não valores.
Gráficos
Um gráfico no papel usa o mesmo motor e as mesmas opções do widget de gráfico dos ecrãs. No PDF é desenhado no servidor e entra em vector, não como imagem — um gráfico rasterizado ficaria borrado ao imprimir ou ao ampliar.

Arrasta Gráfico da paleta para uma banda e configura-o:
| Propriedade | Notas |
|---|---|
| Tipo de gráfico | Barras, Linha, Área, Tarte / Donut, Dispersão, Radar, Funil, Gauge (medidor) ou Mapa de calor. |
| Conjunto de dados | De onde vêm as linhas. Vazio usa o conjunto principal. |
| Campo de categoria (eixo X / fatias) | "Campo que define o eixo horizontal (ou as fatias)." |
| Campos de valor | "Campos numéricos a desenhar. Sem campo de série, cada um é uma série." Acrescentam-se em Acrescentar valor. |
| Campo de série (agrupamento) | "Campo que separa as séries. Com ele, pivota-se pelo primeiro campo de valor." |
| Legenda e Posição da legenda | Topo, Fundo, Esquerda ou Direita. |
| Valores nos pontos | Escreve o número em cima de cada barra ou ponto. |
Conforme o tipo, aparecem ainda Empilhado, Linhas suaves, Horizontal e Raio interior do donut (%).
No exemplo, o gráfico do Rodapé do relatório tem categoria fase e valor
valor: uma barra por fase do pipeline, com a soma dos negócios de cada uma.
Nota
Um gráfico numa banda de grupo desenha os dados daquele grupo — um gráfico por conta. Numa banda de detalhe desenharia um gráfico por linha impressa, o que quase nunca é o que se quer.
Subrelatórios
Um subrelatório é outro relatório desenhado dentro deste. Serve para o que o agrupamento não faz: o agrupamento parte um conjunto; o subrelatório traz outro inteiro.
O caso clássico: numa conta-corrente, as facturas em aberto e os pagamentos — duas listas de tabelas diferentes na mesma folha. No nosso exemplo, o cabeçalho de cada conta traz a lista de contactos dela, antes das oportunidades.

Desenhar o filho
O relatório embebido é um relatório normal, com vida própria — abre-se, desenha-se e pré-visualiza-se como qualquer outro. A diferença é que declara parâmetros para receber o contexto de quem o embebe.

No exemplo, Contactos da conta tem um parâmetro conta (Número,
obrigatório) e o conjunto de dados dele filtra conta_id por esse parâmetro.
As bandas que não interessam num documento embebido — cabeçalho de página,
rodapés — ficam desligadas.
Embeber
- Arrasta Subrelatório da paleta para um cabeçalho, um rodapé ou uma banda de grupo.
- Em Escolhe o relatório, escolhe o filho.
- Para cada parâmetro dele, diz de onde vem: Campo da linha (lê o campo da linha onde o subrelatório está) ou Valor fixo.
Atenção
Um subrelatório não pode estar na banda de detalhe, e isso é impedido, não avisado: "faria uma consulta por cada linha impressa" — mil facturas, mil idas à base. Põe-no num cabeçalho, num rodapé ou numa banda de grupo, onde as ocorrências são poucas.
Repetições com os mesmos parâmetros partilham a leitura, por isso um subrelatório no cabeçalho de grupo custa uma consulta por grupo, não por linha.
Códigos de barras e imagens
Dois elementos que completam um documento de negócio:
Código de barras — o valor pode vir de um campo (o normal numa factura) ou ser fixo:
| Campo | Notas |
|---|---|
| Tipo | Code 128 aceita texto e números. EAN-13 são 12 ou 13 dígitos e verifica o dígito de controlo. QR aceita qualquer texto — é o das facturas. |
| Campo | "Campo com o valor a codificar. Vazio usa o valor fixo abaixo." |
| Valor fixo | Usado só quando não há campo escolhido. |
| Mostrar o valor | Imprime o valor por baixo das barras (não se aplica ao QR). |
Imagem — a Origem escolhe de onde vem:
| Origem | O que se preenche |
|---|---|
| Ficheiro da app | Um ficheiro carregado na app (por exemplo icons/logo.svg). |
| Endereço | Um URL. |
| Campo dos dados | "Campo com a imagem: URL, caminho no assets, ou o binário em base64." |
O Ajuste decide o que acontece quando a imagem não tem a forma da caixa: Caber, Preencher ou Esticar.
Perguntas frequentes
O grupo não agrupa nada — sai tudo seguido. O campo do agrupamento tem de ser do conjunto principal, e as linhas são ordenadas por ele. Se o campo estiver vazio em muitas linhas, elas caem todas no mesmo grupo.
O total do grupo está a somar tudo. O agregado está fora da banda do grupo. Põe-no no rodapé desse grupo — é a posição que define o âmbito da conta.
O gráfico sai em branco no PDF mas vê-se no desenho. Na superfície de desenho, um gráfico sem dados mostra uma amostra de exemplo. No PDF só há o que os dados derem: confirma o Conjunto de dados, o Campo de categoria e que há pelo menos um Campo de valor escolhido.
Posso pôr um subrelatório dentro de outro subrelatório? Sim, com a mesma regra: nunca na banda de detalhe. Mas pensa duas vezes — dois níveis de embebimento tornam o documento difícil de prever, e muitas vezes o que se queria era mais um nível de agrupamento.
