Gerar parcela automaticamente
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.
Se alguem puder me dar um exemplo montado.
Willian Amor
Curtidas 0
Respostas
Rodrigo Mattos
06/05/2011
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.
Espero ter Ajudado.
GOSTEI 0
Willian Amor
06/05/2011
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.
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.
GOSTEI 0
André Silveira
06/05/2011
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.
GOSTEI 0
Willian Amor
06/05/2011
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.
GOSTEI 0
Willian Amor
06/05/2011
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?
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?
GOSTEI 0
Willian Amor
06/05/2011
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?
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/
GOSTEI 0
Daverson
06/05/2011
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
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
GOSTEI 0
Robert Camargo
06/05/2011
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
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
GOSTEI 0
Wasley Portes
06/05/2011
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
Qualquer coisa me avisa que lhe dou um help.
msn: wasleyalves@ibest.com.br
Wasley
GOSTEI 0
Márcio Lima
06/05/2011
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.
Eu tenho uma Procedure já feita para gerar parcelas que eu uso em um sistema meu, se quiser posso te passar.
GOSTEI 0