O ajuste automático é a tentativa do TReport para realizar a impressão de células em um determinado relatório de forma a fazer com que todos os conteúdos fiquem visíveis.
Portanto, quando utilizadas posições fixas, um relatório que teria informações não sendo exibidas por extrapolar a largura da página de impressão, o recurso de ajuste automático é executado.
Algumas vezes o recurso causa efeitos colaterais nos relatórios, como a visualização do conteúdo de uma célula sobre o conteúdo de outra célula (valores de células diferentes sobrepostos) ou como a troca do modo de impressão da seção para um formato com colunas (três colunas com o par rótulo: conteúdo para todas as células). Para evitar esses efeitos colaterais é sugerido reduzir o número de células sendo impressas na seção.
O auto ajuste das células só funciona para os casos de impressão no formato padrão, a impressão no formato padrão é quando o rótulo da célula está no topo e os conteúdos estão alinhados verticalmente.
O outro formato de impressão é chamado de colunado/valores em linha, pois são criados espaços verticais que possam abrigar os valores extensos das células e cada célula é impressa como rótulo: conteúdo.
A seguir um exemplo da impressão de seção no formato padrão, onde as células estão organizadas em colunas sequenciais.
A necessidade de aplicação do auto ajuste é identificada de duas maneiras:
Em qualquer situação dos casos mencionados, todas as células da seção serão auto ajustadas, portanto se somente uma célula receber a definição para auto ajuste, todas as demais células daquela mesma seção sofrerão o auto ajuste quando o limite do espaço de impressão disponível for superado.
A execução do auto ajuste é uma transformação dos tamanhos fixos das células para uma proporção do espaço disponível, ou seja, uma célula com tamanho 30 em uma seção com tamanho 4000 e com espaço disponível de impressão de somente 2530, essa célula terá um novo tamanho proporcional calculado assim (30 / 4000) * 2530 = ~19. Originalmente essa célula que tinha tamanho fixo de 30, passa a ter o tamanho de aproximadamente 19 durante a impressão.
A seguir é demonstrado uma situação de impressão com valores simplificados para demonstrar os passos que envolvem a definição do tamanho do espaço de impressão disponível, o espaço disponível para a impressão da seção e os tamanhos para as células nas seções.
A seguir são exibidos rótulos x tamanho para explicar o auto ajuste posteriormente largura da folha na impressão = 200 margem esquerda = 10 margem direita = 0 // célula = tamanho fixo célula 1 = 30 célula 2 = 35 célula 3 = 15 célula 4 = 70 célula 5 = 20 célula 6 = 25 célula 7 = 10 total ocupado pela seção = 205 Na impressão sem auto ajuste a posição de início da impressão é: - célula 1 => posição início 10 - célula 2 => posição início 40 - célula 3 => posição início 75 - célula 4 => posição início 90 - célula 5 => posição início 160 - célula 6 => posição início 180 - célula 7 => posição início 205 Termina na posição 215 está certo pois é o resultado do total da seção (205) + margem esquerda (10).
Acima acontece a demonstração de um relatório quando a impressão não tem nenhuma marcação para ajuste automático, a seguir a tabela de cálculos quando é identificada a necessidade de aplicação de auto ajuste.
tamanho da seção | espaço disponível para a seção | margem esq. | largura página | ||||
205 | 190 | 10 | 200 | nova posição início (inicial + tamanho) | |||
tamanho | percentual | novo tamanho (percentual * 190) | 10 | ||||
célula 1 | 30 | 14,63% | 27,80 | 37,80 | |||
célula 2 | 35 | 17,07% | 32,43 | 70,24 | |||
célula 3 | 15 | 7,32% | 13,90 | 84,14 | |||
célula 4 | 20 | 9,76% | 18,53 | 102,68 | |||
célula 5 | 70 | 34,15% | 64,87 | 167,56 | |||
célula 6 | 25 | 12,20% | 23,17 | 190,73 | |||
célula 7 | 10 | 4,88% | 9,26 | 200 |
Os passos acima envolvem descobrir o percentual que a célula ocupa no total da seção e então aplicar este percentual para calcular o tamanho que a célula deve ocupar no espaço disponível para impressão da seção.
Passo 1: tamanho da célula / tamanho da seção = percentual da célula
Passo 2: percentual da célula * espaço disponível para a seção = tamanho proporcional da célula
Passo 3: calcular as novas posições de início para impressão das células.
Estes passos são executados para todas as células da seção em que foi identificada a necessidade de auto ajuste.
Pode ser realizado através do método SetAutoSize nas classes TRSection (usada na construção de seções) ou TRCell (usada na construção de células).
A opção AUTO SIZE nos comandos DEFINE SECTION e DEFINE CELL também pode ser usada para habilitar o ajuste automático.
O padrão desta propriedade é falso, portanto o padrão não é aplicar ajuste automático no tamanho das células.
É possível também realizar a personalização de leiautes de relatórios e definir nessa personalização as propriedades de auto ajuste tanto na seção quanto nas células.
A seguir imagem para a definição da propriedade na seção:
A seguir imagem da definição na célula:
A aplicação automática de auto ajuste acontece quando o espaço disponível para a impressão da seção é menor que o espaço total que a seção precisa ocupar.
Por padrão o sistema irá tentar fazer com que todas as células apareçam no espaço disponível e portanto uma seção que não couber no espaço disponível terá o auto ajuste aplicado independentemente de qualquer marcação para auto ajuste nas células ou seção.
Isso só pode ser avaliado no momento da impressão e portanto não há como avisar ao usuário com antecedência, pois depende das configurações de margem, células, bordas e principalmente o tamanho da folha de papel escolhida para impressão.
Essa aplicação automática do ajuste pode causar um dos cenários mencionados de efeito colateral (veja a imagem no tópico de exemplos a seguir nessa página).
Esse é outro efeito colateral quando aplicado auto ajuste em uma seção.
Essa troca no formato de impressão acontece pois alguma célula ficou com tamanho percentual menor que 1%, com isso é entendido que na impressão padrão esta célula não ficaria visível e em função disso o formato da impressão é trocado do padrão para colunado/dados em linha.
Um exemplo desse efeito colateral pode ser observado no tópico de exemplos a seguir.
Este modo de impressão é o mesmo quando usado na seção o método TRSection:ForceLineStyle().
Exemplo a seguir mostra um trecho de relatório sem efeitos colaterais, com os tamanhos e quantidades corretas de células.
Exemplo a seguir mostra o conteúdo das células truncado, por existir muitas células para a impressão na seção e assim fica impossível não sobrepor o conteúdo de impressão dessas células.
Exemplo a seguir pode ocorrer no caso de uma das células tenha o valor proporcional menor que 1%.