Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Função calcula edita tabela ou mostra dias entre data


Guest --MXVinícius --

Pergunta

Guest --MXVinícius --

Prezados,

A função abaixo têm por objetivo editar a tabela de contas à pagar e gravar "pendente" no caso de a data atual ser maior que a data de vencimento (isso está funcionando).

Mas o cálculo de dias entre datas não está retornando um valor correto por que não compreendi corretamente como formatar a data no sistema invertido.

Vou explicar.

Na calculadora comum (de mão) joguei a data no formato: 29/11/2007 - 10/11/2007 e ele retorna: 19000000.

Quando jogo assim: 2007/11/19 - 2007/11/10 a calculadora retorna corretamente: 19.

Sendo assim tentei fazer o Delphi formatar a data como yyyy/MM/dd, mas ele deu erro no "yyyy" não sei por que motivo.

Então fiz da forma que segue, mas o resultado é "Você têm + 19/01/1900 de prazo".

Gostaria de consertar isso. Podem me ajudar por gentileza?

procedure TForm1.BitBtn20Click(Sender: TObject);
VAR
dias: String;
emissao, vencimento: TDateTIme;
begin
IF TPagarDataVencimento.AsString < DateToStr(Now) then
        begin
        TPagar.Edit;
TPagarSituacao.Value:= 'Pendente';
        TPagar.Post;
end else begin
        vencimento:= TPagarDataVencimento.value;
        emissao:= TPagarDataEmissao.value;
        dias:= DateToStr(vencimento - emissao);
        ShowMessage('Você têm + ' + (dias) + ' de prazo');
        end;
        end;
end.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Guest --MXVinícius --

Amigos, consegui sem querer!

O problema estava na conversão incorreta dos valores que compreendi numa dica que li aqui:

http://www.forumweb.com.br/foruns/index.php?showtopic=54804

Ficou assim:

procedure TForm1.BitBtn20Click(Sender: TObject);
VAR
dias: real;
emissao, vencimento: TDateTIme;
begin
IF TPagarDataVencimento.AsString < DateToStr(Now) then
        begin
        TPagar.Edit;
TPagarSituacao.Value:= 'Pendente';
        TPagar.Post;
end else begin
        vencimento:= TPagarDataVencimento.value;
        emissao:= TPagarDataEmissao.value;
        dias:= vencimento - emissao;
        ShowMessage('Você têm + ' + FLoatTOStr(dias) + ' de prazo');
        end;
        end;
end.

Um forte abraço a todos!

Link para o comentário
Compartilhar em outros sites

  • 0

MXVinícius, segue uma sugestão para dar uma enxugadinha no seu código.

Utilizando AsDateTime no if, você não precisará fazer a conversão da data para string, livrando-se de problemas de formatação. Também, dê preferência ao uso da função Date quando tratar de datas apenas, já que Now retorna data+hora que em alguns casos pode gerar problema, como por exemplo numa condição de igualdade onde você teria armazenado na sua tabela apenas uma data. Ex.: '29/11/2007' e Now lhe retornaria '29/11/2007 13:06:15', que não seria uma igualdade (coloquei como string apenas para ilustrar melhor).

Também, poderia ocorrer de você ter na sua variável dias, um resultado com decimais (onde ficam armazenadas as horas), o que também poderia ser problema, pois num caso como:'10/11/2007' e Now lhe retornaria '29/11/2007 13:00:00', a diferença resultaria em 19,541666 e que seria assim mostrado por seu ShowMessage. (este você consegue testar)

procedure TForm1.BitBtn20Click(Sender: TObject);
Var
  dias: real;
begin
  if TPagarDataVencimento.AsDateTime < Date then
  begin
    TPagar.Edit;
    TPagarSituacao.Value:= 'Pendente';
    TPagar.Post;
  end else begin
    dias := TPagarDataVencimento.Value - TPagarDataEmissao.Value;
    ShowMessage('Você têm + ' + FLoatTOStr(dias) + ' de prazo');
  end;
end;

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...