Pagamento Parcial de Contas a Receber
Boa noite!!!
Gostaria de saber como faço para efetuar a baixa de um pagamento parcial de um contas a receber!Quando eu clico no check pagamento parcial e digito o valor a ser pago, o sistema baixa todas as parcelas SELECIONADAS deixando o valor residual para a última selecionada ( ou seja a de vencimento maior), igual na imagem, o valor total da conta era de 8640,00 e o valor de pagamento parcial foi informado de 8000,00 assim gerando um pagamento residual no valor de 640,00, não estou conseguindo fazer isso, segue abaixo meu código e o link da imagem da tela
FOTO DA TELA BAIXA PARCIAL
Gostaria de saber como faço para efetuar a baixa de um pagamento parcial de um contas a receber!Quando eu clico no check pagamento parcial e digito o valor a ser pago, o sistema baixa todas as parcelas SELECIONADAS deixando o valor residual para a última selecionada ( ou seja a de vencimento maior), igual na imagem, o valor total da conta era de 8640,00 e o valor de pagamento parcial foi informado de 8000,00 assim gerando um pagamento residual no valor de 640,00, não estou conseguindo fazer isso, segue abaixo meu código e o link da imagem da tela
FOTO DA TELA BAIXA PARCIAL
procedure TFrmBaixaPrazo.BtnBaixarClick(Sender: TObject);
var
ValorTotal: Real;
x: Real;
begin
CdsBaixaPrazo.Filter := 'SELECIONADO = ' + QuotedStr('S'); // filtra os registros selecionados
CdsBaixaPrazo.Filtered := True; // ativa o filtro
CdsBaixaPrazo.First; // posiciona o cursor no primeiro registro
//while not CdsBaixaPrazo.Eof do
//begin
ValorTotal := StrToCurr(RetirarPonto(EdtValorSelecionado.Text));
while not CdsBaixaPrazo.Eof do
begin
// Se a variável estiver zerada,
// significa que todas as deduções de cálculo já foram feitas (pagamentos integrais e parciais)
if ValorTotal = 0 then
begin
Break;
end;
// Se "Valor Selecionado" for MAIOR que o valor da parcela, quita a parcela
if ValorTotal < CdsBaixaPrazo.FieldByName('VALORTOTAL').AsFloat then
begin
// Deduz o valor da parcela do "Valor Selecionado"
// Por exemplo: 3.000,00 - 2.000,00 = 1.000,00 restantes para deduzir
CdsBaixaPrazo.FieldByName('VALORTOTAL').AsFloat := CdsBaixaPrazo.FieldByName('ValorParcela').AsFloat - ValorTotal;
// Altera a parcela para quitada
CdsBaixaPrazo.Edit;
CdsBaixaPrazo.FieldByName('SITUACAOPAGAMENTO').AsString := 'PAGO';
CdsBaixaPrazo.FieldByName('DATAPAGAMENTO').AsDateTime := Now;
CdsBaixaPrazo.FieldByName('VALORTOTAL').AsFloat := 0;
CdsBaixaPrazo.Post;
// Move para a próxima parcela
CdsBaixaPrazo.Next;
CdsBaixaPrazo.ApplyUpdates(0);
Continue;
end;
// Se "Valor Selecionado" for MENOR que o valor da parcela, então é pagamento parcial
if ValorTotal > CdsBaixaPrazo.FieldByName('VALORTOTAL').AsFloat then
begin
// Altera a parcela para parcial
CdsBaixaPrazo.Edit;
CdsBaixaPrazo.FieldByName('SituacaoPagamento').AsString := 'PARCIAL';
CdsBaixaPrazo.FieldByName('Historico').AsString := 'PARCIAL';
// Cálculo parcial
// Por exemplo: 2.000,00 - 1.000,00 = 1.000,00
CdsBaixaPrazo.FieldByName('VALORTOTAL').AsFloat := CdsBaixaPrazo.FieldByName('ValorParcela').AsFloat - ValorTotal;
// Zera a variável, já que após o pagamento parcial, não vai sobrar mais nada
ValorTotal := 0;
CdsBaixaPrazo.Post;
// Move para a próxima parcela
CdsBaixaPrazo.Next;
CdsBaixaPrazo.ApplyUpdates(0);
Continue;
end;
end;
// end;
end;
Bruno Henrique
Curtidas 0
Respostas
Felipe Morais
17/09/2017
Bom dia, Bruno
Se entendi bem, ao fazer o pagamento parcial as parcelas ficam quitadas, e a última receberia o valor a ser pago de 640,00, é isso? Se sim, acho que uma das formas de implementar a sua solução seria setando as duas como "pago" e a terceira receberia o valor residual.
As 3 parcelas mostradas na imagem possuem identificador único? Se sim, mapeie a última parcela e atribua o valor residual.
Se entendi bem, ao fazer o pagamento parcial as parcelas ficam quitadas, e a última receberia o valor a ser pago de 640,00, é isso? Se sim, acho que uma das formas de implementar a sua solução seria setando as duas como "pago" e a terceira receberia o valor residual.
As 3 parcelas mostradas na imagem possuem identificador único? Se sim, mapeie a última parcela e atribua o valor residual.
GOSTEI 0
Bruno Henrique
17/09/2017
Moraissan, boa tarde!!!Grato por responder!!!
É isso mesmo que você intendeu que eu quero fazer, mais é isso que eu não estou conseguindo fazer colocar as duas primeiras como paga e lançar o valor residual de R$ 640,00 para a última parcela.
Como fazeria ?Tem algum exemplo?
É isso mesmo que você intendeu que eu quero fazer, mais é isso que eu não estou conseguindo fazer colocar as duas primeiras como paga e lançar o valor residual de R$ 640,00 para a última parcela.
Como fazeria ?Tem algum exemplo?
GOSTEI 0
Felipe Morais
17/09/2017
Bruno, em primeiro lugar, se eu quiser manipular dados de um registro, eu primeiro identificaria estes registros com uma chave única (ID incremental, pro exemplo). Definiria um campo com o número da parcela (NumParcela INT), e percorreria estas parcelas. A última parcela (o campo máximo de NumParcela) teria seu valor original alterado para o residual (isto é, de 2880 para 640) e as demais parcelas eu setaria como "quitado" (outro campo do registro a ser definido).
Pense na definição da tabela de parcelas mais ou menos assim (usei o SQL Server pra construir a tabela):
Veja que o campo "IDConta" seria uma chave estrangeira para a conta à qual estas parcelas se referem. Para cada parcela criada o campo "Quitado" é zero, e somente após pagamento, este campo é setado para 1.
Assim, percorra sua tabela quitando as demais contas (Quitado = 1) e altere o campo "Valor" da última parcela para o valor residual, no seu caso 640,00.
Espero ter ajudado.
Abraços.
Pense na definição da tabela de parcelas mais ou menos assim (usei o SQL Server pra construir a tabela):
CREATE TABLE TB_Parcelas ( IDParcela INT NOT NULL PRIMARY KEY IDENTITY, IDConta INT NOT NULL, NumParcela SMALLINT NOT NULL, Valor DECIMAL(5, 4), Quitado BIT NOT NULL DEFAULT 0 FOREIGN KEY (IDConta) REFERENCES TB_Conta(IDConta) )
Veja que o campo "IDConta" seria uma chave estrangeira para a conta à qual estas parcelas se referem. Para cada parcela criada o campo "Quitado" é zero, e somente após pagamento, este campo é setado para 1.
Assim, percorra sua tabela quitando as demais contas (Quitado = 1) e altere o campo "Valor" da última parcela para o valor residual, no seu caso 640,00.
Espero ter ajudado.
Abraços.
GOSTEI 0