Fórum imprimir corretamente com Report Builder, quem pode ajudar? #426915

23/10/2012

0

Pessoal,

Não consigo fazer funcionar corretamente o código abaixo, trata-se de um boletim escolar, na parte superior do boletin que está relacionado com os dados dos alunos está tudo bem, mas na parte de baixo do mesmo, ou seja, no local onde são inseridas as disciplinas. Exemplo: na turma estão cadastrados 10 alunos e gostaria de imprimir os 10 boletins em um só click, mas quando rodo o sistema ele cria 170 páginas e os nomes das disciplinas se repetem várias vezes, então ao retirar o código (só para testar) que está relacionado com as disciplinas o qual está na IBQryNotas, o sistema gera corretamente as 10 páginas com seus respectivos alunos, mas claro sem as disciplinas.

A IBQryNotas está assim:

select n1.bimestre as bimestre_1,
n1.faltas as faltas_1,
n2.faltas as faltas_2,
n3.faltas as faltas_3,
n4.faltas as faltas_4,

n1.nota as nota_1,
n2.nota as nota_2,
n3.nota as nota_3,
n4.nota as nota_4,
n5.nota as nota_recuperacao_1,
n6.nota as nota_recuperacao_2,
n7.nota as nota_recuperacao_3,

n1.codigo_turma_notas as codigo_turma_1,

d1.nome_disciplina as nome_disciplina_1,

d1.carga_horaria_1bim as carga_horaria_1bim,
d1.carga_horaria_2bim as carga_horaria_2bim,
d1.carga_horaria_3bim as carga_horaria_3bim,
d1.carga_horaria_4bim as carga_horaria_4bim,
d1.aulas_dadas_1bim as aulas_dadas_1bim,
d1.aulas_dadas_2bim as aulas_dadas_2bim,
d1.aulas_dadas_3bim as aulas_dadas_3bim,
d1.aulas_dadas_4bim as aulas_dadas_4bim,

(select p.media_bimestral
from PROC_MEDIA_BIMESTRAL(n1.matricula_aluno_notas,
n1.codigo_turma_notas) p
where p.CODIGO = n1.disciplina_notas ) as media_bimestral,

n1.escola

from notas n1 left join disciplina d1 on n1.disciplina_notas = d1.codigo

left join notas n2 on (n1.matricula_aluno_notas = n2.matricula_aluno_notas and
n1.bimestre <> n2.bimestre and
n2.bimestre <> '3 BIMESTRE' and
n2.bimestre <> '4 BIMESTRE' and
n2.bimestre <> '1 RECUPERACAO' and
n2.bimestre <> '2 RECUPERACAO' and
n1.codigo_turma_notas = n2.codigo_turma_notas and
n1.disciplina_notas = n2.disciplina_notas)
left join notas n3 on (n1.matricula_aluno_notas = n3.matricula_aluno_notas and
n1.bimestre <> n3.bimestre and
n2.bimestre <> n3.bimestre and
n3.bimestre <> '4 BIMESTRE' and
n3.bimestre <> '1 RECUPERACAO' and
n3.bimestre <> '2 RECUPERACAO' and
n1.codigo_turma_notas = n3.codigo_turma_notas and
n1.disciplina_notas = n3.disciplina_notas)

left join notas n4 on (n1.matricula_aluno_notas = n4.matricula_aluno_notas and
n1.bimestre <> n4.bimestre and
n2.bimestre <> n4.bimestre and
n3.bimestre <> n4.bimestre and
n4.bimestre <> '1 RECUPERACAO' and
n4.bimestre <> '2 RECUPERACAO' and
n4.bimestre <> '3 RECUPERACAO' and
n1.codigo_turma_notas = n4.codigo_turma_notas and
n1.disciplina_notas = n4.disciplina_notas)

left join notas n5 on (n1.matricula_aluno_notas = n5.matricula_aluno_notas and
n1.bimestre <> n5.bimestre and
n2.bimestre <> n5.bimestre and
n3.bimestre <> n5.bimestre and
n4.bimestre <> n5.bimestre and
n5.bimestre <> '3 RECUPERACAO' and
n5.bimestre <> '4 RECUPERACAO' and
n1.codigo_turma_notas = n5.codigo_turma_notas and
n1.disciplina_notas = n5.disciplina_notas)

left join notas n6 on (n1.matricula_aluno_notas = n6.matricula_aluno_notas and
n1.bimestre <> n6.bimestre and
n2.bimestre <> n6.bimestre and
n3.bimestre <> n6.bimestre and
n4.bimestre <> n6.bimestre and
n5.bimestre <> n6.bimestre and
n6.bimestre <> '1 RECUPERACAO' and
n6.bimestre <> '2 RECUPERACAO' and
n6.bimestre <> '4 RECUPERACAO' and
n1.codigo_turma_notas = n6.codigo_turma_notas and
n1.disciplina_notas = n6.disciplina_notas)

left join notas n7 on (n1.matricula_aluno_notas = n7.matricula_aluno_notas and
n1.bimestre <> n7.bimestre and
n2.bimestre <> n7.bimestre and
n3.bimestre <> n7.bimestre and
n4.bimestre <> n7.bimestre and
n5.bimestre <> n7.bimestre and
n6.bimestre <> n7.bimestre and
n7.bimestre <> '3 RECUPERACAO' and
n1.codigo_turma_notas = n7.codigo_turma_notas and
n1.disciplina_notas = n7.disciplina_notas)

where n1.matricula_aluno_notas =:aluno
and n1.codigo_turma_notas =:turma
and n1.bimestre = '1 BIMESTRE'
and ( (n2.bimestre = '2 BIMESTRE') or
(n2.bimestre is null) ) and
( (n3.bimestre = '3 BIMESTRE') or
(n3.bimestre is null) ) and
( (n4.bimestre = '4 BIMESTRE') or
(n4.bimestre is null) )
order by n1.disciplina_notas


------------------------------------------------------------------


procedure TFrmRelBoletim_Varias_Paginas.BitBtn1Click(Sender: TObject);
begin

(* Carregando o cabeçalho do relatório *)
IBQryEscola.Close;
IBQryEscola.ParamByName('escola').asstring := sEscola;
IBQryEscola.Open;

ppLabel35.Caption := IBQryEscolaNOME_ESCOLA.AsString;
ppLblEndInst.Caption := IBQryEscolaLOGRADOURO.AsString+' , '+
IBQryEscolaNUMERO.AsString+' - CEP '+
IBQryEscolaCEP.AsString+' - '+
IBQryEscolaBAIRRO.AsString+' - '+
IBQryEscolaCIDADE.AsString+' - '+
IBQryEscolaUF.AsString;

//carrega os dados do aluno
IBQryAluno.Close;
IBQryAluno.ParamByName('matricula').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
IBQryAluno.Open;

IBQryNotas.Close;
IBQryNotas.ParamByName('aluno').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
IBQryNotas.ParamByName('turma').AsString := DmDados.IBQryTurmaCODIGO.AsString;
IBQryNotas.Open;

IBQryAlunoTurma.Close;
IBQryAlunoTurma.ParamByName('escola').AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString;
IBQryAlunoTurma.ParamByName('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;
IBQryAlunoTurma.Open;


ppReport1.Print;
end;
Osmar

Osmar

Responder

Posts

24/10/2012

Alisson Santos

O ideal para que isso não ocorra é criar um novo grupo por turma que resolveria o seu problema..
Eu não verifiquei os eu select apenas estou informando que essa pode ser uma solução, faça isso e depois informe se deu certo ou continuou ainda o problema.
Responder

Gostei + 0

24/10/2012

Osmar

Alisson,

Nunca trabalhei com grupo, mas mesmo assim consegui criar o grupo, só que acontece a mesma coisa, cada vez que imprimo e vou passando de página ou seja mudando de aluno, as notas de todos alunos pertecem ao primeiro aluno da turma.

Acho que não estou fazendo corretamente essa relação do código abaixo com o que esta na query(veja que a query abaixo está resumida, o código completo está na primeira postagem)

procedure TFrmRelBoletim_Varias_Paginas.BitBtn1Click(Sender: TObject);
begin

IBQryNotas.Close;
IBQryNotas.ParamByName('aluno').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
IBQryNotas.ParamByName('turma').AsString := DmDados.IBQryTurmaCODIGO.AsString;
IBQryNotas.Open;
end

QUERY RESUMIDA:

where n1.matricula_aluno_notas =:aluno
and n1.codigo_turma_notas =:turma
Responder

Gostei + 0

25/10/2012

Claudia Nogueira

Está difícil de entender por que foi feito tanta coisa. Nesse código abaixo não estou vendo sentido.
procedure TFrmRelBoletim_Varias_Paginas.BitBtn1Click(Sender: TObject);
begin

(* Carregando o cabeçalho do relatório *)
IBQryEscola.Close;
IBQryEscola.ParamByName('escola').asstring := sEscola;
IBQryEscola.Open;

ppLabel35.Caption := IBQryEscolaNOME_ESCOLA.AsString;
ppLblEndInst.Caption := IBQryEscolaLOGRADOURO.AsString+' , '+
IBQryEscolaNUMERO.AsString+' - CEP '+
IBQryEscolaCEP.AsString+' - '+
IBQryEscolaBAIRRO.AsString+' - '+
IBQryEscolaCIDADE.AsString+' - '+
IBQryEscolaUF.AsString;

//carrega os dados do aluno
IBQryAluno.Close;
IBQryAluno.ParamByName('matricula').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
IBQryAluno.Open;

IBQryNotas.Close;
IBQryNotas.ParamByName('aluno').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
IBQryNotas.ParamByName('turma').AsString := DmDados.IBQryTurmaCODIGO.AsString;
IBQryNotas.Open;

IBQryAlunoTurma.Close;
IBQryAlunoTurma.ParamByName('escola').AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString;
IBQryAlunoTurma.ParamByName('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;
IBQryAlunoTurma.Open;


ppReport1.Print;
end;


Primeiro usou o IBQryEscola, depois pra carregar os dados da IBQryAluno você usou o DmDados.IBQryAlunoTurma e usou ele novamente no IBQryNotas e no próprio IBQryAlunoTurma da tela. Pra mim tinha que ter só um componente Query, trazendo todos os campos necessários para o relatório, usar um order na sentença e depois criar grupo no report builder.
Responder

Gostei + 0

25/10/2012

Osmar

Claudia,

Agradeço seu contato, mas veja só, uso esse mesmo codigo para imprimir um bolitim de cada vez e funciona perfeitamente, apenas adaptei o mesmo formulário colocando o subReport1:PipeliNotas onde estão inseridos os campos relativo a NOMEDISCIPLINA, NOTA, FALTAS, ETC.
Meu objetivo é imprimir de uma só vez todos os alunos que estão na turma, mas repito, se for para acessar um aluno de cada vez, o código funciona corretamente.
Responder

Gostei + 0

25/10/2012

Claudia Nogueira

Tenta criar um campo calculado na Query principal e no evento onCalcFields abrir as outras Querys passando os parâmetros. Tirando da função.
Claudia,

Agradeço seu contato, mas veja só, uso esse mesmo codigo para imprimir um bolitim de cada vez e funciona perfeitamente, apenas adaptei o mesmo formulário colocando o subReport1:PipeliNotas onde estão inseridos os campos relativo a NOMEDISCIPLINA, NOTA, FALTAS, ETC.
Meu objetivo é imprimir de uma só vez todos os alunos que estão na turma, mas repito, se for para acessar um aluno de cada vez, o código funciona corretamente.
Responder

Gostei + 0

25/10/2012

Claudia Nogueira

Tenta criar um campo calculado na Query principal e no evento onCalcFields abrir as outras Querys passando os parâmetros. Tirando da função.
Claudia,


Agradeço seu contato, mas veja só, uso esse mesmo codigo para imprimir um bolitim de cada vez e funciona perfeitamente, apenas adaptei o mesmo formulário colocando o subReport1:PipeliNotas onde estão inseridos os campos relativo a NOMEDISCIPLINA, NOTA, FALTAS, ETC.
Meu objetivo é imprimir de uma só vez todos os alunos que estão na turma, mas repito, se for para acessar um aluno de cada vez, o código funciona corretamente.
Responder

Gostei + 0

25/10/2012

Claudia Nogueira

Tenta criar um campo calculado na Query principal e no evento onCalcFields abrir as outras Querys passando os parâmetros. Tirando da função.
Claudia,


Agradeço seu contato, mas veja só, uso esse mesmo codigo para imprimir um bolitim de cada vez e funciona perfeitamente, apenas adaptei o mesmo formulário colocando o subReport1:PipeliNotas onde estão inseridos os campos relativo a NOMEDISCIPLINA, NOTA, FALTAS, ETC.
Meu objetivo é imprimir de uma só vez todos os alunos que estão na turma, mas repito, se for para acessar um aluno de cada vez, o código funciona corretamente.
Responder

Gostei + 0

25/10/2012

Osmar

olha Claudia eu não tenho muita experiencia, você poderia fazer o codigo.
Responder

Gostei + 0

25/10/2012

Claudia Nogueira

Essa DmDados.IBQryAlunoTurma é a principal?

O ideal seria você colocar ele no mesmo form dos outros. Aí nos fields você adiciona um campo novo com qualquer nome, de quaquer tipo, e o FieldType = Calculated.

Exemplo: campo_calc do tipo integer. (Vai servir somente pra passar pelo evento onCalcFields).

Aí no evento:
procedure DmDados.IBQryAlunoTurmaCalcFields(DataSet: TDataSet);
begin
  IBQryAlunoTurmacampo_calc.Value := 0;
  IBQryAluno.Close;
  IBQryAluno.ParamByName('matricula').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
  IBQryAluno.Open;

  IBQryNotas.Close;
  IBQryNotas.ParamByName('aluno').AsString := DmDados.IBQryAlunoTurmaMATRICULA_ALUNO.AsString;
  IBQryNotas.ParamByName('turma').AsString := DmDados.IBQryTurmaCODIGO.AsString;
  IBQryNotas.Open;

  IBQryAlunoTurma.Close;
  IBQryAlunoTurma.ParamByName('escola').AsString := DmDados.IBQryAlunoTurmaESCOLA.AsString;
  IBQryAlunoTurma.ParamByName('turma').AsString := DmDados.IBQryAlunoTurmaCODIGO_TURMA.AsString;
  IBQryAlunoTurma.Open;
end;

Sua função ficaria somente assim:
procedure TFrmRelBoletim_Varias_Paginas.BitBtn1Click(Sender: TObject);
begin

(* Carregando o cabeçalho do relatório *)
IBQryEscola.Close;
IBQryEscola.ParamByName('escola').asstring := sEscola;
IBQryEscola.Open;

ppLabel35.Caption := IBQryEscolaNOME_ESCOLA.AsString;
ppLblEndInst.Caption := IBQryEscolaLOGRADOURO.AsString+' , '+
IBQryEscolaNUMERO.AsString+' - CEP '+
IBQryEscolaCEP.AsString+' - '+
IBQryEscolaBAIRRO.AsString+' - '+
IBQryEscolaCIDADE.AsString+' - '+
IBQryEscolaUF.AsString;

ppReport1.Print;
end;


Isso só vai funcionar se você passar o DmDados.IBQryAlunoTurma pro mesmo form dos outros.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar