Ir para o conteúdo principal

Relatório - Alterando visível de campos via calculo

Neste conteúdo iremos abordar o assunto da aba Cálculo no Report Builder.  Criamos uma condição que caso o SQL da pipe retorne um valor em especifico, irá mostrar um campo no relatório, caso for diferente, irá mostrar um outro campo.

Criando relatório e o SQL:

No modulo de Inteligência selecione a opção de Relatórios: 

image-1638212248581.png

Logo após clique em Novo [F2] para criar um novo relatório: 

image-1638212345392.png

image-1638212318223.png

Caso tiver um template já pronto você poderá informar no campo Template. Em seguida clique em Criar

Logo após, o sistema irá abrir o Report Builder. Na aba Dados vamos criar o SQL que retornará os dados que desejamos usar para aplicar a condição de mostrar ou não um campo dependendo do seu valor retornado do SQL.

Clicando em Dados > Logo após clique em Arquivo > Novo

image-1638213822792.png

Depois selecione a opção de Construtor de Consultas

image-1638213852556.png

Assim irá abrir o construtor, vá na aba de Código SQL conforme a imagem abaixo :

image-1638213878963.png

Assim que abrir a Pipe para informar o comando SQL clique com o botão direito e clique em Editar SQL  e logo após confirme o popup de autorização da edição.

image-1638213967362.png

image-1638213985830.png

Logo após de um nome  a Pipe e insira o seguinte código SQL :
Nome da Pipe: DADOS

SELECT versaodb FROM VERSAOD

image-1638214027467.png

Clique em Ok para salvar o código.

Criando campos

Neste topíco iremos criar apenas dois campos para alterar sua propriedade de visível ou não, clicando na Aba Desenho > Clique no icone de Texto (" A ") > Clique no espaço do relatório aonde deseja que apareça os campos.

image-1638214163616.png

Agora vamos tirar a propriedade do campo para que ele mostre somente quando nos retornamos o valor do SQL, Selecionando o campo de texto criado, no menu Appearance desmarque a opção de Visible, faça isso para os dois campos: 

image-1638214240686.png

Lógica aplicada: 

O retorno do SQL que desenvolvemos irá retorna a versão do banco de dados do sistema, atualmente estamos na versão 570, logo isso, irá mostrar o campo "Se for igual a 570", caso não seja 570 o retorno irá mostrar o campo "Se for diferente de 570" 

Configurando Evento: 

Na aba de Calculo -> Clique com o botão direito e selecione a opção Evento -> Expanda a aba Detail e clique em um dos Label's criados anteriormente -> Selecione o Evento de OnPrint: 

image-1638214508765.png

image-1638214606652.png

*** o Evento OnPrint é executado assim que o relatório é mostrado em tela.

Após selecionar o evento clique no espaço abaixo para o Report Builder trazer a sintaxe padrão, neste campo será aonde iremos aplicar toda a condição para mostrar ou não os campos.

Condição usada:
 if (DADOS['VERSAODB'] = '570') then
      begin
          Label1.Visible := True
      end
      else
      begin
         Label2.Visible := True
      end;

Usando dados da pipe para aplicar a na condição: No menu que se encontra no canto inferior direito, Selecione a opção Dados -> Clique na Pipe que foi criada ("DADOS") -> Arraste o campo que irá retorna para a condição

image-1638214810984.png

Alterando a propriedade do campo para visible: Selecione a aba Objetos > Clique no Label a qual deseja alterar a propriedade e logo após arraste a opção que deseja alterar para o editor.

image-1638214898128.png

*** Atribuímos True para que apareça o campo assim que mostrar o relatório. Aplicando todas essas configurações basta ir na aba desenho e salvar o relatório.

Demonstrando o Relatório:

**** Durante a demonstração é alterado a informação do banco para que o relatório imprima caia nas duas condições que criamos.

image-1638215010837.png

 

Condição simplificada:
 Label1.Visible := (DADOS['VERSAODB'] = '570') ;
 Label2.Visible := not (DADOS['VERSAODB'] = '570') ;

Não precisaria do If aplicando a condição como já foi citado, neste caso ele irá ver se o valor que retornou do SQL é o 570 então será True e para o segundo Label ele verificaria se caso o de cima fosse False então ele negaria essa condição passando a ser True, mostrando o segundo campo. Uma forma mais simples de aplica a mesma condição.