Ir ao conteúdo

Posts recomendados

Postado

Boa noite pessoal, estou quebrando a cabeça em uma questão aqui faz dois dias, já pesquisei em vários Fóruns e vídeo aulas mais sem sucesso.

O Problema é o Seguinte.

Tenho duas tabelas (contas_a_pagar) e (conta_a_pagar detalhes), em uma delas tenho um atualizo via "FORM" as contas com valores total da mesma, na outra atualizo "Botão Gerar Parcelas" e utilizo para gerar as parcelas.
A Parte 1 que uso para gerar parcelas e inserir na minha tabela "contas_a_pagar_detalhe" esta funcionando normalmente e usei o comando abaixo:

 

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);

var

 qend, qend1 : TZQuery;

 LongintVar, i : Integer;

 DataConta : TDate;

 DataUltParcela : TDate;

begin

 qend := TZQuery.Create(nil);

 qend.Connection := dm.Conect;



 qend1 := TZQuery.Create(nil);

 qend1.Connection := dm.Conect;



 qend.SQL.Clear;

 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+

              ' FROM CONTAS_A_PAGAR WHERE ID = '''+

 dm.qContasaPagar.FieldByName('id').asstring +''' ');

 qend.Open;



 qend1.SQL.Clear;

 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+

 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');

 qend1.Open;



   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

   DataConta := StrToDate(edt_Data_CP.text);

 try

  if LongintVar = 1 then

   begin

     Messagedlg('Este Pagamento não tem Parcelas a Ser Geradas!',mtinformation,[mbok],0);

     exit;

   end

   else

 if qend1.RecordCount > 0 then

  begin

   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);

   exit;

  end

  else

  begin

  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

  for I := 1 to LongintVar do

    begin

     qend1.SQL.Clear;

     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+

                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+

                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');

     qend1.SQL.Add(' VALUES                                  ');

     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');



     qend1.ParamByName('P1').asString    :=

                                     qend.FieldByName('CENTRODECUSTO').asString;



     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;



     qend1.ParamByName('P3').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;



     qend1.ParamByName('P4').asString    := '0';

     qend1.ParamByName('P5').asString    := '0';

     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i);

     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);

     qend1.ParamByName('P8').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;

     qend1.ExecSQL;

     end;

  end;



  except

   On E: Exception do

   raise Exception.Create(E.Message);



  end;

      ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');

end;



A Segunda Parte que é para atualizar meu campo "DatavUltParcela" na minha tabela conforme a "contas_a_pagar" é que mora o problema.

Segue o comando que estou usando para ela.
 

begin

      qend.SQL.Clear;

      qend.SQL.Add(' UPDATE CONTAS_A_PAGAR SET  (DATAVULTPARCELA)        '+#10+

      ' WHERE ID = '''+ qend1.FieldByName('IDCONTA').AsString +'''       ');

      qend.SQL.Add(' VALUES                                              ');

      qend.SQL.Add(' (:CP1)                                              ');

      qend.ParamByName('CP1').asDate      := incMonth(DataConta, i);

      qend.ExecSQL;

      end;



Será que estou fazendo algo de errado?

Segue o código Completo do codigo:

 

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);

var

 qend, qend1 : TZQuery;

 LongintVar, i : Integer;

 DataConta : TDate;

 DataUltParcela : TDate;

begin

 qend := TZQuery.Create(nil);

 qend.Connection := dm.Conect;



 qend1 := TZQuery.Create(nil);

 qend1.Connection := dm.Conect;



 qend.SQL.Clear;

 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+

              ' FROM CONTAS_A_PAGAR WHERE ID = '''+

 dm.qContasaPagar.FieldByName('id').asstring +''' ');

 qend.Open;



 qend1.SQL.Clear;

 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+

 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');

 qend1.Open;



   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

   DataConta := StrToDate(edt_Data_CP.text);

 try

  if LongintVar = 1 then

   begin

     Messagedlg('Este Pagamento não tem Parcelas a Ser Geradas!',mtinformation,[mbok],0);

     exit;

   end

   else

 if qend1.RecordCount > 0 then

  begin

   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);

   exit;

  end

  else

  begin

  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

  for I := 1 to LongintVar do

    begin

     qend1.SQL.Clear;

     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+

                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+

                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');

     qend1.SQL.Add(' VALUES                                  ');

     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');



     qend1.ParamByName('P1').asString    :=

                                     qend.FieldByName('CENTRODECUSTO').asString;



     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;



     qend1.ParamByName('P3').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;



     qend1.ParamByName('P4').asString    := '0';

     qend1.ParamByName('P5').asString    := '0';

     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i);

     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);

     qend1.ParamByName('P8').AsCurrency

                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;

     qend1.ExecSQL;

     end;



     begin

      LongintVar := StrToInt(edt_QtdParcelas_CP.Text);

      for I := 1 to LongintVar do

      begin

       qend.SQL.Clear;

       qend.SQL.Add(' UPDATE CONTAS_A_PAGAR SET  (DATAVULTPARCELA)        '+#10+

       ' WHERE ID = '''+ qend1.FieldByName('IDCONTA').AsString +'''       ');

       qend.SQL.Add(' VALUES                                              ');

       qend.SQL.Add(' (:CP1)                                              ');

       qend.ParamByName('CP1').asDate      := incMonth(DataConta, i);

       qend.ExecSQL;

       end;

    end;







  end;



  except

   On E: Exception do

   raise Exception.Create(E.Message);



  end;

      ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');

end;



Estou trabalhando com banco de dados Mysql.

Será que estou colocando a segunda parte no lugar errado? Falta algo? ou o Procedimento é errado?

Alguém pode me ajudar por favor?

Estou iniciando meus trabalhos com Delphi Tokio 10.2 e ainda sou um pouco leigo no assunto!!!

Desde já agradeço a todos que ajudarem ou pelo menos tentarem.

Postado

Pessoal, consegui resolver aqui!!!

Montei uma SQL para atualizar com um c o campo fantasma que já havia na segunda tabela (DataRecebimento), este campo se tornou a data da ultima parcela com o comando MAX() de  acordo com ID e IDCONTA.

Segue o código:

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);
var
 qend, qend1 : TZQuery;
 LongintVar, i : Integer;
 LongintVar2, i2 : Integer;
 DataConta : TDate;
 DataUltParcela : TDate;
begin
 qend := TZQuery.Create(nil);
 qend.Connection := dm.Conect;
	 qend1 := TZQuery.Create(nil);
 qend1.Connection := dm.Conect;
	 qend.SQL.Clear;
 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+
              ' FROM CONTAS_A_PAGAR WHERE ID = '''+
 dm.qContasaPagar.FieldByName('id').asstring +''' ');
 qend.Open;
	 qend1.SQL.Clear;
 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+
 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');
 qend1.Open;
	   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
   DataConta := StrToDate(edt_Data_CP.text);
	
 try
	  if qend1.RecordCount > 0 then
  begin
   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);
   exit;
  end
  else
  begin
  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
  for I := 1 to LongintVar do
    begin
     qend1.SQL.Clear;
     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+
                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+
                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');
     qend1.SQL.Add(' VALUES                                  ');
     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');
	     qend1.ParamByName('P1').asString    :=
                                     qend.FieldByName('CENTRODECUSTO').asString;
	     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;
	     qend1.ParamByName('P3').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
	     qend1.ParamByName('P4').asString    := '0';
     qend1.ParamByName('P5').asString    := '0';
	     if LongintVar = 1 then
     begin
      qend1.ParamByName('P6').asDate      := DataConta;
     end
     else
     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i-1);
     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);
     qend1.ParamByName('P8').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
     qend1.ExecSQL;
     end;
	  end;
	  except
   On E: Exception do
   raise Exception.Create(E.Message);
	  end;
	     if LongintVar = 1 then
   begin
     ShowMessage('Foi Gerada ' + IntToStr(LongintVar) + ' Parcela com Sucesso');
     BitBtn_PesquisarCP.Click;
   end
   else
     ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');
     BitBtn_PesquisarCP.Click;
end;

adicionado 0 minutos depois

Pessoal, consegui resolver aqui!!!

Montei uma SQL para atualizar com um c o campo fantasma que já havia na segunda tabela (DataRecebimento), este campo se tornou a data da ultima parcela com o comando MAX() de  acordo com ID e IDCONTA.

Segue o código:

procedure Tfrm_ContasAPagar.BitBtn_GerarParcaela_MovClick(Sender: TObject);
var
 qend, qend1 : TZQuery;
 LongintVar, i : Integer;
 LongintVar2, i2 : Integer;
 DataConta : TDate;
 DataUltParcela : TDate;
begin
 qend := TZQuery.Create(nil);
 qend.Connection := dm.Conect;
	 qend1 := TZQuery.Create(nil);
 qend1.Connection := dm.Conect;
	 qend.SQL.Clear;
 qend.SQL.Add(' SELECT ID, CENTRODECUSTO, VALORTOTAL '+#10+
              ' FROM CONTAS_A_PAGAR WHERE ID = '''+
 dm.qContasaPagar.FieldByName('id').asstring +''' ');
 qend.Open;
	 qend1.SQL.Clear;
 qend1.SQL.Add('SELECT IDCONTA FROM CONTAS_A_PAGAR_DETALHE '+
 'WHERE IDCONTA = '''+ qend.FieldByName('ID').AsString +''' ');
 qend1.Open;
	   LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
   DataConta := StrToDate(edt_Data_CP.text);
	
 try
	  if qend1.RecordCount > 0 then
  begin
   Messagedlg('As Parcelas Já Foram Geradas Anteriormente!',mtinformation,[mbok],0);
   exit;
  end
  else
  begin
  LongintVar := StrToInt(edt_QtdParcelas_CP.Text);
  for I := 1 to LongintVar do
    begin
     qend1.SQL.Clear;
     qend1.SQL.Add(' INSERT INTO CONTAS_A_PAGAR_DETALHE      '+#10+
                  ' (CENTRODECUSTO, IDCONTA, VALOR, JUROS,   '+#10+
                  '  DESCONTOS, DATAVENCIMENTO, PARCELA, VALORDEVEDOR)     ');
     qend1.SQL.Add(' VALUES                                  ');
     qend1.SQL.Add(' (:P1, :P2, :P3, :P4, :P5, :P6, :P7, :P8)     ');
	     qend1.ParamByName('P1').asString    :=
                                     qend.FieldByName('CENTRODECUSTO').asString;
	     qend1.ParamByName('P2').asString    := qend.FieldByName('ID').asString;
	     qend1.ParamByName('P3').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
	     qend1.ParamByName('P4').asString    := '0';
     qend1.ParamByName('P5').asString    := '0';
	     if LongintVar = 1 then
     begin
      qend1.ParamByName('P6').asDate      := DataConta;
     end
     else
     qend1.ParamByName('P6').asDate      := incMonth(DataConta, i-1);
     qend1.ParamByName('P7').AsString   := IntToStr(i)+'/'+ IntToStr(LongintVar);
     qend1.ParamByName('P8').AsCurrency
                           := qend.FieldByName('VALORTOTAL').Value / LongintVar;
     qend1.ExecSQL;
     end;
	  end;
	  except
   On E: Exception do
   raise Exception.Create(E.Message);
	  end;
	     if LongintVar = 1 then
   begin
     ShowMessage('Foi Gerada ' + IntToStr(LongintVar) + ' Parcela com Sucesso');
     BitBtn_PesquisarCP.Click;
   end
   else
     ShowMessage('Foram Geradas ' + IntToStr(LongintVar) + ' Parcela(s) com Sucesso');
     BitBtn_PesquisarCP.Click;
end;

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!