Renanbg 1 Denunciar post Postado Julho 9, 2010 Tenho um codigo para inserir parcelas, e gostaria que ao dar o post fosse exibido um messagebox com o valor de cada parcela lançada. O codigo que uso é esse: procedure TForm1.btn1Click(Sender: TObject); var cValor, cResiduo: Double; i, parcela: Integer; data : Tdatetime; begin cValor:= 0; parcela:= 0; data := Date; for i:= 1 to StrToInt(edtParcelas.Text) do begin if i = StrToInt(edtParcelas.Text) then begin cValor:= StrToFloat(FormatFloat('########0.00',(StrToFloat(edttotal.Text) / StrToFloat(edtParcelas.Text)))); cValor:= cValor * StrToFloat(edtParcelas.Text); cResiduo:= StrToFloat(edttotal.Text) - cValor; cValor := (StrToFloat(edttotal.Text) / StrToFloat(edtParcelas.Text)) + cResiduo; end else cValor:= (StrToFloat(edttotal.Text) / StrToFloat(edtParcelas.Text)); parcela:=parcela + 1; cValor:= StrToFloat(FormatCurr('########0.00',cValor)); data:= data + 30; frmdm.tbparcelas.Append; frmdm.tbparcelasValor.AsCurrency:= cValor; frmdm.tbparcelasData.AsDateTime:= data; frmdm.tbparcelasParcela.Value:= IntToStr(parcela) + '/' + edtParcelas.Text ; frmdm.tbparcelas.Post; end; end; Minha ideia é implementar no projeto um dateedit, para o usuario informar o vencimento da primeira parcela. Então também tenho a duvida de como fazer o calculo para os proximos vencimentos. Compartilhar este post Link para o post Compartilhar em outros sites
Geovane Velmer 0 Denunciar post Postado Julho 9, 2010 Tenho um codigo para inserir parcelas, e gostaria que ao dar o post fosse exibido um messagebox com o valor de cada parcela lançada. Veja se pode te ajudar esse exemplo que fiz.. procedure TfrmGeraParcelas.btGerarClick(Sender: TObject); var cValor : Double; cResiduo : Double; i : Integer; dVencimento: TDateTime; sParcelamento:String; begin //-- Zera a variavel cValor:= 0; //-- Limpa o Memo Memo.Clear; dVencimento:= Date; sParcelamento:= 'Confirma o parcelamento abaixo?'+#13; for i:= 1 to StrToInt(dtParcela.Text) do //Loop de parcelas q serão geradas begin dVencimento:= dVencimento + 30; //-- Verifica se é a ultima parcela if i = StrToInt(dtParcela.Text) then begin //-- Formata e divide o valor //-- Pela quantidade de parcelas cValor:= StrToFloat(FormatFloat('########0.00',(StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text)))); //-- Multiplica o valor pela qt parcelas cValor:= cValor * StrToFloat(dtParcela.Text); //-- Lota a varivel com residuo cResiduo:= StrToFloat(dtValor.Text) - cValor; cValor := (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text)) + cResiduo; end else cValor:= (StrToFloat(dtValor.Text) / StrToFloat(dtParcela.Text)); //--- Formata o valor cValor:= StrToFloat(FormatCurr('########0.00',cValor)); sParcelamento:= sParcelamento +#13+IntToStr(i)+'º Parcela - '+FormatDateTime('dd/mm/yyyy',dVencimento)+' - Valor: R$ '+FloatToStr(cValor); end; sParcelamento:= sParcelamento +#13+'------------------------------------------------'; sParcelamento:= sParcelamento +#13+'Total = '+FormatFloat('R$ ###,###,##0.00',StrToFloat(dtValor.Text)); if Application.MessageBox(Pchar(sParcelamento),'Atenção',mb_yesno+mb_defbutton2+mb_iconquestion) = id_yes then Memo.Text:= sParcelamento; end; Boa sorte! Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Julho 12, 2010 Bom dia Geovane. Muito bom esse seu codigo, mas por algum motivo que desconheço ao adaptar ele ao meu codigo que citei no primeiro topico deu algo estranho. Aparece a mensagem com o parcelamento certinho, mas insere no banco só a ultima parcela. Alguma ideia do que posso estar fazendo errado? Mexi mais um pouco e resolvi deixar sem a mensagem que pede confirmação. Coloquei apenas uma mensagem informando que foi gravado e ficou show. Minha unica duvida é na formatação do valor. Se lançar 3 parcelas de 100,00 por exemplo...ele aparece na mensagem sem a farmatação, ou seja, aparece 100 Compartilhar este post Link para o post Compartilhar em outros sites
Geovane Velmer 0 Denunciar post Postado Julho 12, 2010 Aparece a mensagem com o parcelamento certinho, mas insere no banco só a ultima parcela. Alguma ideia do que posso estar fazendo errado? Minha unica duvida é na formatação do valor. Se lançar 3 parcelas de 100,00 por exemplo...ele aparece na mensagem sem a farmatação, ou seja, aparece 100 No caso da formatação use o FormatFloat ou FormatCurr procedure TForm1.BitBtn1Click(Sender: TObject); var cNum:Double; begin cNum:= 100; ShowMessage(FormatCurr('R$ ###,###,##0.00',cNum)); end; Resultado = R$ 100,00 Qual banco do dados você está usando? Se for firebird fassa assim.. procedure TForm1.BitBtn1Click(Sender: TObject); begin try for i:= 1 to iParcelas do begin //-- Aqui vai a rotina que insere as parcelas end; except CancelaTransação; //-- Caso de erro cancela a transação ShowMessage('Ocorreu um erro!'); Exit; end; //-- Exibe a mensagem de confirmação if Application.MessageBox('Confirma','Atenção',mb_yesno) = id_yes then ConfirmaTransação //-- Se confirma grava os dados else CancelaTransação; //-- se nao cancela a inserção end; No caso acima você insere tudo no banco e não confirma a transação.. dai no final você exibe a mensagem perguntando ao operador se é isso mesmo se for confirma a transação do contrario cancela.. A questão de estar inserindo apenas a ultima parcela, pode ser que você esteja colocando a rotina de inserção fora do Loop. Espero de esclareça. Compartilhar este post Link para o post Compartilhar em outros sites
Renanbg 1 Denunciar post Postado Julho 12, 2010 Olá Geovane, Pra mensagem formatar então deixei assim: sParcelamento:= sParcelamento +#13+IntToStr(i)+'ª Parcela - '+FormatDateTime('dd/mm/yyyy',data)+' - R$ '+FormatCurr('########0.00',cValor); Sobre o banco, estou usando o paradox mesmo. Trata-se de uma aplicação pequena. Realmente eu coloquei o codigo fora do loop. Agora esta tudo ok. Obrigado pelas dicas. Compartilhar este post Link para o post Compartilhar em outros sites