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.
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
Curtir tópico
+ 0
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.
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
Clique aqui para fazer login e interagir na Comunidade :)