【问题标题】:Crystal Reports: Display date range (month, first day of month, year to month, last day, year) based on field valueCrystal Reports:根据字段值显示日期范围(月、月的第一天、年到月、最后一天、年)
【发布时间】:2018-11-23 13:11:16
【问题描述】:

我需要在字段中显示基于日期前一个月的日期范围。例如,如果日期值 (DOCDATE)6/6/18,我希望范围显示为:

5/1/18 to 5/31/18

我可以使用 LASTFULLMONTH 并设置最小和最大限制,它适用于当月的记录,但我需要使用 DOCDATE 作为控件。

【问题讨论】:

    标签: crystal-reports date-range


    【解决方案1】:

    您可以使用以下公式实现此目的。
    请注意公式名称,因为它们部分相互依赖。

    {@prevMonth}
    {@DOCDATE}中减去一个月得到上个月

    DateAdd("m", -1, {@DOCDATE})
    

    {@startDate}
    通过从{@prevMonth} 的年份和月份以及1 的日期创建一个新日期来获取开始日期(上个月的第一天)。

    Date(Year({@prevMonth}), Month({@prevMonth}), 1)
    

    {@endDate}
    通过从{@DOCDATE}1 的年月日减去一天创建一个新日期来获取结束日期(上个月的最后一天)

    Date(DateAdd("d", -1, Date(Year({@DOCDATE}), Month({@DOCDATE}), 1)))
    

    {@displayRange}
    显示范围。

    CStr({@startDate}) & " to " & CStr({@endDate})
    

    【讨论】:

    • 感谢您的意见!你介意把完整的公式放在一起让我检查一下吗?我试过了,它总是抛出错误。
    • 把完整的公式放在一起到底是什么意思?有 4 个公式,你需要它们。您还必须将{@DOCDATE} 替换为相应的数据库字段。
    • 我对在 CR 中编写公式还很陌生,所以可能会遗漏一些明显的东西。我将以下公式粘贴到我的报告中并检查了它是否有错误,它说它不能将@prevMonth 识别为字段名称。 DateAdd("m", -1, {SOP10100.DOCDATE}) & Date(Year({@prevMonth}), Month({@prevMonth}), 1) Date(DateAdd("d", -1, Date(Year ({SOP10100.DOCDATE}), Month({SOP10100.DOCDATE}), 1))) CStr({@startDate}) & " to " & CStr({@endDate})
    • 那行不通。您必须创建四个单独的公式。像上面提到的那样命名它。所以第一个公式名称是prevMonth,内容为DateAdd("m", -1, {SOP10100.DOCDATE}).;第二个公式名称将是startDate...等等。如果您在另一个公式中使用一个公式,则 Crystal Reports 需要格式 {@FORMULANAME}。
    • 没问题,很乐意提供帮助。
    猜你喜欢
    • 2015-07-09
    • 1970-01-01
    • 2017-08-22
    • 2018-06-06
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多