Fórum Como Gerar Parcelas no Delphi #287530
10/07/2005
0
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
Curtir tópico
+ 0Posts
11/07/2005
Emerson Nascimento
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;Gostei + 0
11/07/2005
Gigatel
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;
Gostei + 0
11/07/2005
Mssilva
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:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)