Loop de Mensalidade

09/01/2013

1

Olá pessoal, preciso muito da ajuda de vocês, o negócio é o seguinte, no meu sistema tenho um loop de geração de mensalidade, onde passo como parâmetro o código do aluno, o código da matricula do aluno e a data de inscrição do aluno, da seguinte maneira:

//Query responsável para pegar a data de inscrição e o codigo da matricula do aluno
  qryDataInscricao.Close;
  qryDataInscricao.Parameters.ParamByName('codigo').Value := codigoaluno;
  qryDataInscricao.Open;

  if ((DBEdit3.Text <> '')and(DBEdit4.Text <> '' )) then
    begin
      codigoMatricula := StrToInt(DBEdit4.Text);
      dataInscricao := StrToDateTime(DBEdit3.Text);
    end


Aí sim, depois de "jogado" nas variáveis os dados que eu preciso eu faço o loop assim:

      while i <= Quant_mes do
        begin

          qryInsertMensalidade.Parameters.ParamByName('codigo_paciente').Value := codigoaluno;
          qryInsertMensalidade.Parameters.ParamByName('codigo_matricula').Value := codigoMatricula;
          qryInsertMensalidade.Parameters.ParamByName('data_vencimento').Value :=  IncMonth(dataInscricao,(i));
          qryInsertMensalidade.Parameters.ParamByName('descricao').Value := 'MENSALIDADE - ' + DBEdit1.Text;
          qryInsertMensalidade.Parameters.ParamByName('valor').Value := qryDataInscricaovalor_mensal.Value;

          datarepetida := qryInsertMensalidade.Parameters.ParamByName('data_vencimento').Value;

          qryExisteDebito.Close;
          qryExisteDebito.Parameters.ParamByName('codigoPaciente').Value := codigoaluno;
          qryExisteDebito.Parameters.ParamByName('dataVencimento').Value := datarepetida;
          qryExisteDebito.Open;

        //Se tiver mensalidade para este mês não deverá gerar o mesmo
          if not qryExisteDebito.Locate('data_vencimento',datarepetida,[]) then
            begin
              qryInsertMensalidade.ExecSQL;
            end;


          qryGrid.Next;

          i := i + 1;

        end;//fim do while


Mas o problema é o seguinte, quando um mesmo aluno se matricula em duas modalidades ou mais, ele fica com dois códigos de matricula e duas datas de inscrição, que é o correto mesmo, porém eu não pensei nisso antes, minha dúvida é: como eu faço pra gerar as mensalidades com as duas matriculas??

Eu uso Delphi7, SQLServer 2005, ADOQuery e Datasource

Desde já agradeço!
Responder

Posts

Você pode fazer um loop na tabela de matriculas e depois fazer o seu mesmo loop na tabela de menssalidades tipo. Um loop dentro de outro loop:

//Loop 1
qryDataInscricao.First;
while not(TabelaDadosAluno.eof) to
begin
//Loop 2
 For i:=0 to pred(NumeroDeMenssalidade) do
  with TabelaMenssalidade.Parameters do
    begin
    Parameters.ParamByName('codigo_paciente').Value := codigoaluno;
    Parameters.ParamByName('codigo_matricula').Value := codigoMatricula;
    ...
  end;
TabelaDadosdoAluno.Next;
end;


O primeiro loop corre a tabela de matriculas passando o código/matricula do aluno que entra no o segundo inserindo os dados das mensalidades. Um linha da tabela matriculas, insere várias mensalidades.

Espero ter ajudado =)
Responder