1

我有一个定期报告,每月运行两次以检查特定日期。我正在寻找不属于本月下一个 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)))
4

1 回答 1

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})
于 2011-10-26T00:39:32.120 回答