IREPORT - Como unificar um Fields e uma unica linha, porem em várias colunas

4 respostas
ireportjasper
M

Olá Pessoal!

Preciso gerar um relatório pelo Ireport, onde existe várias disciplinas e suas seguintes notas em 4º Bimestres diferentes. Consegui gerar o relatório, porem o mesmo printa da seguinte forma:

| Disciplina | 1º | 2º | 3º | 4º |

| Biologia | S | | | |
| Biologia | | A | | |
| Biologia | | | A | |
| Biologia | | | | B |

Gostaria que o mesmo retornasse as notas em uma unica linha para cada disciplina, como segue abaixo:

| Disciplina | 1º | 2º | 3º | 4º |

| Biologia | S | A | A | B |
| História | A | A | C | A |
| Química | B | S | A | A |
| Biologia | B | A | C | B |

Alguém poderia me ajudar, por favor?

4 Respostas

D

Vocẽ vai pegar um textField e, ao invés de deixar a expressão do mesmo apenas a padrão

$F{nota1}

Você vai concatenar todas as que quer:

$F{nota1}  |  $F{nota2}  |  $F{nota3}  |  $F{nota4}

E não vai incluir os demais textfields no detail

M

Olá Darlan!
Tentei aqui, mas não tive sucesso. Continua da mesma forma, mas acredito que estou usando uma Variables que criei de maneira errada. Para cada $F{período} existe uma $F{nota_conceito}, portando criei uma variável $V{nota_primeiro_bimestre} desta forma:

IF($F{período}.contains(“1”),$F{nota_conceito},CLEAN(" "))

Criei uma variável para os 4 bimestre só alterando o contains de (“1”) para (“2”), (“3”) em diante e coloquei todas elas em um único textField desta forma:

$F{Disciplina}+$V{nota_primeiro_bimestre}+$V{nota_Segundo_bimestre}+$V{nota_Terceiro_bimestre}+$V{nota_Quarto_bimestre}

Cose seja aqui o problema, como devo realizar o IF de maneira correta?

Desde já agradeço.

D

Sem código, sem possibilidade de saber.
Porém, eu prefiro a abordagem de obter os dados pelo java e enviar via jrbeancollectiondatasource.
O bean, no caso, teria o nome da disciplina e as notas de cada bimestre.

public class Rendimento {
    private String disciplina;
    private Float primeiroBimestre;
    private Float segundoBimestre;
    private Float terceiroBimestre;
    private Float quartoBimestre;
}

Aí sim, você faz o textfield como sugeri

M

Desculpe a minha dificuldade, segue abaixo o código gerado pelo próprio Jaspersoft Studio:

field name="notaConceito_sigla" class="java.lang.String"/>
field name="Periodo_Bimestre" class="java.lang.String"/>

variable name="nota_primeiro_bimestre" class="java.lang.String">
variableExpression>![CDATA[IF($F{Periodo_Bimestre}.contains("1"),$F{notaConceito_sigla},CLEAN(" "))]]>/variableExpression>
	/variable>
	variable name="nota_Segundo_bimestre" class="java.lang.String">
		variableExpression>![CDATA[IF($F{Periodo_Bimestre}.contains("2"),$F{notaConceito_sigla},CLEAN(" "))]]>/variableExpression>
	/variable>
	variable name="nota_Terceiro_bimestre" class="java.lang.String">
		variableExpression>![CDATA[IF($F{Periodo_Bimestre}.contains("3"),$F{notaConceito_sigla},CLEAN(" "))]]>/variableExpression>
	/variable>
	variable name="nota_Quarto_bimestre" class="java.lang.String">
		variableExpression>![CDATA[IF($F{Periodo_Bimestre}.contains("4"),$F{notaConceito_sigla},CLEAN(" "))]]>/variableExpression>
	/variable>
Criado 16 de outubro de 2019
Ultima resposta 17 de out. de 2019
Respostas 4
Participantes 2