Fórum Gerar parcela automaticamente #400435

06/05/2011

0

Boa dia a todos, Sera que alguem pode me dar uma ajuda nessa questao. Estou desenvolvendo uma aplicação onde o cliente deverá pagar uma taxa todo mês. No cadastro do cliente eu informo o valor que ele deverá pagar. Eu queria fazer o seguinte, o cliente ira escolher uma data para o vencimento e a partir dai o sistema ira gerar essa mensalidade como aberta todo mes, bastado eu ir la e baixar. Como se fosse um cartao de credito, se eu escolher dia 05 todo dia 05 de cada mes o sistema ira me informar que o cliente possui uma mensalidade em aberto. Bastando eu ir nela e dar baixa. Estou usando Delphi 7, Sqlconection, clientdateset, datasetprovider, sqldataset e firebird 2.0. Eu tenho uma tabela de cliente e uma tabela de mensalidade. onde no cliente informo o valor a ser pago e a data que ele escolher para o vencimento. na tabela mensalidade tenho as mensalidades em aberto, o valor, o nome do cliente, a data de pagamento, o valor, multa, etc.



Se alguem puder me dar um exemplo montado.
Willian Amor

Willian Amor

Responder

Posts

06/05/2011

Rodrigo Mattos

amigo, vê se essa video aula te ajuda http://www.youtube.com/watch?v=XWnjwyVFpq0 e aqui também http://www.activedelphi.com.br/forum/viewtopic.php?t=21911&highlight=parcela mas no seu caso da para você fazer uma procedure, e na hora de entrar no sistema, você verifica se tem mensalidade no mês, se não existir mensalidade você gera.





Espero ter Ajudado.
Responder

Gostei + 0

06/05/2011

Willian Amor

Obrigado por responder, mas ainda nao consegui com esse exemplo.

O que eu quero é tipo assim.



Eu tenho um provedor de internet.

Eu tenho o cliente willian, que vai me pagar R$ 50,00 todo mes. O cliente willian escolhe q vai me pagar todo dia 20 de cada mes.


Entao quando ele me pagar eu apenas irei dar baixar, sem precisar lançar as parcelas a receber na mao.
Responder

Gostei + 0

06/05/2011

André Silveira

O que eu faria seria, ao logar no sistema verificar se todas as parcelas de todos os cliente no mês estão geradas, se não estiverem eu geraria as parcelas.
Responder

Gostei + 0

06/05/2011

Willian Amor

O que eu faria seria, ao logar no sistema verificar se todas as parcelas de todos os cliente no mês estão geradas, se não estiverem eu geraria as parcelas.


é exatamente isso que quero fazer, mas nao sei como.
Responder

Gostei + 0

08/05/2011

Willian Amor

Estou usando o exemplo abaixo, porem ele gera apenas uma unica parcela e depois pede para colocar o ID do Cliente novamente.

No Evento onClick do botão incluir coloque

procedure TForm1.Btn_IncluirClick(Sender: TObject);
var
i: integer;
Begin Dm.cdsparcela.Open; //Abro o Banco
verificaparcela; //Chamo um procedimento para verificar se tem prestação pendente
i:=0; // Minha variável no caso i inicialmente é 0
for i := 1 to StrToInt(edParcela.Text) do  // minha variável recebe 1 do numero de parcelas no caso o digitado dentro de edParcela.Text


begin
if dm.cdsparcela.RecordCount < i then // verifico o numero é menor do que o da variavel
dm.cdsparcela.Insert  // se for insiro

else  //senao edito
dm.cdsparcela.Edit; //PARC vai receber o numero de parcelas que eu digitei dm.cdsparcela.FieldByName('descricao').Value:=edtdescricao.Text;
dm.cdsparcela.FieldByName('PARC').Value := i; //VALOR vai receber o valor digitado  dividido pelo numero de parcelas
dm.cdsparcela.FieldByName('VALOR').Value :=(StrToFloat(edtValor.Text)/StrToInt(edParcela.Text)));
dm.cdsparcela.FieldByName('DATA').Value:= incMonth( Date, i - 1); //DATA recebe a data replicando conforme o numero das parcelas
dm.cdsparcela.Post;  //Gravo no banco dm.cdsparcela.Next; //vou para o próximo
end;
//Dou um updade para gravar esse registro no banco lembre-se que quando
dm.cdsparcelas.ApplyUpdates(0); //ApplyUpdates(0) para gravar no banco o (0) significa o numero de erros
showmessage('Arquivo incuido com sucesso'); //Mando uma mensagem de texto
end;

em private declare o procedimento de verificacao
procedure verificaparcela; Ctrl+Shift+C para criar o procedimento

procedure TForm1.verificaparcela;
var  //Crio uma variavel para verificar o resultado
result:string;
begin
if dm.cdsparcela.Fields.Fields[2].AsString<>'' then  //Aqui verifico se a coluna em que esta a parcela esta vazia
begin
dm.cdsgerar.Open; //Abro o ClientDataset de verificação de contagem dos campos
begin
result:=dm.cdsgerarCOUNT.AsString; //result vai receber a quantidade de parcelas em aberto
Showmessage('Você possui '+ result +' parcelas pendentes' + #13
+ 'Nao é possivel efetuar pagamento'); //envio uma mesagem para o usuario falando que tem a quantidade que retornar em aberto
abort; //aborto a operação e fecho o ClientDataSet referente a contagem dos campos
dm.cdsgerar.Close;
end;
end;
end; Para criar as parcelas na impressão. Trabalho com Quirk Report. Basta colocar um botão de Imprimir Parcelas e digite o seguinte código. Coloque no Quirk 1 bands. Detalhes. Ligue o QuickRep1 na DM.cdsparcela e coloque os compontes.


Aqui esta o meu form para gerar as parcelas.


onde escolho o nome do motorista, digito o numero de parcelas e o valor total a ser dividido, porem como disse antes, ele gera apenas uma parcela, nao salva no banco e nao geras as demais para o mesmo motorista. Ele gera apenas uma e some com o nome depois pede para informar outro nome para continuar.


Alguem pode me dar uma ajuda?



Responder

Gostei + 0

08/05/2011

Willian Amor

Estou usando o exemplo abaixo, porem ele gera apenas uma unica parcela e depois pede para colocar o ID do Cliente novamente.

No Evento onClick do botão incluir coloque

procedure TForm1.Btn_IncluirClick(Sender: TObject);
var
i: integer;
Begin Dm.cdsparcela.Open; //Abro o Banco
verificaparcela; //Chamo um procedimento para verificar se tem prestação pendente
i:=0; // Minha variável no caso i inicialmente é 0
for i := 1 to StrToInt(edParcela.Text) do  // minha variável recebe 1 do numero de parcelas no caso o digitado dentro de edParcela.Text


begin
if dm.cdsparcela.RecordCount < i then // verifico o numero é menor do que o da variavel
dm.cdsparcela.Insert  // se for insiro

else  //senao edito
dm.cdsparcela.Edit; //PARC vai receber o numero de parcelas que eu digitei dm.cdsparcela.FieldByName('descricao').Value:=edtdescricao.Text;
dm.cdsparcela.FieldByName('PARC').Value := i; //VALOR vai receber o valor digitado  dividido pelo numero de parcelas
dm.cdsparcela.FieldByName('VALOR').Value :=(StrToFloat(edtValor.Text)/StrToInt(edParcela.Text)));
dm.cdsparcela.FieldByName('DATA').Value:= incMonth( Date, i - 1); //DATA recebe a data replicando conforme o numero das parcelas
dm.cdsparcela.Post;  //Gravo no banco dm.cdsparcela.Next; //vou para o próximo
end;
//Dou um updade para gravar esse registro no banco lembre-se que quando
dm.cdsparcelas.ApplyUpdates(0); //ApplyUpdates(0) para gravar no banco o (0) significa o numero de erros
showmessage('Arquivo incuido com sucesso'); //Mando uma mensagem de texto
end;

em private declare o procedimento de verificacao
procedure verificaparcela; Ctrl+Shift+C para criar o procedimento

procedure TForm1.verificaparcela;
var  //Crio uma variavel para verificar o resultado
result:string;
begin
if dm.cdsparcela.Fields.Fields[2].AsString<>'' then  //Aqui verifico se a coluna em que esta a parcela esta vazia
begin
dm.cdsgerar.Open; //Abro o ClientDataset de verificação de contagem dos campos
begin
result:=dm.cdsgerarCOUNT.AsString; //result vai receber a quantidade de parcelas em aberto
Showmessage('Você possui '+ result +' parcelas pendentes' + #13
+ 'Nao é possivel efetuar pagamento'); //envio uma mesagem para o usuario falando que tem a quantidade que retornar em aberto
abort; //aborto a operação e fecho o ClientDataSet referente a contagem dos campos
dm.cdsgerar.Close;
end;
end;
end; Para criar as parcelas na impressão. Trabalho com Quirk Report. Basta colocar um botão de Imprimir Parcelas e digite o seguinte código. Coloque no Quirk 1 bands. Detalhes. Ligue o QuickRep1 na DM.cdsparcela e coloque os compontes.


Aqui esta o meu form para gerar as parcelas.


onde escolho o nome do motorista, digito o numero de parcelas e o valor total a ser dividido, porem como disse antes, ele gera apenas uma parcela, nao salva no banco e nao geras as demais para o mesmo motorista. Ele gera apenas uma e some com o nome depois pede para informar outro nome para continuar.


Alguem pode me dar uma ajuda?




onde escolho o nome do motorista, digito o numero de parcelas e o valor total a ser dividido, porem como disse antes, ele gera apenas uma parcela, nao salva no banco e nao geras as demais para o mesmo motorista. Ele gera apenas uma e some com o nome depois pede para informar outro nome para continuar, nao gera tambem o vencimento da proxima parcela para o mes seguinte.


Eis meus forms abaixo.

http://imageshack.us/photo/my-images/52/parcela.jpg/


http://imageshack.us/photo/my-images/15/erroparcela.jpg/
Responder

Gostei + 0

23/10/2011

Daverson

ola vc ja conseguiu resolver isso...???

sem sim poderia me ajudar a fazer a mesma coisa?
se nao vamos resolver isso juntos

qualquer coisa me avise por email jdaverson-arroba-gmail.com
Responder

Gostei + 0

08/12/2012

Robert Camargo

ola vc ja conseguiu resolver isso...???

sem sim poderia me ajudar a fazer a mesma coisa?
se nao vamos resolver isso juntos

qualquer coisa me avise por email jdaverson-arroba-gmail.com


procedure TFormSaidaProdutos.DBEdit7Exit(Sender: TObject);

var parc : integer;
valor: real;
begin

begin
DataModule1.TabelaSaidaPai.Edit;
DataModule1.TabelaSaidaPai.Post;
parc:= 1;
valor:=0;
while parc
Responder

Gostei + 0

08/12/2012

Wasley Portes

Willian, esse erro que está retornando indica que existe o campo ID_MOTORISTA em sua tabela sendo NOT NULL e na sua aplicação você não envia nenhum valor para esse campo no banco de dados.
Qualquer coisa me avisa que lhe dou um help.
msn: wasleyalves@ibest.com.br
Wasley
Responder

Gostei + 0

10/12/2012

Márcio Lima

Olá amigo, eu aconselharia você fazer uma procedure no banco de dados, onde você só informava os parametros no delphi.
Eu tenho uma Procedure já feita para gerar parcelas que eu uso em um sistema meu, se quiser posso te passar.
Responder

Gostei + 0

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

Aceitar