Gerar Parcelas de Carnê
Como gerar parcelas de carnê de pagamento.
Criando um Gerador de Parcelas – Carnê de pagamento
Salve,salve delphianos.
Neste artigo vou ensinar como criar um gerador de carnê
de pagamento.
Delphi 7 com Firebird 2.1.
Em primeira mão iremos construir nosso banco de dados.
Mão na massa.Abra o Ibexpert. Depois de configurar seu caminho e tudo
mais, vamos criar a base de dados.
Iremos criar 2 tabelas.
1 – cliente
2 – Parcela
Vamos criar os Geradores e depois de autoincremento.
Abra o Ibexpert. Click no SQLEditor(F12). Digite : create
sequence seq_cliente. Pronto!
Tabela de clientes
Tabela de parcelas não precisa de chave primária.
Agora vamos para o Delphi 7.
Crie um DataModulo e coloque as conexões do dbexpress.
Feito isso dê o nome do Datamodulo de DM e salve com
U_DM.
Agora vamos adicionar os componentes de conexões do banco
da dados.
1- Primeiro
o SQLConnection
2- Configure
o caminho da conexão.
As propriedades do SQLConnection
Não esqueça de configurar o (loginprompt) para false e o (vendorlib) para fbclient.dll
Database: localhost:c:\carne\banco.fdb
Faça o teste de conexão veja se esta tudo ok e vamos para o outro
componente.
Conexão
com o SQLDataSet.
Conecte o SQLConnection com o Con1 e na propriedade Commandtext digite:
Clausula SQL ‘Select * from cliente’
No
DataSetProvider ligue no sdscleinte
Mudando as propriedades: poAllowComandtext
e UpdateMode para upWhereKeyOnly.
ClienteDataSet – Ligado /DataSetProvider – (Propriedade) ProviderName
(nome da tabela)
Coloquei apenas o campo de nome para apenas ter o
exemplo.
Agora vamos criar o formulário de cadastro de cliente.
Faça você mesmo.
Criar
Master/Detail
Coloque um dataset a mais para criar um master/detalhe ligando
no sdscliente.
Assim as ligações dos demais são iguais, só vai mudar no
cdscliente que vai aparecer um novo DataSetField que é o sdsparcelas na tabela
de cliente. Não se preoculpe...
feito isso vamos para o próximo passo.
SDSparcela configure o param
O SDSparcela é ligado na propriedade DataSourse no
Dsdetalhe como
Mostra a figura abaixo. Não precisaremos de DataSetProvider.
Agora colocaremos mas 3 componentes de conexão de banco
de dados. Para criamos o gerador de parcelas. Ele vai gerar a quantidade de
parcelas no carnê.
Coloque o SQLDataSet e na propriedade commandtext digite:
SELECT COUNT(NUM_PARCELAS) FROM PARCELA. As outras ligações em normais mesmo.
Agora vamos montar nosso formulário de . As outras
ligações em normais mesmo.
Agora vamos montar nosso formulário de gerar carnê.
o formulário de cliente é bem simples mesmo. Feito isso
vamos para o próximo de carnê.
Adiciona alguns clientes.
No formulário Carnê adicione:
1 Dblookcombobox da palheta Datacontrol. (id_cliente)
3 edits da palheta Standard ( 1 –parcelas, 1 –valor
–1 Descricao do produto comprado)
1 DateTimePicker da palheta Win32 (data)
1 DBGRig para ver os dados ( visualizar as parcelas geradas)
1 DateTimePicker da palheta Win32 (data)
1 DBGRig para ver os dados ( visualizar as parcelas geradas)
coloque no formulário
os 2 edits com os nomes de
EdtValor e EdParcela
em o DateTimePicker com o nome de EdtData
conectando ao banco
Usaremos a palheta DBExpress
Obs.não esqueça de abrir o banco de dados
os 2 edits com os nomes de
EdtValor e EdParcela
em o DateTimePicker com o nome de EdtData
conectando ao banco
Usaremos a palheta DBExpress
Obs.não esqueça de abrir o banco de dados
do cliente no evento onshow.
No Evento onClick do botão
incluir coloque
procedure TForm1.Btn_IncluirClick(Sender: TObject);
var
i: integer;
Begin
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
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.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;
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.
procedure Tfrm_parcelas.btn2Click(Sender: TObject);
begin
Frm_RelPArc.QuickRep1.Preview;
end;
Ate a próxima.
Descrição colunista:
Maxiwel
Eduardo C. Rodrigues;
cladelphi@hotmail.com/cladelphi@yahoo.com
Cursando
Administração: é desenvolvedor Delphi desde 2000, atua como gerente de TI na
Secretaria de Saúde Caxias-MA. Técnico em Informática, analista de Sistema. Professor
e programador.
</wordtidy>
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo