Divisão de dados
Vamos dar uma olhada em um aspecto peculiar deste relatório: há muito espaço em branco na parte inferior das páginas. Por que? Quando um relatório é criado, o mecanismo do FastReport preenche o espaço em branco da página com as bandas. Após exibir cada banda, a posição atual é movida para baixo. Quando FastReport percebe que ná há espaço livre suficiente para exibir a próxima banda (sua altura é maior que o espaço livre da página), ele cria uma nova página e continua com a exibição da banda neste ponto. Esta sequência é repetida para cada registro no conjunto de dados.
Nosso relatório contém um objeto com texto longo, e é por isso que a altura da banda é bastante grande. Além disso, se uma banda grande não possuir espaço suficiente em uma página, ela é deslocada para a próxima, deixando muito espaço em branco na parte inferior da página, como é mostrado aqui:
Para limitar o desperdício de papel, vamos usar um recurso do FastReport que transforma o conteúdo de uma banda em parágrafos. Tudo que precisamos fazer é habilitar a propriedade "AlllowSplit" da banda "Dados de 1o. Nível". Você verá que agora há menos espaço vazio na parte inferior das páginas do relatório:
Como funciona essa divisão de bandas? Há alguns objetos no FastReport que suportam este recurso. Eles são os objetos "Texto", "Linha" e "RichEdit". Eles podem ser "divididos", e outros objetos não podem. Quando FastReport precisa dividir uma banda, ele o faz da seguinte maneira:
exibe os objetos não divisíveis que cabem no espaço vazio
exibe os objetos divisíveis parcialmente (objetos "Texto" são exibidos de uma forma que todas as linhas cabem no objeto)
cria uma nova página e continua com a exibição do objeto na banda
se um objeto não divisível não possuir espaço no espaço vazio, ele é deslocado para a próxima página; ao mesmo tempo todos os objetos localizados abaixo dele são deslocados conforme necessário
o processo continua até que todos os objetos da banda seja exibidos por completo.
O algoritmo de divisão se tornará mais claro ao olhar para este exemplo:
Deve ser observado que o algoritmo de divisão não é perfeito, e que a saída final pode não ser igual ao esperado. Esta opção deve ser usada com muito cuidado em casos onde objetos na banda dividida são agrupados de maneira complexa ou o tamanho das fontes difere. Segue um exemplo do que pode ser gerado.