Fórum Como Gerar Parcelas no Delphi #287530

10/07/2005

0

Colegas tenha a seguinte dúvida como gerar parcelas no Delphi com SQL 2000
Ex: tenha uma tabela Filmes, (Campos CD_Filme, NM_Filme) essa é a tabela Pai.
Parcelas, (CD_Parcelas, DT_Parcela, VL_Parcela, QTD_Parcela) essa é a tabela Filho.
Como crio um procedimento para gerar essas parcelas uso o banco de dados desconectado.

Tô tentando adaptar esse que achei na net:

procedure TForm1.btnIncluirClick(Sender: TObject);
var
i: Byte;
begin
//Abro o Banco
qryParcela1.Open;
//Chamo um procedimento para verificar se tem prestação pendente
//////verificaparcela;
// Minha variável no caso i inicialmente é 0
i:=0;
// minha variável recebe 1 do numero de parcelas no caso o digitado dentro de edParcela.Text
for i := 1 to StrToInt(edtParcela.Text) do
begin
// verifico o numero é menor do que o da variavel
if qryParcela1.RecordCount < i then
// se for insiro
qryParcela1.Insert
else
//senao edito
qryParcela1.Edit;
//PARC vai receber o numero de parcelas que eu digitei
qryParcela1.FieldByName(´cd_parcela´).Value := GerarCodigo + 1 - 1;
qryParcela1.FieldByName(´PARC´).Value := i;
//VALOR vai receber o valor digitado dividido pelo numero de parcelas
qryParcela1.FieldByName(´VALOR´).Value :=(StrToFloat(edtValor.Text)/(StrToInt(edtParcela.Text)));
//DATA recebe a data replicando conforme o numero das parcelas
qryParcela1.FieldByName(´DATA´).Value:= incMonth( Date, i - 1);
qryParcela1.FieldByName(´nm_Filme´).Value := edtNome.Text;
//Gravo no banco
qryParcela1.Post;
//vou para o próximo
Next;
end;
//Dou um updade para gravar esse registro no banco lembre-se que quando
//trabalho com clientDataSet eu trabalho em cachê é necessário dar um
//ApplyUpdates(0) para gravar no banco o (0) significa o numero de erros
//claro com certeza isso só vai acontecer se não tiver nenhum erro ok
qryParcela1.Close;
//qryParcela1.Open;
//ApplyUpdates(0);
//Mando uma mensagem de texto
showmessage(´Arquivo incuido com sucesso´);

end;

procedure TForm1.ExcluirUsuario;
begin
//qryParcela1.Open;
//while (not qryParcela1.Eof) do begin
with comSql do begin
CommandText := DELETAR;
prepared;
Parameters.ParamByName(´NM_FILME´).Value := trim(edtNome.Text);
Execute;
end;
end;

procedure TForm1.verificaparcela;
var
//Crio uma variavel para verificar o resultado
result:string;
begin
//Aqui verifico se a coluna em que esta a parcela esta vazia
if qryParcela1.Fields.Fields[1].AsString <>´´ then
begin
//Abro o ClientDataset de verificação de contagem dos campos
ClientDataSet2.Open;
begin
//result vai receber a quantidade de parcelas em aberto
result:=ClientDataSet2PARC.AsString;
//envio uma mesagem para o usuario falando que tem a quantidade que retornar
//em aberto
Showmessage(´Você possui ´+ result +´ parcelas pendentes´ + #13
+ ´Nao é possivel efetuar pagamento´);
//aborto a operação e fecho o ClientDataSet referente a contagem dos campos
abort;
ClientDataSet2.Close;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if application.messagebox(´Deseja realmente excluir o registro corrente?´,
´CONFIRMAÇÃO´, MB_ICONINFORMATION + MB_YESNO) = mrYes then begin
DM.Oficina.BeginTrans;
try
ExcluirUsuario;
DM.Oficina.CommitTrans;
//Preparar(EXCLUIR);
except
DM.Oficina.RollbackTrans;
application.MessageBox(´Ocorreu um erro ao excluir.´, ´ATENÇÃO´, mb_OK + mb_IconINFORMATION);
end;
end;
end;

function TForm1.GerarCodigo: Integer;
begin
with dstAuxiliar do begin
close;
CommandText := SEQ;
open;
result := fieldbyname(´SEQUENCIAL´).value;
end;
end;


Mssilva

Mssilva

Responder

Posts

11/07/2005

Emerson Nascimento

utilize a função [url=http://forum.clubedelphi.net/search.php]pesquisar[/url] do fórum. há vários exemplos.

um deles:

var 
  I: shortint; 
  VlParc: Double; 
begin 
  VlParc := Trunc((ValorTotal / QtdParc) * 100) / 100; // valor da parcela
  Pagar.Open; // somente se a tabela de parcelas já não estiver aberta
  try
    for I := QtdParc downto 1 do 
      begin 
        Pagar.Insert; 
        PagarData.Value := Date; // data de geração da parcela
        PagarVencto.Value := IncMonth(Date, I); // data de vencimento
                                                // da parcela
        if I = 1 then 
           PagarValParc.Value := ValorTotal - (VlParc * (QtdParc - 1)) 
        else 
           PagarValParc.Value := VlParc; 
        PagarNumParc.Value := I; // numero da parcela
        {preencha os demais campos da tabela}
        Pagar.Post; // grava o registro em cache
      end; 
    Pagar.ApplyUpdates(0); // após gerar todas as parcelas,
                           // efetua a gravação no banco de dados
  except
    {exiba uma mensagem de erro}
  end;
end;



Responder

Gostei + 0

11/07/2005

Gigatel

Dá uma olhada nesta ...uso esta e funciona bem...espero ter ajudado..


procedure T_FormContas.Geraparcelas(Sender: TObject);
var
  v_count,v_parc: integer;
  v_date:Tdatetime;
  v_valor:REAL;
begin
    Table2.Edit;
    Table2Valor.value := edvalor.text;
    Table2Parcelas.value := edparcela.Text;
    Table2DataCad.Value := formatDateTime(´dd/mm/yyyy´,Date);
    Table2Tipo.Value := ´C´;
    Table2.Refresh;
    v_date:=strtodate(eddata.text)+ strtofloat(ComboBox2.text);
    v_count:=strtoint(edparcela.text);
    v_parc:=1;
    Query1.Open;
  while v_count>0 do
    begin
    Query1.insert;
    Query1.FieldByName(´QuantParcelas´).asinteger:=(v_parc);
    V_VALOR:=((strtofloat(edvalor.text)-strtofloat(edentrada.text)))/strtoint((edparcela.text));
    query1.fieldbyname(´valor´).value:=floattostrf(v_valor,ffFixed,10,2);
    query1.FieldByName(´Vencimento´).asdatetime:=v_date;
    Query1CodAcess.Value := Table1Codigo.value; /// Aki seria o vinculo entre as tabelas...
    Query1.post;
    v_count:=v_count-1;
    v_parc:=v_parc+1;
    v_date:=v_date+30;
    query1.next;







Responder

Gostei + 0

11/07/2005

Mssilva

Colegas obrigado pelas dicas vou testar é digito aqui os resultados.
Quanto ao colega emerson.en pesquisei não só nesse fórum como em outros na net
Pode ser que não digitei a frase correta mais quando venho a você é que está difícil para mim, só novo ainda essa ária é vá desculpada qualquer coisa valeu mesmo. :oops:


Responder

Gostei + 0

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

Aceitar