e_pera Novato
Registrado: Quinta-Feira, 22 de Janeiro de 2009 Mensagens: 96
|
Enviada: Qua Dez 06, 2023 9:57 am Assunto: Remover Datas Concomitantes - [Resolvido] |
|
|
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 |
|