parcelamento com entrada

22/01/2010

3

procedure tfrmcred.parcelarvenda(valor:double;condicao:string);
var
dias: tstringlist;
i: integer;
espaco: shortint;
datavencimento: tdate;
parcela,valorparcela: double;
begin
if ansiuppercase(condicao) = 'A VISTA' then
condicao := '0';
espaco := pos(' ',condicao);
if espaco > 0 then
condicao := copy(condicao,1,espaco-1);
dias := tstringlist.Create;
dias.Delimiter := ',';
dias.DelimitedText := condicao;
try
valorparcela := roundto(valor / dias.Count,-2);
except
valorparcela := roundto(valor,-2);
end;
for i := 0 to dias.Count-1 do
begin
datavencimento := date + strtointdef( dias[i],0 );
if i = (dias.Count-1) then
parcela := valor - ((dias.Count-1) * valorparcela)
else parcela := valorparcela;
dm1.tabprazo.Insert;
dm1.tabprazoVALOR.Value := parcela;
dm1.tabprazoCODPARCELA.Value := i + 1 ;
dm1.tabprazoDVencimento.Value := datavencimento;
dm1.tabprazoSITPARCELA.Value := 1;
//dm1.tabprazoCODFORNECEDOR.Value := dm1.tabpedidoCODFORNECEDOR.Value;
//dm1.tabprazoCODPEDIDO.Value := dm1.tabpedidoCODPEDIDO.Value;
dm1.tabprazo.Post;
end;
dias.Free;
end;
alguem pode me ajudar a colocar a entrada neste parcelamento Exemplo : a pessoa quer dar uma entrada de 200 reais e parcelar o restante em 3 vezez, jogando assim a primeira parcela de 200 e as outras de acordo com as data escolhidas 0,30,60,90 dias
Responder

Posts

veja se assim funciona:

procedure tfrmcred.parcelarvenda(valor:double; condicao:string; entrada: double = 0);
var
  dias: tstringlist;
  nparcelas, i, icond: integer;
  datavencimento: tdate;
  parcela, valorparcela: double;
begin
  if ansiuppercase(condicao) = 'A VISTA' then
  begin
    condicao := '0';
    entrada := 0;
  end;

  condicao := stringreplace(condicao, ' ', '', [rfReplaceAll]);

  dias := tstringlist.Create;
  dias.Delimiter := ',';
  dias.DelimitedText := condicao;

  nparcelas := dias.Count;
  if entrada > 0 then icond := 1 else icond := 0;

  if condicao <> '0' then
    try
      valorparcela := roundto((valor - entrada) / (nparcelas - icond),-2);
    except
      valorparcela := roundto(valor,-2);
      entrada := 0;
    end;

  for i := 0 to nparcelas - 1 do
  begin
    datavencimento := date + strtointdef( dias[i],0 );

    if i = (nparcelas - 1) then
      parcela := (valor - entrada) - ((nparcelas - 1 - icond) * valorparcela)
    else
    if (i = 0) and (entrada > 0) then
      parcela := entrada
    else
      parcela := valorparcela;

    tabprazo.Append;
    tabprazoVALOR.Value := parcela;
    tabprazoCODPARCELA.Value := i + 1 ;
    tabprazoVencimento.AsSQLTimeStamp := DateTimeToSQLTimeStamp(datavencimento);
    tabprazoSITPARCELA.Value := 1;
    tabprazoTOTPARCELAS.Value := nparcelas;
//    tabprazoCODFORNECEDOR.Value := dm1.tabpedidoCODFORNECEDOR.Value;
//    tabprazoCODPEDIDO.Value := dm1.tabpedidoCODPEDIDO.Value;
    tabprazo.Post;
  end;
  dias.Free;
end;

pode ser usada passando ou não o valor de entrada .

// passando valor de entrada
parcelarvenda(1560.87, '0, 30, 60, 09', 520);

// sem valor de entrada (será calculado pela rotina)
parcelarvenda(1560.87, '0, 30, 60, 09'); ou
parcelarvenda(1560.87, '0, 30, 60, 09', 0);

Responder

23/01/2010

Marcio Pinto

Emerson é isto mesmo que eu preciso, só nao ta criando a parcela ex: 0,30,60,90 num valor de 300,00 e entrada de 150,00   deveria aparecer assim   1-     150,00 2-       50,00 3-       50,00 4-       50,00           esta ficando assim   2-       50,00 3-       50,00 4-       50,00  
Responder

24/01/2010

Evaristo Neto

Olá!!

Imagine o seguinte:

    entrada = VendasTotal - valor da entrada

Se houver algum valor em "entrada", ou seja, maior que 0 entao:

1 - Vc adiciona esse registro na tabela de faturas com os dados referentes ao lançamento;
      CdsFaturas.Append;
      CdsFaturasFORMAPGTO.value:="tipo do pagamento - dinheiro, cartao, cheque a vista)"
      cdsfaturasVALOR.asfloat:=StrToFloat(Trim(EdtEntrada.Text));
      CdsFaturasVALORPAGO.asfloat:=StrToFloat(Trim(EdtEntrada.Text));

2 - Pegue a diferença (total da venda - valor da entrada e divida nas parcelas restantes) e insira na tabela faturas com os respectivos vencimentos
for i:=1 to strtoint(Trim(EdtParcelas.Text)) - 1 do
cdsfaturasVALOR.asfloat:=(VendasTotal - strtofloat(Trim(EdtEntrada.text))) / (strtoint(Trim(EdtParcelas.text))-1);

[]´s
Evaristo

Responder
Márcio, como você está passando os parâmetros?


parcelarvenda(300, '0, 30, 60, 09', 150) ?


debugue, pois aqui está funcionando perfeitamente.

Responder

26/01/2010

Marcio Pinto

Bom dia a todos, ficou perfeito do jeito que eu precisava, eu estava fazendo um update para a parcela com entrada e apagando esta parcela, muito boa a ajuda dos amigos do forum esta funcionando 100% agora   agradeco a todos pela ajuda!!!!!!!!
Responder