Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Renanbg

[Resolvido] MessageBox Dinamico e Salto de data

Recommended Posts

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.