Fórum Erro Parcelamento #533356

02/10/2015

0

Boa tarde!!!

Estou tentando efetuar um parcelamento e não estou conseguindo, quando eu clico na forma de pagamento me retorna vários erros e não estou conseguindo achar a solução!!!
Se alguém puder ajudar!!!
Grato
[img:descricao=Tela Inicial]http://arquivo.devmedia.com.br/forum/imagem/316964-20151002-121712.jpg[/img]
[img:descricao=Erro 1]http://arquivo.devmedia.com.br/forum/imagem/316964-20151002-121728.jpg[/img]
[img:descricao=Erro 2]http://arquivo.devmedia.com.br/forum/imagem/0-20151002-121754.jpg[/img]

fonte
unit Unit5;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Mask, DBXpress, FMTBcd, SqlExpr, DB, DBClient,
  DBCtrls, Provider;

type
  TFrmFinalizaChequePre = class(TForm)
    GroupCliente: TGroupBox;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    GroupDadosCheque: TGroupBox;
    Label2: TLabel;
    Edit3: TEdit;
    Label3: TLabel;
    Edit4: TEdit;
    Edit5: TEdit;
    Label4: TLabel;
    Edit6: TEdit;
    Label5: TLabel;
    Edit7: TEdit;
    Label6: TLabel;
    Edit8: TEdit;
    Label7: TLabel;
    Edit9: TEdit;
    GroupLancamentos: TGroupBox;
    Label8: TLabel;
    EdtValorTotalCheque: TEdit;
    Label9: TLabel;
    EdtQuantidadeParcelas: TEdit;
    Label10: TLabel;
    EdtQuantidadeDias: TEdit;
    Label11: TLabel;
    EdtDia: TEdit;
    Label12: TLabel;
    EdtValorParcela: TEdit;
    Label13: TLabel;
    MskVencimento: TMaskEdit;
    Label14: TLabel;
    EdtRestante: TEdit;
    GridParcelas: TStringGrid;
    BtnLimpar: TButton;
    BtnLancar: TButton;
    BtnGravar: TButton;
    BtnCancelar: TButton;
    EdtAcrescimo: TEdit;
    txtTot: TEdit;
    Conexao: TSQLConnection;
    DsParcelamento: TDataSource;
    qryParcelamento: TSQLDataSet;
    cbParcelamento: TDBLookupComboBox;
    Label15: TLabel;
    DspParcelamento: TDataSetProvider;
    CdsParcelamento: TClientDataSet;
    qryParcelamentoCODIGO: TIntegerField;
    qryParcelamentoDESCRICAO: TStringField;
    qryParcelamentoQUANTIDADEPARCELAS: TIntegerField;
    qryParcelamentoQUANTIDADEDIASINICIAL: TIntegerField;
    qryParcelamentoACRESCIMO: TIntegerField;
    procedure gridtop;
    procedure FormShow(Sender: TObject);
    procedure BtnLancarClick(Sender: TObject);
    procedure EdtValorTotalChequeExit(Sender: TObject);
    procedure EdtDiaExit(Sender: TObject);
    procedure EdtValorParcelaEnter(Sender: TObject);
    procedure MskVencimentoExit(Sender: TObject);
    procedure EdtRestanteEnter(Sender: TObject);
    procedure EdtRestanteExit(Sender: TObject);
    procedure cbParcelamentoClick(Sender: TObject);
    procedure EdtValorTotalChequeEnter(Sender: TObject);
    procedure EdtValorTotalChequeKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmFinalizaChequePre: TFrmFinalizaChequePre;
  valorsoma: currency;
  valortotal: currency;
  quantidadeparcelas, parcelas: integer;
  vencimento, dia, mes, ano, codigoParcela: string;
  centavo, soma, valorparcela, total, restante,totaljuros, acrescimo: currency;

implementation
uses Bib;

{$R *.dfm}

procedure TFrmFinalizaChequePre.gridtop;
begin
  if GridParcelas .RowCount>4
    then GridParcelas.TopRow:=GridParcelas.RowCount-4;
end;


procedure TFrmFinalizaChequePre.FormShow(Sender: TObject);
begin
  valorsoma:=0.00;
  GridParcelas.Cells[1,0]:='Parcelas';
  GridParcelas.Cells[2,0]:='Vencimento';
  GridParcelas.Cells[3,0]:='Valor';
    if GroupCliente.Enabled=false then
      begin
      CbParcelamento.SetFocus;
      qryParcelamento.Close; qryParcelamento.Open;
      cbParcelamentoClick(sender);
    end
    else EdtDia.SetFocus;
       // qryParcelamento.Close; qryParcelamento.Open;
end;

procedure TFrmFinalizaChequePre.BtnLancarClick(Sender: TObject);
var i: integer;
begin
  if (quantidadeparcelas=1) and (strtocurr(converte2(EdtValorParcela.Text))<strtocurr(converte2(EdtRestante.Text))) then
  begin
      mess(FrmFinalizaChequePre.Handle,'Valor da Prestação Não Confere !!!',MB_ICONWARNING or MB_OK);
      EdtValorParcela.SetFocus;
      exit;
    end
  else
    begin
      if StrToDate(MskVencimento.Text)=date then
        begin
          if StrToCurr(Converte2(EdtValorTotalCheque.Text))<>StrToCurr(Converte2(EdtValorParcela.Text)) Then
            begin
              Mess(FrmFinalizaChequePre.Handle,'Valor Recebido Não Confere com o Valor da Prestação!!!',MB_ICONWARNING or MB_OK);
              EdtValorParcela.SetFocus;
              Exit;
            end;
    valorsoma:=valorsoma+StrToCurr(Converte2(EdtValorParcela.Text));
    parcelas:=parcelas+1;
    i:=GridParcelas.Rowcount-1;
    GridParcelas.Cells[1,i]:=FormatFloat('00',parcelas);
    GridParcelas.Cells[2,i]:=MskVencimento.Text;
    GridParcelas.Cells[3,i]:=Converte(Converte2(EdtValorParcela.Text),7,2);
    GridParcelas.RowCount:=i+2;
    quantidadeparcelas:=quantidadeparcelas-1;

    MskVencimento.Text:=datetostr(strtodate(vencimento)+30);
          if dia<>copy(MskVencimento.Text,1,2) then MskVencimento.Text:=dia+copy(MskVencimento.Text,3,8);

    vencimento:=MskVencimento.Text;
          EdtRestante.Text:=Converte(CurrtoStr(Rounds(StrToCurr(Converte2(EdtRestante.Text))-StrToCurr(Converte2(EdtValorParcela.Text)),2)),9,2);
    if trim(EdtRestante.Text)<>'0,00' then
            begin
              valorparcela:=StrToCurr(Converte2(EdtRestante.Text))/quantidadeparcelas;
              centavo:=((valorparcela*100)-int(valorparcela*100));
              centavo:=Rounds(((centavo*quantidadeparcelas)/100),2);
              valorparcela:=(int(valorparcela*100)/100)+centavo;
              soma:=Rounds(valorparcela+soma,2);

              EdtValorParcela.Text:=converte(CurrToStr(Rounds(valorparcela,2)),9,2);
              gridtop;
              EdtValorParcela.SetFocus;
            end
          else
          begin
              EdtValorParcela.Text:=Converte('0',9,2);
              EdtRestante.Text:=Converte('0',9,2);
              MskVencimento.Clear;
              BtnGravar.SetFocus;

              //limpa variaveis
              parcelas:=0;           quantidadeparcelas:=0;
              centavo:=0.00;         soma:=0.00;
              total:=0.00;
              restante:=0.00;
            end;
        end
      else
      begin
          if quantidadeparcelas>0 then
            begin
              valorsoma:=valorsoma+StrToCurr(Converte2(EdtValorParcela.Text));
              parcelas:=parcelas+1;
              i:=GridParcelas.Rowcount-1;
              GridParcelas.Cells[1,i]:=FormatFloat('00',parcelas);
              GridParcelas.Cells[2,i]:=MskVencimento.Text;
              GridParcelas.Cells[3,i]:=Converte(Converte2(EdtValorParcela.Text),7,2);
              GridParcelas.RowCount:=i+2;
              quantidadeparcelas:=quantidadeparcelas-1;
              MskVencimento.Text:=datetostr(strtodate(MskVencimento.Text)+30);
              if dia<>copy(MskVencimento.Text,1,2) then MskVencimento.Text:=dia+copy(MskVencimento.Text,3,8);

              vencimento:=MskVencimento.Text;
              EdtRestante.Text:=Converte(CurrtoStr(Rounds(StrToCurr(Converte2(EdtRestante.Text))-StrToCurr(Converte2(EdtValorParcela.Text)),2)),9,2);
              if trim(EdtRestante.Text)<>'0,00' then
                begin
                  if trim(EdtAcrescimo.Text)>'0' then valorparcela:=StrToCurr(Converte2(EdtValorTotalCheque.Text))/StrToCurr(Converte2(EdtQuantidadeParcelas.Text))
                  else valorparcela:=StrToCurr(Converte2(EdtRestante.Text))/quantidadeparcelas;
                  centavo:=((valorparcela*100)-int(valorparcela*100));
                  centavo:=Rounds(((centavo*quantidadeparcelas)/100),2);
                  valorparcela:=(int(valorparcela*100)/100)+centavo;
                  soma:=Rounds(valorparcela+soma,2);

                  EdtValorParcela.Text:=converte(CurrToStr(Rounds(valorparcela,2)),9,2);
                  gridtop;
                  EdtValorParcela.SetFocus;
                end
              else
                begin
                  EdtValorParcela.Text:=Converte('0',9,2);
                  EdtRestante.Text:=Converte('0',9,2);
                  MskVencimento.Clear;
                  BtnGravar.SetFocus;

              //limpa variaveis
              parcelas:=0;           quantidadeparcelas:=0;
              centavo:=0.00;         soma:=0.00;
              total:=0.00;
              restante:=0.00;
                end;
            end;
        end;
    end;
  if (trim(EdtAcrescimo.Text)>'0') and (quantidadeparcelas=0) then
    begin
      BtnGravar.SetFocus;
      EdtRestante.Text:=Converte('0',9,2);
      EdtValorParcela.Text:=Converte('0',9,2);
      EdtValorTotalCheque.Text:=converte(currtostr(strtocurr(converte2(EdtValorTotalCheque.Text))+totaljuros),9,2);
    end;



end;

procedure TFrmFinalizaChequePre.EdtValorTotalChequeExit(Sender: TObject);
begin
  EdtValorTotalCheque.Text:=Converte(EdtValorTotalCheque.Text,9,2);
  if trim(CbParcelamento.Text)<>'' then BtnLancar.Click;
end;

procedure TFrmFinalizaChequePre.EdtDiaExit(Sender: TObject);
var i:integer;
begin
  if trim(EdtDia.Text)='' then
    begin
      mess(FrmFinalizaChequePre.Handle,'Informa o Dia para Vencimento!',MB_ICONINFORMATION or MB_OK);
      EdtDia.SetFocus;
      exit;
    end;

    if trim(EdtValorTotalCheque.Text)<>'0,00' then
    begin
     // txtCartao.Text:=Converte('0',9,2);
      //txtTicket.Text:=Converte('0',9,2);
      EdtValorTotalCheque.Text:=Converte('0',9,2);
      //txtDinheiro.Text:=Converte('0',9,2);
      //txtTroco.Text:=Converte('0',9,2);
    end;
    //limpa grid
  for  i:=1   to GridParcelas.RowCount-2 do
   begin
     GridParcelas.cells[1,i]:='';
     GridParcelas.cells[2,i]:='';
     GridParcelas.cells[3,i]:='';
   end;
   GridParcelas.Rowcount:=2;

  quantidadeparcelas:=strtoint(trim(EdtQuantidadeParcelas.Text));
  total:=StrToCurr(Converte2(EdtValorTotalCheque.Text));
  acrescimo:=StrToCurr(Converte2(EdtAcrescimo.Text));
  mes:=copy(datetostr(date),4,2);
  dia:=FormatFloat('00',strtoint(EdtDia.Text));
  if EdtDia.Text<>'' then
    begin
      vencimento:=dia+'/'+mes+'/'+ano;
      MskVencimento.Text:=DateToStr(strtodate(vencimento)+StrToInt(Converte2(EdtQuantidadeDias.Text)));

      //l_tot:=Rounds((l_total*(l_acrescimo/100))+l_total,2);
      valorparcela:=total/quantidadeparcelas;
      centavo:=(valorparcela*100)-int(valorparcela*100);
      centavo:=Rounds(((centavo*quantidadeparcelas)/100),2);
      valorparcela:=(int(valorparcela*100)/100)+centavo;
      EdtRestante.Text:=Converte(CurrtoStr(Rounds(total,2)),9,2);
      EdtValorParcela.Text:=converte(currtostr(rounds(valorparcela,2)),9,2);   //converte(CurrToStr(Rounds(((l_valorParc*(l_acrescimo/100))+l_valorParc),2)),9,2);
      txtTot.Text:=converte(CurrToStr(Rounds(total,2)),9,2);
    end;
end;

procedure TFrmFinalizaChequePre.EdtValorParcelaEnter(Sender: TObject);
begin
  EdtValorParcela.Text:=Converte2(EdtValorParcela.Text);
  EdtValorParcela.SelectAll;
end;

procedure TFrmFinalizaChequePre.MskVencimentoExit(Sender: TObject);
begin
  if trim(MskVencimento.Text)='/  /' then
    begin
      mess(FrmFinalizaChequePre.Handle,'Informe uma data de Vencimento!',MB_ICONINFORMATION or MB_OK);
      MskVencimento.SetFocus;
      exit;
    end;
  if StrtoDate(MskVencimento.Text)<date() then
    begin
      mess(FrmFinalizaChequePre.Handle,'Data de Vencimento menor, Verifique!',MB_ICONINFORMATION or MB_OK);
      MskVencimento.SetFocus;
      exit;
    end;
  vencimento:=MskVencimento.Text;
  if StrToDate(MskVencimento.Text)=Date() then
    begin
      //GroupTotal.Enabled:=true;
      EdtValorTotalCheque.Text:=Converte(Converte2(EdtValorParcela.Text),9,2);
      //txtDinheiro.Text:=Converte(Converte2(txtValorParc.Text),9,2);
      //txtCartao.Enabled:=false;
      //txtCheque.Enabled:=false;
      //txtTicket.Enabled:=false;
      //txtDinheiro.SetFocus;
    end;

end;

procedure TFrmFinalizaChequePre.EdtRestanteEnter(Sender: TObject);
begin
  EdtRestante.Text:=Converte2(EdtRestante.Text);
  EdtRestante.SelectAll;
end;

procedure TFrmFinalizaChequePre.EdtRestanteExit(Sender: TObject);
begin
  EdtRestante.Text:=Converte(Converte2(EdtRestante.Text),9,2);
end;

procedure TFrmFinalizaChequePre.cbParcelamentoClick(Sender: TObject);
begin
  EdtQuantidadeParcelas.Text:=qryParcelamento.fieldbyname('QUANTIDADEPARCELAS').AsString;
  EdtQuantidadeDias.Text:=qryParcelamento.fieldbyname('QUANTIDADEDIASINICIAL').AsString;
  EdtAcrescimo.Text:=qryParcelamento.fieldbyname('ACRESCIMO').AsString;
  //txtchqpre.Text:=qryParcelamento.fieldbyname('chqpre').AsString;
  //txtChkCartao.Text:=qryParcelamento.fieldbyname('cartao').AsString;
  EdtDia.Text:=copy(datetostr(date),1,2);
  EdtDia.SetFocus;

  codigoParcela:=qryParcelamento.fieldbyname('CODIGO').AsString;

end;

procedure TFrmFinalizaChequePre.EdtValorTotalChequeEnter(Sender: TObject);
begin
  EdtValorTotalCheque.Text:=Converte2(EdtValorTotalCheque.Text);
  EdtValorTotalCheque.SelectAll;
end;

procedure TFrmFinalizaChequePre.EdtValorTotalChequeKeyPress(
  Sender: TObject; var Key: Char);
begin
  Key:=FkeyPress(EdtValorTotalCheque.Text,Key);
end;

end.
Bruno Henrique

Bruno Henrique

Responder

Posts

02/10/2015

Bruno Henrique

Alguem consegue me ajudar?
Responder

Gostei + 0

05/10/2015

Mateus Carvalho

O primeiro erro é referente a operação matemática. O que o erro está informando é que um campo está vazio "" e ele não é um valor inteiro. Pela imagem, acredito que deve ser o campo "parcelas". De uma verificada, veja qual campo está sendo usado pelo código que está em branco.

O segundo erro está dizendo que o sistema não pode fazer uma operação com o dataset fechado, ou seja, a tabela para postar os dados está fechada, e não tem como realizar nenhuma ação. Coloque o código abaixo ao abrir o form que deve resolver:
table1.active := true; //onde table1 é o nome da tabela



Att!
Responder

Gostei + 0

08/10/2015

Bruno Henrique

Ainda estou sem solução!!!

Se eu disponibilizar o código você pode me ajudar???

Grato
Responder

Gostei + 0

08/10/2015

Mateus Carvalho

Os dois erros ainda estão sem solução? Pois o primeiro erro é que um campo utilizado na operação está vazio. Preencha esses campos vazios por 0 (Atenção: Se na operação tiver divisão, fique atento ao banco preenchido por 0, pois NÃO pode-se dividir por zero).



Att!
Responder

Gostei + 0

15/10/2015

Bruno Henrique

Boa noite!!!

Estou aqui novamente com um novo erro!!! rssss

[img:descricao=''is not a valid floating point value]http://arquivo.devmedia.com.br/forum/imagem/316964-20151015-232249.jpg[/img]

Debuguei o código e o erro apresenta nessa parte do código aonde está comentado //aqui da o erro !!!Mais não achei nada de anormal

procedure TFrmFinalizaChequePre.EdtDiaExit(Sender: TObject);
var i:integer;
begin
  if trim(EdtDia.Text)='' then
    begin
      mess(FrmFinalizaChequePre.Handle,'Informa o Dia para Vencimento!',MB_ICONINFORMATION or MB_OK);
      EdtDia.SetFocus;
      exit;
    end;

    if trim(EdtValorTotalCheque.Text)<>'0,00' then
    begin
     // txtCartao.Text:=Converte('0',9,2);
      //txtTicket.Text:=Converte('0',9,2);
      EdtValorTotalCheque.Text:=Converte('0',9,2);
      //txtDinheiro.Text:=Converte('0',9,2);
      //txtTroco.Text:=Converte('0',9,2);
    end;
    //limpa grid
  for  i:=1   to GridParcelas.RowCount-2 do
   begin
     GridParcelas.cells[1,i]:='';
     GridParcelas.cells[2,i]:='';
     GridParcelas.cells[3,i]:='';
   end;
   GridParcelas.Rowcount:=2;

  quantidadeparcelas:=strtoint(trim(EdtQuantidadeParcelas.Text));
  total:=StrToCurr(Converte2(EdtValorTotalCheque.Text));
  acrescimo:=StrToCurr(Converte2(EdtAcrescimo.Text));//aqui dá o erro
  mes:=copy(datetostr(date),4,2);
  dia:=FormatFloat('00',strtoint(EdtDia.Text));
  if EdtDia.Text<>'' then
    begin
      vencimento:=dia+'/'+mes+'/'+ano;
      MskVencimento.Text:=DateToStr(strtodate(vencimento)+StrToInt(Converte2(EdtQuantidadeDias.Text)));

      //l_tot:=Rounds((l_total*(l_acrescimo/100))+l_total,2);
      valorparcela:=total/quantidadeparcelas;
      centavo:=(valorparcela*100)-int(valorparcela*100);
      centavo:=Rounds(((centavo*quantidadeparcelas)/100),2);
      valorparcela:=(int(valorparcela*100)/100)+centavo;
      EdtRestante.Text:=Converte(CurrtoStr(Rounds(total,2)),9,2);
      EdtValorParcela.Text:=converte(currtostr(rounds(valorparcela,2)),9,2);   //converte(CurrToStr(Rounds(((l_valorParc*(l_acrescimo/100))+l_valorParc),2)),9,2);
      txtTot.Text:=converte(CurrToStr(Rounds(total,2)),9,2);
    end;
end;
Responder

Gostei + 0

16/10/2015

Bruno Henrique

????
Responder

Gostei + 0

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

Aceitar