ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Remover Datas Concomitantes - [Resolvido]

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
e_pera
Novato
Novato


Registrado: Quinta-Feira, 22 de Janeiro de 2009
Mensagens: 96

MensagemEnviada: Qua Dez 06, 2023 9:57 am    Assunto: Remover Datas Concomitantes - [Resolvido] Responder com Citação

Bom dia,
Já levantei um tempo atrás este tópico, e, tinha colocado como resolvido, só que agora estou enfrentando o mesmo problema novamente, senão vejamos:
- Tenho um vetor contendo datas de entrada, saída e atividade especial, preciso remover as datas que são repetidas, mas está dando erro, se alguém puder me ajudar.
Segue abaixo o vetor que possuo, e, o que eu tento remover as datas concomitantes:

Vetor original
│ Seq. │ INÍCIO │ FINAL │ TIPO ESPECIAL
│ 01 │ 06/01/1978 │ 27/12/1978 │ 25 anos
│ 02 │ 19/06/1986 │ 31/01/1987 │ 25 anos
│ 03 │ 01/02/1987 │ 31/03/1987 │ 25 anos
│ 04 │ 01/04/1987 │ 31/10/1987 │ 25 anos
│ 05 │ 01/11/1987 │ 30/04/1988 │ 25 anos
│ 06 │ 01/05/1988 │ 26/02/1994 │ 25 anos
│ 07 │ 01/08/1994 │ 30/05/1995 │ comum
│ 08 │ 01/02/1996 │ 27/04/1997 │ 25 anos
│ 09 │ 28/04/1997 │ 30/09/2000 │ comum
│ 10 │ 01/10/2000 │ 05/06/2001 │ comum
│ 11 │ 23/06/2001 │ 22/06/2013 │ comum
│ 12 │ 20/06/2010 │ 24/06/2016 │ 25 anos
│ 13 │ 24/08/2001 │ 23/06/2013 │ 25 anos
│ 14 │ 01/06/2010 │ 07/06/2011 │ 25 anos
│ 15 │ 08/07/2011 │ 26/06/2013 │ 25 anos
│ 16 │ 21/10/2016 │ 12/08/2017 │ 25 anos

vetor corrigido
│ Seq.│ INÍCIO │ FINAL │ TIPO ESPECIAL
│ 01 │ 06/01/1978 │ 27/12/1978 │ 25 anos
│ 02 │ 19/06/1986 │ 31/01/1987 │ 25 anos
│ 03 │ 01/02/1987 │ 31/03/1987 │ 25 anos
│ 04 │ 01/04/1987 │ 31/10/1987 │ 25 anos
│ 05 │ 01/11/1987 │ 30/04/1988 │ 25 anos
│ 06 │ 01/05/1988 │ 26/02/1994 │ 25 anos
│ 07 │ 01/08/1994 │ 30/05/1995 │ comum
│ 08 │ 01/02/1996 │ 27/04/1997 │ 25 anos
│ 09 │ 28/04/1997 │ 30/09/2000 │ comum
│ 10 │ 01/10/2000 │ 05/06/2001 │ comum
│ 11 │ 23/06/2001 │ 19/06/2010 │ comum
│ 12 │ 20/06/2010 │ 24/06/2016 │ 25 anos
│ 13 │ 21/10/2016 │ 12/08/2017 │ 25 anos

Note que o período 13 do vetor original é especial 25 anos, mas ele não aparece no vetor corrigido.

meu código para comparar as datas é o seguinte:
Código:
procedure TForm2.RemoverDataConcomitante(var ArrayPeriodos: TArrayPeriodos);
var
  I: Integer;
  Data_Inicial, Data_Final: TDateTime;
  Periodo_Especial: Boolean;
  Data_FinalAnterior: TDateTime;
  Periodo_EspecialAnterior: Boolean;
  ArrayPeriodos_Temp: TArrayPeriodos;
  PeriodoApurado: TPeriodos;
begin
  // *** inicializa as variáveis...
  Data_FinalAnterior := 0;
  Periodo_EspecialAnterior := False;
  ArrayPeriodos_Temp := ArrayPeriodos;
  SetLength(ArrayPeriodos, 0);

  for I := Low(ArrayPeriodos_Temp) to High(ArrayPeriodos_Temp) do
  begin
    // *** inicializa as variáveis...
    Data_Inicial := ArrayPeriodos_Temp[ I ].Data_Inicial;
    Data_Final := ArrayPeriodos_Temp[ I ].Data_Final;
    Periodo_Especial := ArrayPeriodos_Temp[ I ].Tipo_Atividade <> 'comum';

    // *** inicia as comparações...
    if (Data_Final > Data_FinalAnterior) or ((Periodo_Especial) and (Not Periodo_EspecialAnterior)) then
    begin
      if (Data_Inicial <= Data_FinalAnterior) and (Periodo_Especial) and (not Periodo_EspecialAnterior) then
      begin
        ArrayPeriodos[ I - 1 ].Data_Final := Data_Inicial - 1;
        Data_FinalAnterior := ArrayPeriodos[ I - 1 ].Data_Final
      end;

      if Data_Inicial <Data_FinalAnterior> Data_FinalAnterior then
    begin
      Data_FinalAnterior := Data_Final;
      Periodo_EspecialAnterior := Periodo_Especial;
    end;
  end;
end;


Alguém pode ajudar
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail Yahoo Messenger MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB