以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  时段计算与显示  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=159475)

--  作者:采菊东篱下
--  发布时间:2020/12/27 21:25:00
--  时段计算与显示
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理.foxdb

密码:888888
  我想在缴费情况表实现:
1、如果录入缴费_月租_起计日期、缴费_月租_止计日期,自动计出缴费_月租_缴费月数;
2、如果录入缴费_月租_起计日期、缴费_月租_缴费月数,自动计出缴费_月租_止计日期;
3、缴费_临时停放_缴费时间以时分显示。
  现1、自动计出缴费_月租_缴费月数已实现,但2、自动计出缴费_月租_止计日期,没反应,3、缴费_临时停放_缴费时间未能以时分显示。程序如下:

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        ElseIf dr.IsNull("缴费_月租_起计日期") = False And dr.IsNull("缴费_月租_缴费月数") = False Then
            dr("缴费_月租_止计日期") = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数"))
            dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
            dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
        End If
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
            Dim tp As TimeSpan
            tp = dr("缴费_临时停放_止计时间") - dr("缴费_临时停放_起计时间")
            dr("缴费_临时停放_缴费时间") = tp.TotalHours
        ElseIf dr("缴费_临时停放_缴费时间") * 3 <= 20 Then \'每小时3元停车费,超过20元的按最高20元计。
            dr("缴费_临时停放_缴费金额") = dr("缴费_临时停放_缴费时间") * 3
        Else
            dr("缴费_临时停放_缴费金额") = 20
        End If
End Select
[此贴子已经被作者于2020/12/27 21:26:07编辑过]

--  作者:有点蓝
--  发布时间:2020/12/27 22:04:00
--  
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:小区车辆管理(1).zip


--  作者:采菊东篱下
--  发布时间:2020/12/27 22:42:00
--  
时段一般是这样显示的:
2020-10-01到2020-12-31为3个月,一般不跨到第二个月月初的,因此我算出的月份与公式算出的月份相差1,我加了1
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select
同样倒求的缴费_月租_止计日期也应算到月底,我参考帮助里的代码其实不符合要求的,取月份的最后一天代码怎成? 
[此贴子已经被作者于2020/12/28 10:10:31编辑过]

--  作者:有点蓝
--  发布时间:2020/12/27 22:58:00
--  
http://www.foxtable.com/webhelp/topics/0265.htm
--  作者:采菊东篱下
--  发布时间:2020/12/28 9:55:00
--  
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month)) \'
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) \'每小时3元停车费,超过20元的按最高20元计.
End Select

最后一天的截止日期问题解决了,还有,临时收费的时间是从30分钟起计的,即30分钟内不收费,超过30分钟后安每小时3元计,超过20元的按最高20元,我把最后的代码改为:
        If dr("缴费_临时停放_缴费时间") = tp.TotalSeconds > 1800 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) \'每小时3元停车费,超过20元的按最高20元计
        End If.
报错!请教应怎么写?
[此贴子已经被作者于2020/12/28 9:58:23编辑过]

--  作者:有点蓝
--  发布时间:2020/12/28 9:57:00
--  
 If dr("缴费_临时停放_缴费时间")  > 1800 Then
--  作者:采菊东篱下
--  发布时间:2020/12/28 10:04:00
--  
不行49分钟还是算钱
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month)) 
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 1800 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) \'每小时3元停车费,超过20元的按最高20元计
        End If
End Select
[此贴子已经被作者于2020/12/28 10:04:25编辑过]

--  作者:有点蓝
--  发布时间:2020/12/28 10:14:00
--  
计算的时候减去30分钟呗,小学数学
--  作者:采菊东篱下
--  发布时间:2020/12/28 10:19:00
--  
我打错字了,是停29分钟还是收钱,它应不收钱的。
--  作者:采菊东篱下
--  发布时间:2020/12/28 10:22:00
--  
可以了:
Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_止计日期"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_止计日期") Then
            dr("缴费_月租_缴费月数") = Nothing
        Else
            dr("缴费_月租_缴费月数") = DateDiff("m",dr("缴费_月租_起计日期"),dr("缴费_月租_止计日期")) + 1
        End If
        Systemready = True
    Case "缴费_月租_缴费月数","缴费_月租_月租单价"
        Dim dr As DataRow = e.DataRow
        dr("缴费_月租_缴费金额") = dr("缴费_月租_缴费月数") * dr("缴费_月租_月租单价")
End Select

Select Case e.DataCol.name
    Case "缴费_月租_起计日期","缴费_月租_缴费月数"
        Dim dr As DataRow = e.DataRow
        Systemready = False
        If dr.IsNull("缴费_月租_起计日期") OrElse dr.IsNull("缴费_月租_缴费月数") Then
            dr("缴费_月租_止计日期") = Nothing
        Else
            Dim a As Date = dr("缴费_月租_起计日期").AddMonths(dr("缴费_月租_缴费月数") - 1)
            dr("缴费_月租_止计日期") = New Date(a.Year,a.Month,Date.DaysInMonth(a.Year,a.Month))
        End If
        Systemready = True
End Select

Select Case e.DataCol.name
    Case "缴费_临时停放_起计时间","缴费_临时停放_止计时间"
        Dim dr As DataRow = e.DataRow
        If dr.IsNull("缴费_临时停放_起计时间") OrElse dr.IsNull("缴费_临时停放_止计时间") Then
            dr("缴费_临时停放_缴费时间") = Nothing
        Else
            Dim tp As TimeSpan
            tp = cdate(dr("缴费_临时停放_止计时间")) - cdate(dr("缴费_临时停放_起计时间"))
            dr("缴费_临时停放_缴费时间") = tp.TotalSeconds
        End If
    Case "缴费_临时停放_缴费时间"
        Dim dr As DataRow = e.DataRow
        If dr("缴费_临时停放_缴费时间") > 1800 Then
            dr("缴费_临时停放_缴费金额") = math.Min(20,dr("缴费_临时停放_缴费时间") / 3600 * 3) \'每小时3元停车费,超过20元的按最高20元计
        Else
            dr("缴费_临时停放_缴费金额") = 0
        End If
End Select