Fórum Ajuda para criar algoritmo #477510

29/04/2014

0

Galera preciso criar um algoritmo para em seguida criar uma procedure ou function.

Bem, o caso de uso é o seguinte: Tenho um controle de cheques onde o posso efetuar pagamento de vários títulos com um cheque. Por exemplo: tenho um cheque no valor de R$ 500,00 e tenho 3 títulos de R$ 200,00. O sistema vai precisar da baixar das duas primeiras parcelas e a terceira parcial (R$ 100,00). Quando não houver mais saldo do cheque não o sistema tem q para de conciliar.

Exemplo:
VC = Valor do Cheque
VT = Valor do Título
VS = Valor do Saldo

Enquanto VC for 0 Baixe o título
Se VT for maior do que o VS e o VS for maior que 0 Baixe o título com o valor do VS
Se o VS for igual a 0 sair do laço

Estou pesando em criar uma função ou procedure.

Tentei fazer mais não está dando certo.

var
  iSaldo,iValor:Double;
begin
  iSaldo := 0;
  with DmCheques do
  begin
    while not CdsTituloaPagar.Eof do
    begin
      if iSaldo = 0 then
      begin
        iSaldo := (CdsChequesCHE_VALOR.AsFloat - CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat);
        iValor := CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat;
        Memo1.Lines.Add('Título: ['+CdsTituloaPagarCTPG_ID.AsString+'] Saldo: '+FloatToStr(iSaldo)+ ' Valor:'+FloatToStr(iValor));
      end
      else
      if iSaldo > 0 then
      begin
        iSaldo := iSaldo - CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat;
        iValor := CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat - iSaldo ;
        Memo1.Lines.Add('Título: ['+CdsTituloaPagarCTPG_ID.AsString+'] Saldo: '+FloatToStr(iSaldo)+ ' Valor:'+FloatToStr(iValor));
      end
      else
      if iSaldo < 0 then
      begin
        iSaldo := iSaldo + CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat;
        iValor := iSaldo+iSaldo;
        Memo1.Lines.Add('Título: ['+CdsTituloaPagarCTPG_ID.AsString+'] Saldo: '+FloatToStr(iSaldo)+ ' Valor:'+FloatToStr(iValor));
        Break;
      end;
      CdsTituloaPagar.Next;

    end;
  end;
Sidney Abreu

Sidney Abreu

Responder

Posts

05/05/2014

Emerson Nascimento

não sei se entendi sua dúvida, mas segue uma forma de fazer:


var
  iSaldo,iValor: Double;
begin
  with DmCheques do
  begin
    iSaldo := CdsChequesCHE_VALOR.AsFloat;
    while not CdsTituloaPagar.Eof and (iSaldo > 0) do
    begin
      if iSaldo >= CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat then
      begin
        iSaldo := iSaldo - CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat;
        iValor := CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat;
      end
      else
      begin
        iValor := iSaldo;
        iSaldo := 0;
      end;

      Memo1.Lines.Add('Título: ['+CdsTituloaPagarCTPG_ID.AsString+'] Valor:' + CdsTituloaPagarCTPG_VALOR_PARCELA.AsString + ' Amortizado:'+FloatToStr(iValor) + ' Saldo:' + FloatToStr(CdsTituloaPagarCTPG_VALOR_PARCELA.AsFloat - iValor);

      CdsTituloaPagar.Next;
    end;
  end;
Responder

Gostei + 0

06/05/2014

Sidney Abreu

Desculpa Emerson, eu mudei um pouco a lógica, vou tentar explicar o mais detalhado possível, se poder me ajudar ficarei muito grato!

Bem, é um controle de cheque que eu estou fazendo, onde o usuário poderá fazer pagamentos de (um ou vários) títulos com (um ou vários) cheques.

Exemplo: O Sistema permite o usuário selecionar quais o cheques ele quer utilizar para realizar pagamentos e depois ele seleciona quais o títulos que ele quer pagar mediante o valor do saldo total dos cheques, então vamos lá.

Vou colocar um exemplo abaixo dos títulos e cheques selecionados.

Cheques Selecionados [Saldos]:
1º Cheque: 20,00
2º Cheque: 150,00
3º Cheque: 30,00
4º Cheque: 10,00

Saldo Total: 210,00

Títulos Selecionados [Valores]:
1º Títulos : 150,00
2º Títulos : 80,00

Títulos Total: 230,00

*Nesse caso o sistema vai baixar o valor total do Título se o saldo for igual ou maior o valor do Títulos, se não for baixa o Título parcial, ou seja, com o valor que tem no saldo.

Vamos a lógica:
Nesse exemplo acima, o valor do meu primeiro título é de 150,00 mas o meu primeiro cheque é de apenas 20,00 então eu tenho que somar com o próximo cheque até que valor cubra o valor o titulo em questão, então meu saldo ficou (soma dos dois primeiros cheques 20,00 + 150,00 = 170,00) 170,00 - 150,00 (valor do título), sobrou 20,00 para o próximo título, e o meu saldo total ficou 210,00 - 150,00 = 60,00, ai o próximo titulo tem o valor de 80,00 mas no momento eu só tenho 20,00 que restou do ultimo pagamento, ai vou somar com os outro cheques até chegar ao valor do titulo ou chegar ao ultimo cheque, então somando com o terceiro cheque fica 20,00 + 30 = 50,00, então vou ter q somar de novo, agora com o ultimo cheque 50,00 + 10 = 60,00, agora o saldo bateu com o saldo total, ou seja, é apenas o valor que eu tenho para pagar o próximo título 60,00 - 80,00 = -20,00, ou seja, o último título foi pago apenas com 60,00, ou seja, foi pago parcial.

Minha lógica esta correta? não consegui colocar em pratica.

Responder

Gostei + 0

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

Aceitar