2011-10-25 42 views
1

我有一個每月運行兩次以檢查特定日期的週期性報告。 我正在尋找任何不在下個月15日或下個月的最後一天。Crystal Reports選擇標準:選擇日期代碼清除

我使用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))) 

回答

0

你可以得到這個公式的月份的最後一天。用簡單的英語,這是「下個月的第一天的前一天」返回:

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})
+0

看起來像「dateserial()」函數是這裏的簡短答案。我認爲這涵蓋了它,謝謝。 – Ashlin