Crystal reports Crystal Reports选择条件:所选日期代码清理

Crystal reports Crystal Reports选择条件:所选日期代码清理,crystal-reports,crystal-reports-8.5,Crystal Reports,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 Da

我有一个定期报告,每月运行两次,以检查具体日期。 我正在寻找任何不在下一个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)))
如果DatePart(“d”,CurrentDate)<15,则
不((日期部分(“d”),{gb_comb_stmt.nxt_stmt_dt})=15和
DatePart(“m”,{gb_comb_stmt.nxt_stmt_dt})=DatePart(“m”,CurrentDate)和
DatePart(“yyyy”,{gb\u comb\u stmt.nxt\u stmt\u dt})=日期部分(“yyyy”,CurrentDate))
或(DatePart(“d”)、{gb_comb stmt.nxt_stmt_dt})=DatePart(“d”)、DateAdd(“d”、-1、DateAdd(“m”、1、日期(年(当前日期)、月(当前日期)、1)))和
DatePart(“m”,{gb_comb_stmt.nxt_stmt_dt})=DatePart(“m”,CurrentDate)和
DatePart(“yyyy”,{gb\u comb\u stmt.nxt\u stmt\u dt})=DatePart(“yyyy”,CurrentDate)))
其他的
不((日期部分(“d”),{gb_comb_stmt.nxt_stmt_dt})=15和
日期部分(“m”,“gb\u comb\u stmt.nxt\u stmt\u dt})=(日期部分(“m”,CurrentDate)+1)和
DatePart(“yyyy”,{gb\u comb\u stmt.nxt\u stmt\u dt})=日期部分(“yyyy”,CurrentDate))
或(DatePart(“d”)、{gb_comb stmt.nxt_stmt_dt})=DatePart(“d”)、DateAdd(“d”、-1、DateAdd(“m”、1、日期(年(当前日期)、月(当前日期)、1)))和
DatePart(“m”,{gb_comb_stmt.nxt_stmt_dt})=DatePart(“m”,CurrentDate)和
DatePart(“yyyy”,{gb\u comb\u stmt.nxt\u stmt\u dt})=DatePart(“yyyy”,CurrentDate)))

您可以使用此公式计算当月的最后一天。通俗地说,它返回“下个月第一天的前一天”:

dateserial(年(当前日期)、月(当前日期)+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})
看起来“dateserial()”函数是这里的简短答案。我想这就够了,谢谢。