Ajuda em melhorar o código, deixar o código mais limpo (sequência de if then)
24/05/2020
0
Boa tarde, gostaria da ajuda para melhorar o trecho a seguir (deixar mais limpo )
data_ini := StartOfTheMonth(gf_data_fim);
data_fim := gf_data_fim;
ultimo_dia := EndOfTheMonth(data_fim);
dia_str := copy(FormatDateTime('dd/mm/yyyy',data_fim), 1, 2);
if trunc(ultimo_dia) = trunc(data_fim) then
begin
data_ini := StartOfTheMonth(data_fim);
data_fim := data_fim
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) > 3)then
begin
data_ini := data_fim - 3;
data_fim := data_fim;
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) = 3) then
begin
data_ini := data_fim - 2;
data_fim := data_fim;
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) = 2) then
begin
data_ini := data_fim - 1;
data_fim := data_fim;
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) = 1) then
begin
data_ini := data_fim;
data_fim := data_fim;
end;
minha aplicação tem uma exportação diária do caixa e ela ocorre da seguinte maneira
último dia da cada mês eu exporto os 30 ou 31 dias, mas por exemplo no dia 29 eu exporto apenas os últimos 3 dias (29 - 3) assim ficaria dias 29, 28,27 e 26, para os dias iniciais do mês se for dia 2 eu exporto dia 2 menos 1 (exportando assim dias 2 e 1), dia 3 eu exporto 3 menos 2 (exportando dias 3, 2, e 1). Assim eu evito que nos dias iniciais do mês eu não exporte os últimos dias o mês anterior.
data_ini := StartOfTheMonth(gf_data_fim);
data_fim := gf_data_fim;
ultimo_dia := EndOfTheMonth(data_fim);
dia_str := copy(FormatDateTime('dd/mm/yyyy',data_fim), 1, 2);
if trunc(ultimo_dia) = trunc(data_fim) then
begin
data_ini := StartOfTheMonth(data_fim);
data_fim := data_fim
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) > 3)then
begin
data_ini := data_fim - 3;
data_fim := data_fim;
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) = 3) then
begin
data_ini := data_fim - 2;
data_fim := data_fim;
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) = 2) then
begin
data_ini := data_fim - 1;
data_fim := data_fim;
end;
if (trunc(data_fim) < trunc(ultimo_dia)) and (StrToInt(dia_str) = 1) then
begin
data_ini := data_fim;
data_fim := data_fim;
end;
minha aplicação tem uma exportação diária do caixa e ela ocorre da seguinte maneira
último dia da cada mês eu exporto os 30 ou 31 dias, mas por exemplo no dia 29 eu exporto apenas os últimos 3 dias (29 - 3) assim ficaria dias 29, 28,27 e 26, para os dias iniciais do mês se for dia 2 eu exporto dia 2 menos 1 (exportando assim dias 2 e 1), dia 3 eu exporto 3 menos 2 (exportando dias 3, 2, e 1). Assim eu evito que nos dias iniciais do mês eu não exporte os últimos dias o mês anterior.
Emanuel Gonçalves
Curtir tópico
+ 0
Responder
Post mais votado
24/05/2020
basta fazer:
ou seja: basta um único if
var dia: word; [...] data_ini := StartOfTheMonth(gf_data_fim); // data_ini = 1o. dia do mês de gf_data_fim data_fim := gf_data_fim; ultimo_dia := EndOfTheMonth(data_fim); // ultimo_dia = ultimo dia do mês de gf_data_fim dia := DayOf(data_fim); // dia em data_fim - DayOf() está contida na unit DateUtils // se data_fim for igual a ultimo_dia, nada precisa ser feito // porque data_ini seria '01/05/2020' e data_fim seria '31/05/2020' // se data_fim for menor que ultimo_dia, e dia for maior que 3, obtém sempre os últimos 4 dias // portanto, se data_fim = '25/05/2020', então data_ini será '22/05/2020' if (trunc(data_fim) < trunc(ultimo_dia)) and (dia > 3) then data_ini := data_fim - 3 // se dia for menor ou igual a 3, nada precisa ser feito, // porque data_ini seria '01/05/2020' e data_fim seria, por exemplo, '03/05/2020'
Emerson Nascimento
Responder
Mais Posts
24/05/2020
Emerson Nascimento
basta fazer:
ou seja: você precisa de um único if
var dia_data_ini, dia_data_fim, dia_ultimo_dia: word; // da forma que as variáveis são tratadas abaixo, // sabemos que todas as datas estão dentro do mesmo mês // logo só é preciso trabalhar com o dia data_ini := StartOfTheMonth(gf_data_fim); // data_ini = 1o. dia do mês de gf_data_fim data_fim := gf_data_fim; ultimo_dia := EndOfTheMonth(data_fim); // ultimo_dia = ultimo dia do mês de gf_data_fim dia_data_ini := DayOf(data_ini); // dia em data_ini - DayOf() está na unit DateUtils dia_data_fim := DayOf(data_fim); // dia em data_fim - DayOf() está na unit DateUtils dia_ultimo_dia := DayOf(ultimo_dia); // dia em ultimo_dia - DayOf() está na unit DateUtils // se o dia_data_fim for igual a dia_ultimo_dia, nada precisa ser feito // porque data_ini seria '01/05/2020' e data_fim seria '31/05/2020' // se dia_data_fim for maior que 3 e menor que dia_ultimo_dia, obtém sempre os últimos 4 dias // portanto, se dia_data_fim = 25, então data_ini será '22/05/2020' if (dia_data_fim < dia_ultimo_dia) and (dia_data_fim > 3) then data_ini := data_fim - 3 // se dia_data_fim for menor ou igual a 3, nada precisa ser feito, // porque data_ini seria '01/05/2020' e data_fim seria, por exemplo, '03/05/2020'
Responder
25/05/2020
Emanuel Gonçalves
Perfeito, muito obrigado !!!
basta fazer:
ou seja: basta um único if
var dia: word; [...] data_ini := StartOfTheMonth(gf_data_fim); // data_ini = 1o. dia do mês de gf_data_fim data_fim := gf_data_fim; ultimo_dia := EndOfTheMonth(data_fim); // ultimo_dia = ultimo dia do mês de gf_data_fim dia := DayOf(data_fim); // dia em data_fim - DayOf() está contida na unit DateUtils // se data_fim for igual a ultimo_dia, nada precisa ser feito // porque data_ini seria '01/05/2020' e data_fim seria '31/05/2020' // se data_fim for menor que ultimo_dia, e dia for maior que 3, obtém sempre os últimos 4 dias // portanto, se data_fim = '25/05/2020', então data_ini será '22/05/2020' if (trunc(data_fim) < trunc(ultimo_dia)) and (dia > 3) then data_ini := data_fim - 3 // se dia for menor ou igual a 3, nada precisa ser feito, // porque data_ini seria '01/05/2020' e data_fim seria, por exemplo, '03/05/2020'
Responder
Clique aqui para fazer login e interagir na Comunidade :)