Geração de parcelas

É super normal em nossos sistemas ter parcelas, principalmente em Vendas/Compras. Para criarmos o exemplo, vamos imaginar uma vendas em que o cliente queira parcelar o valor total em 12 vezes. Neste cenário, informaremos o valor total, a quantidade de parcelas e a quantidade entre os vencimentos.
Vamos precisar de:
2 - TDBGrid { dbgridCDSPai, dbgridCDSFilho };
2 - TClientDataSet { CDSPai, CDSFilho };
2 - TDataSource { dsCDSPai, dsCDSFilho };
Coloque os componente de acordo com a estrutura abaixo;
DESCRICAO "string";
CODIGO "Integer";
NUMERO_PARCELA "Integer";
DIAS_ENTRE_PARCELAS "Integer";
VALOR "currency";
Na tabela CDSFilho crie os campos:
DATA_VENCIMENTO "Date";
NUMERO_PARCELA "Integer";
VALOR "currency";
Vamos começar com os códigos;
No evento OnNewRecord do componente CDSFilho
procedure TFPrincipal.CDSFilhoNewRecord(DataSet: TDataSet); begin CDSFilhoCODIGO.Value := CDSPaiCODIGO.Value; end;
No Change dos campos VALOR, PARCELA e NUMERO_PARCELA coloque o código abaixo;
procedure TFPrincipal.CDSPaiVALORChange(Sender: TField); Var k: Integer; wData : TDate; wValorTotal : Double; begin wData := Date; wValorTotal := CDSPaiVALOR.Value; if (CDSPaiNUMERO_PARCELA.Value > 0) and (CDSPaiVALOR.Value > 0) and (CDSPaiDIAS_ENTRE_PARCELAS.Value > 0) then begin for k := 1 to CDSPaiNUMERO_PARCELA.Value do begin if not CDSFilho.Locate('NUMERO_PARCELA', k, []) then begin CDSFilho.Append; CDSFilho.FieldByName('NUMERO_PARCELA').AsInteger := k; end else CDSFilho.Edit; wData := wData + CDSPaiDIAS_ENTRE_PARCELAS.AsInteger; CDSFilhoDATA_VENCIMENTO.AsDateTime := wData; CDSFilhoVALOR.AsCurrency := CDSPaiVALOR.Value / CDSPaiNUMERO_PARCELA.Value; CDSFilho.Post; wValorTotal := wValorTotal - CDSFilhoVALOR.AsCurrency; end; CDSFilho.Last; while CDSFilhoNUMERO_PARCELA.AsInteger > CDSPaiNUMERO_PARCELA.Value do CDSFilho.Delete; if CompareValue(wValorTotal, 0.00, 0.001) <> EqualsValue then begin CDSFilho.Edit; CDSFilhoVALOR.AsCurrency := CDSFilhoVALOR.AsCurrency + wValorTotal; CDSFilho.Post; end; CDSFilho.First; end; end;
No código acima passamos dividindo o valor total entre a quantidade de parcelas, e a data de vencimento vamos acrescentando o campo dias entre parcelas "Normalmente e 30 dias" mas sempre tem suas exerções.
Resultado

Exemplo: Download do exemplo
Otimo exemplo. parabens
ResponderExcluirObrigada :)
ExcluirBoa Noite. Enviei email no hotmail.
ResponderExcluirRespondido! E no aguardo!
ExcluirÓtimo exemplo
ResponderExcluirMais como faço pra salva no bd
Bom dia! E só criar duas tabelas no banco dados para o "CDSFilho" e "CDSPai" e colocar conexão com o banco de dados! Tem os tipos de campos no exemplo a cima!
Excluir