Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

g_informatica

Gerar Parcelas p/ vários alunos

Recommended Posts

Boa Tarde, galera!!!

 

Estou c/ um probleminha... Seguinte, estou fazendo o financeiro do meu sistema escolar e gostaria de saber se tem uma forma de gerar de uma só vez uma quantidade x de parcelas para todos os alunos de uma determinada série.

 

Estou utilizando o seguinte código para gerar parcelas de 1 aluno:

 

CODE
var

DataVcto, DataPgto: TDate;

DiasAtraso: Integer;

begin

DataVcto:= StrToDate(Edit1.Text);

DataPgto:= Date;

DiasAtraso:= Trunc(DataPgto - DataVcto);

Label1.Caption:= IntToStr(DiasAtraso);

 

if DiasAtraso > 0 then

begin

//Calcula juros para conta com base na var DiasAtraso

end

else begin

//Calcula conta SEM Juros, pq naum esta atrasada ...

end;

 

Esse código eu consegui c/ um amigo aqui no forum e ele funciona perfeitamente para gerar as parcelas de 1 aluno, gostaria de saber como implementá-lo para gerar parcelas p/ vários alunos de uma série...

 

Desde já agradeço qualquer tipo de ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

você monta um SQL pra selecionar todos os alunos que deseja, dai faz um laço While dentro desta query, e dentro do while você faz o código q você ja tem ae....

 

qryDOSelect.First;

while not qryDOSelect.EOF do
begin
	//aki vai seu codigo ...
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Rodrigo Miss, td bem???

 

Me enrolei de novo nesse assunto das mensalidades... Fiz como você falou, montei uma query p/ selecionar os alunos q irão receber as mensalidades, até aí td bem funcionou, mas na hora de fazer o laço aí complicou... :wacko: Pela falta de experiência no assunto eu fiz um laço infinito, ou seja, ele ñ pàra mais de rodar e tb ele está gerando várias parcelas sempre com a parcela 1, a msm data de vencimento e para o msm aluno...

 

Ex:

codaluno / codescola / codserie / codturma / n_parcela / dt_vencimento

 

4383 / 4 / 1 / 101 / 1 / 2008-02-25

4383 / 4 / 1 / 101 / 1 / 2008-02-25

4383 / 4 / 1 / 101 / 1 / 2008-02-25

4383 / 4 / 1 / 101 / 1 / 2008-02-25

4383 / 4 / 1 / 101 / 1 / 2008-02-25

 

Se você puder me ajudar a encontrar onde está o erro eu te agradeço muito...

 

Aí está o código como ficou após o laço:

 

CODE
var

i: Byte;

begin

f_dados.q_parcelas.Open;

i:=1;

for i := 1 to StrToInt(edParcela.Text) do

begin

q_lotacao_aluno.Open;

f_dados.q_parcelas.Open;

q_parcelas.First;

while not q_lotacao_aluno.Eof do

begin

f_dados.q_parcelas.Append;

f_dados.q_parcelas.FieldByName('n_parcela).Value := i;

f_dados.q_parcelas.FieldByName('valor_parcela').Value :=(StrToFloat(edtValor.Text));

f_dados.q_parcelas.FieldByName('dt_vencimento').Value:= incMonth( Date, i -2);

f_dados.q_parcelas.FieldByName('codaluno').Value:=q_lotacao_alunocodaluno.Value;

f_dados.q_parcelas.FieldByName('codserie').value:=q_lotacao_alunocodserie.Value;

f_dados.q_parcelas.Post;

Next;

end;

showmessage('Registro Gravado');

end;

 

A q_lotacao_aluno é a query onde eu escolho os alunos q receberão as mensalidades... por enquanto ela está sendo executada através de um botão onde fiz a seguinte select:

 

CODE
if (dblcserie.Text='') and (dblcturma.Text='') then

with q_lotacao_aluno do

begin

close;

q_lotacao_aluno.sql.clear;

q_lotacao_aluno.sql.add('select*from lotacao_aluno where codescola=:escola and configuracao=:ano');

q_lotacao_aluno.parameters[0].Value:=codescola.Text;

q_lotacao_aluno.parameters[1].Value:=ano.Text;

q_lotacao_aluno.Open;

end;

 

nesse código existe o if pq o sistema tem a opção de gerar mensalidades p/ todos os alunos de uma série e turma ou gerar apenas p/ 1 aluno da série e turma escolhido através de um dblookupcombobox pelo usuário. Então se os dblcserie e turma estiverem vazios ele irá trazer todos os alunos filtrando pelo ano e escola (fundamental/medio).

 

Espero ter explicado bem o q está ocorrendo...

Desde já agradeço muito sua ajuda!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Rodrigo,

 

Coloquei o código q você falou q_lotacao_aluno.Next(); e funcionou direitnho, a tabela ñ está mais rodando direto s/ parar, porém o laço diz para executar o código até chegar ao fim da tabela lotação de alunos, então ele gera a primeira mensalidade para tds os alunos da tabela lotacao mas qd chega no fim do arquivo ele pàra e ñ gera as outras parcelas desses alunos http://forum.imasters.com.br/public/style_emoticons/default/cry.gif

 

Se você puder me ajudar de novo http://forum.imasters.com.br/public/style_emoticons/default/blush.gif eu te agradeceria muuuuuuuuuuuito!!!

De qualquer forma valeu pela força, você já me fez dar um grande passo,brigadão!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Rodrigo, graças a Deus e a sua ajuda consegui resolver...

 

Coloquei uma condição antes do laço e deu certo... Ficou meio feio, sei q um programador experiente usaria - linhas, + lógica e perderia - tempo, mas como ainda estou aprendendo fiz dessa maneira:

 

CODE
if q_lotacao_aluno.Eof=true then

with q_parcelas do

begin

q_lotacao_aluno.Next;

q_parcelas.Append;

q_parcelas.FieldByName('n_parcela').Value := i;

q_parcelas.FieldByName('valor_total').Value :=(StrToFloat(edtValor.Text));

q_parcelas.FieldByName('dt_vencimento').Value:= incMonth( Date, i -2);

q_parcelas.FieldByName('codaluno').Value:=q_lotacao_alunocodaluno.Value;

q_parcelas.FieldByName('codserie').value:=q_lotacao_alunocodserie.Value;

q_parcelas.FieldByName('codescola').value:=q_lotacao_alunocodescola.Value;

q_parcelas.FieldByName('codturma').Value:=q_lotacao_alunocodturma.Value;

q_parcelas.Post;

next;

showmessage('Registro Gravado');

end

else

if q_lotacao_aluno.Eof=false then

while q_lotacao_aluno.Eof=false do

begin

with q_parcelas do

begin

q_parcelas.Append;

q_parcelas.FieldByName('n_parcela').Value := i;

q_parcelas.FieldByName('valor_total').Value :=(StrToFloat(edtValor.Text));

q_parcelas.FieldByName('dt_vencimento').Value:= incMonth( Date, i -2);

q_parcelas.FieldByName('codaluno').Value:=q_lotacao_alunocodaluno.Value;

q_parcelas.FieldByName('codserie').value:=q_lotacao_alunocodserie.Value;

q_parcelas.FieldByName('codescola').value:=q_lotacao_alunocodescola.Value;

q_parcelas.FieldByName('codreceitas').Value:=rec;

q_parcelas.FieldByName('codturma').Value:=q_lotacao_alunocodturma.Value;

q_parcelas.Post;

q_lotacao_aluno.Next();

q_parcelas.next();

end;

Tá feio, mas o importante é q resolveu o problema... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Valeu pelas dicas amigo, s/ ela ñ conseguiria chegar até aqui http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.