#crystal-reports #crystal-reports-8.5
#crystal-отчеты #crystal-reports-8.5
Вопрос:
У меня есть повторяющийся отчет, который запускается два раза в месяц для проверки определенных дат. Я ищу все, что не попадает на следующий 15-й или следующий последний день месяца.
Я использую Crystal Reports 8.5, если это имеет значение.
Я нашел способ автоматизировать этот процесс, но он очень громоздкий. Мне интересно, есть ли более элегантное решение для следующего кода:
if DatePart ("d", CurrentDate) < 15 then
not ((DatePart ("d", {gb_comb_stmt.nxt_stmt_dt}) = 15 and
DatePart ("m", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("m", CurrentDate) and
DatePart ("yyyy", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("yyyy", CurrentDate))
or (DatePart ("d", {gb_comb_stmt.nxt_stmt_dt}) = DatePart("d", DateAdd("d", -1 , DateAdd("m", 1 , Date(year(currentDate), month(currentDate), 1)))) and
DatePart ("m", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("m", CurrentDate) and
DatePart ("yyyy", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("yyyy", CurrentDate)))
else
not ((DatePart ("d", {gb_comb_stmt.nxt_stmt_dt}) = 15 and
DatePart ("m", {gb_comb_stmt.nxt_stmt_dt}) = (DatePart ("m", CurrentDate) 1) and
DatePart ("yyyy", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("yyyy", CurrentDate))
or (DatePart ("d", {gb_comb_stmt.nxt_stmt_dt}) = DatePart("d", DateAdd("d", -1 , DateAdd("m", 1 , Date(year(currentDate), month(currentDate), 1)))) and
DatePart ("m", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("m", CurrentDate) and
DatePart ("yyyy", {gb_comb_stmt.nxt_stmt_dt}) = DatePart ("yyyy", CurrentDate)))
Ответ №1:
Вы можете получить последний день месяца с помощью этой формулы. На простом английском языке он возвращает «за день до первого числа следующего месяца»:
dateserial(year(currentdate),month(currentdate) 1,1-1)
«Следующее 15-е число месяца» лишь немного отличается:
if datepart("d",currentdate) < 16
then dateserial(year(currentdate),month(currentdate),15)
else
dateserial(year(currentdate),month(currentdate) 1,15)
Объединяя эти два, окончательный выбор записи будет выглядеть следующим образом:
not({gb_comb_stmt.nxt_stmt_dt} = {@formula1})
and not({gb_comb_stmt.nxt_stmt_dt} = {@formula2})
Комментарии:
1. Похоже, что функция «dateserial ()» является здесь коротким ответом. Я думаю, это покрывает это, спасибо.